FGALDC 14 静かなゲームを みなさん、こんにちは。 先日、2年ぶりぐらいに新幹線というものに乗りました。 私の場合、新幹線だと、在来線と違ってのんびり車窓の風景を楽しむという趣味 がありません。ということで、暇潰しにオアシスポケット3をいじる、というこ とになります。でも、往路はやりたいこと、やらなければならないことが豊富に あるのですが、帰路はさすがにネタ切れとなってしまいます。そういう場合は、 ポケ3でゲームをやる事になります。 さて、ゲームにはビープ音を鳴らすものも数多くあります。ところが、ポケ3に は、どうもビープ音の音量を調整する機能がないようなのです。もしかしたら、 単に私がポケ3の機能を把握していないだけなのかもしれませんが。 そして、ポケ3のビープ音の音量なんですが、そんなに大きな音ではないのです が、でも、新幹線の中でピコピコ鳴らすと隣の席の人などには結構迷惑になるく らいの音量はあります。 今回、Vzのゲームマクロをいくつか遊んでみたのですが、音を消す機能がある ものとないものがありました。私の遊んだものの中で、音を消す機能のある筆頭 は Emmett さんの「さめがめ for VZ」であり、残念ながらデフォルトで音を消す 機能のないものとしては NaruTo さんの VZTOWER や VZFRECEL なんかがあります。 そこで、旅から帰ってきてから考えたことが、これらの NaruTo さんのゲームに 音のON、OFFの機能がつけられないか、ということ。 まず、FREECELL で考えてみました。 とりあえず、ビープ音のフラグ変数には quiet の頭文字の q を使いたいけど、 マクロ中にその他の目的で使っていないことを確認。次に、OFF・ON切替の キーだけど、Q も B も S も既に使われているので使えないし、特にこのゲーム はいろいろなキーを使うから誤入力防止のためにシフト併用にしたいけどシフト キーの判定をしなくて済むように '?' なんてものを使ってみようか。 あとは、&b を使っているところでフラグの判定を追加して、マクロの末尾にフラ グを変化させるルーチンを付け加えて出来上がり。 ということで、以下のような追加・変更を加えてみました。 C:\>fc I:\FREECELL.DEF A:\VZ\FREECELL.DEF ファイルの比較中です. I:\FREECELL.DEF と A:\VZ\FREECELL.DEF ***** I:\FREECELL.DEF ;*変数の退避* ps[,ew[,mi[,b[,c[,pp[,y[,x[,f[,qq[, m[,mm[,g[,h[,l[,ll[,eu[,ei[,du[, ***** A:\VZ\FREECELL.DEF ;*変数の退避* q[+,RX[-,ZH[-,ps[,ew[,mi[,b[,c[,pp[,y[,x[,f[,qq[, m[,mm[,g[,h[,l[,ll[,eu[,ei[,du[, ***** ***** I:\FREECELL.DEF #56#e#e#e#m#e#e#e#m"AY" ;移動先にカードを書く &b(5)>^} :G ((c++)<12)?>F ;各 fountain を調べるまでする。 ***** A:\VZ\FREECELL.DEF #56#e#e#e#m#e#e#e#m"AY" ;移動先にカードを書く (q)?&b(5) >^} :G ((c++)<12)?>F ;各 fountain を調べるまでする。 ***** ***** I:\FREECELL.DEF &v(0)&p &u(r) g=r, ;移動元のラベルを大文字で取得 (g=='S')?{&d&s &20>^} ; 検索処理 ***** A:\VZ\FREECELL.DEF &v(0)&p &u(r) g=r, ;移動元のラベルを大文字で取得 (g=='?')?{&d&s &51>^} ; Beep処理 (g=='S')?{&d&s &20>^} ; 検索処理 ***** ***** I:\FREECELL.DEF ;*** 終了 *** 11: &b(20) ;ビープ &p#C ;確認して一時ファイルを閉じる ***** A:\VZ\FREECELL.DEF ;*** 終了 *** 11: (q)?&b(20) ;ビープ &p#C ;確認して一時ファイルを閉じる ***** ***** I:\FREECELL.DEF du],ei],eu],ll],l],h],g],mm],m], qq],f],x],y],pp],c],b],mi],ew],ps], ep], ***** A:\VZ\FREECELL.DEF du],ei],eu],ll],l],h],g],mm],m], qq],f],x],y],pp],c],b],mi],ew],ps],ZH],RX],q], ep], ***** ***** I:\FREECELL.DEF #^&m("動かせるカードがありません。[確認?]")&p * ***** A:\VZ\FREECELL.DEF #^&m("動かせるカードがありません。[確認?]")&p 51: q!, (q)?{&b(10) &m("Beepを鳴らします[確認?]")} ?{ &m("Beepを鳴らしません[確認?]")}&p * ***** VZTOWER は FREECELL のルーチンをそのまま流用して、以下のようになりました。 C:\>fc I:\VZTOWER.DEF A:\VZ\VZTOWER.DEF ファイルの比較中です. I:\VZTOWER.DEF と A:\VZ\VZTOWER.DEF ***** I:\VZTOWER.DEF #< ;並べたカードの先頭へ ps[,ew[,mi[,c[,pp[,y[,x[,f[,m[,g[,h[, &09 ;偽検索文字列バッファの確保 ***** A:\VZ\VZTOWER.DEF #< ;並べたカードの先頭へ q[+,RX[-,ZH[-,ps[,ew[,mi[,c[,pp[,y[,x[,f[,m[,g[,h[, &09 ;偽検索文字列バッファの確保 ***** ***** I:\VZTOWER.DEF #_&x(f+1) #g r],&o(r)&b(3) #^&d&s ;移動したら最初の fountain から ***** A:\VZ\VZTOWER.DEF #_&x(f+1) #g r],&o(r) (q)?&b(3) #^&d&s ;移動したら最初の fountain から ***** ***** I:\VZTOWER.DEF &p &u(r) g=r, ;移動元のラベルを大文字で取得 (g=='S')?{&d&s &20>^} ; 検索処理 ***** A:\VZ\VZTOWER.DEF &p &u(r) g=r, ;移動元のラベルを大文字で取得 (g=='?')?{&d&s &51>^} ; Beep処理 (g=='S')?{&d&s &20>^} ; 検索処理 ***** ***** I:\VZTOWER.DEF ;*** 終了 *** 8: &b(20) ;ビープ &p#C ;確認して一時ファイルを閉じる h],g],m],f],x],y],pp],c],mi],ew],ps], ep], ***** A:\VZ\VZTOWER.DEF ;*** 終了 *** 8: (q)?&b(20) ;ビープ &p#C ;確認して一時ファイルを閉じる h],g],m],f],x],y],pp],c],mi],ew],ps],ZH],RX],q], ep], ***** ***** I:\VZTOWER.DEF 39: m],#C ;変数の復元、一時ファイルを閉じる * ***** A:\VZ\VZTOWER.DEF 39: m],#C ;変数の復元、一時ファイルを閉じる 51: q!, (q)?{&b(10) &m("Beepを鳴らします[確認?]")} ?{ &m("Beepを鳴らしません[確認?]")}&p * ***** いやぁ、実に快適。 これでつまらん会議中なども、心おきなくゲームに興じる事ができます。 --- としき http://www.hinocatv.ne.jp/~toshiki/