次はGAME AとGAME Bの選択を作る。
今までの再現シリーズは、いきなりスタートしていたし、GAMEの違いは作っていない。
そこで今回は筐体画像の「GAME A」と「GAME B」のボタンの部分をタッチしてもらうようにした。
ただ、ボタンを押してもらうのがわからないと、バグかと思ってしまうので、画面に文字を表示することにした。
こちらも7セグフォントで作ろうとしたが、文字が読みづらいので、普通にmes命令で文字列を表示してみた。
タッチパネル処理は、本体のゲームと同じで、座標値の範囲だけ変更。
Windowsでは、キーボード選択できるように、getkey命令を使った。
stick命令では、拾えないキーの入力を拾える。
A、Bと直接キーを押せば、それぞれのゲームモードになるようにした。
ついでにハイスコアを5秒おきに切り替えることにした。
この時点では、ハイスコアの記録処理を作っていないので、ダミーの値をセット。
なかなかいい具合になってきた。
*selectgame ;ゲーム開始前の処理 redraw 0 pos 0,0 gmode 2 celput 1 ;筐体表示 gosub *showdoor ;ドアの表示 pos 400,300 font "",24,1 mes "Select \nGAME A or GAME B" gamecnt++ if gamecnt>=100000 : gamecnt=0 ;際限なくカウントが増えてオーバーフローしないように ;ハイスコアを表示するゲームモードの切り替え if gamecnt\300=0 { togle=togle^1 } ;ハイスコア表示 pos 331+(283*togle),424 celput 9,togle ;ゲームモードの表示 score=hiscore(togle) gosub *showscore ;キーボードの操作 getkey key,'A' : if key : gamemode=0 getkey key,'B' : if key : gamemode=1 ;タッチパネル操作の判定 mtlist touchid num=stat if num>0 { ;一本以上指がタッチしていて、かつタッチした直後なら id = touchid(0) ;一本目のタッチは0番目 mtinfo touch,id if touch(0)=1 { ;タッチがオンならば ;タッチされた座標を変数に代入、タッチしたフラグを付ける tx=touch(1):ty=touch(2) ;ボタンを押したか座標で判定 if ty>=485 & ty<=638 { if tx>=476 & tx<=584 { gamemode=0 } else : if tx>=585 & tx<=694 { gamemode=1 } } } } await 1000/60 redraw 1 ;ゲームモードが選択されたらゲーム開始 if gamemode>=0 : touched=1:score=0: goto *main goto *selectgame
ゲームモードによる違いを、3つ再現した。
- 工具の落下スピード
- 落ちてくる工具の総数
- ドアの開閉間隔
開閉間隔は、GAME Aが10秒、GAME Bが5秒と固定なので、配列変数に代入して初期値を設定した。
工具の落下スピードは、何フレームごとに工具を落とすかを早めることで変えられる。
工具の総数も、ゲームモードを絡めた判定を入れたらコントロールできる。
「ファイア」の時と同じように、論理式を使って調整している。
;扉開閉の間隔(GAME A:10秒、GAME B:5秒) dim doorinterval,2 doorinterval=600,300 ;ゲームモード gamemode=-1 ;-1:選択前、0:GAME A、1:GAME B ;ゲームスピードの初期値 g_speed_def=12-gamemode*3 g_speed=g_speed_def ;スコアアップによる調整 ;最大工具数 maxtools = 4+(score\100>10)+(score\100>50)+((gamemode=1)*(score\100>80)) ;ゲームスピード g_speed = g_speed_def-(score\100>10)-(score\100>30)-(score\100>50)-(score\100>80)
そして、できたのがこれ。完成にだんだん近づいてきた。