ヒット・アンド・ブロー
概要
マスター・マインドや数当てゲームとよばれるゲームです。 コンピュータが0~9の数字を四つ、重複しないように選びますので、数字と並びとを当ててください。 15回以内に当てられなければコンピュータの勝ちです。
ゲームが始まったらあ、数字キーで、四桁の数字を入力してください。 重複した数字は選べません。 BSキーで一文字戻ります。 四桁入力して、スペースキーを押すと確定し判定が行われます。
不正解の場合コンピュータがヒントをくれます。
入力した数字が使われているが場所が違う場合は「B(ブロー)」、場所もあっていれば「H(ヒット)」です。
コンピュータが隠している数字が1357
で、プレイヤーが1234
と入力した場合は、最初の1がヒットで3がブローなので、1H1B
と表示されます。
ヒントを頼りに、四桁すべてを当ててください。
プログラム
1 CLS:CLV:CLP:FORI=0TO79:A=PEEK(#748+I%8):B=PEEK(#180+I):POKE#700+I,A&B^A:NEXT 2 SRNDTICK():R=1:E=15:LET[8],100,80,50,30,20,10,9,8,7,6,5,4,3,2,1 3 FORI=0TO9:[30+I]=0:NEXT:FORI=0TO3 4 V=RND(10):IF[30+V]CONTELSE[I]=V:[30+V]=1:NEXT:FORI=0TO9:[30+I]=0:NEXT 5 LC0,N:?">":X=0:IF!NLC0,23:?"RND:";R;"/SCR:";S; 6 K=INKEY():IFK=8BEEP:X=X-!!X:[30+[4+X]]=0:[4+X]=0:LC1+x,N:?" ":CONTELSEIFX=4&&K=32FORI=0TO9:[30+I]=0:NEXT:GOTO8ELSEIFX=4||K<48||K>57CONTELSEO=K-48:IF[30+O]CONT 7 BEEP:[4+X]=O:[30+O]=1:LC1+X,N:?CHR$(224+O):X=X+1:GOTO6 8 PLAY"L20GEC":H=0:B=0:FORI=0TO3:FORJ=0TO3:C=([J]=[4+I]):H=H+C*(I=J):B=B+C*(I<>J):NEXT:NEXT 9 IFH<4GOTO11ELSELC6,N:?"MADE IT! +";[8+N]:PLAY"L8<C>ABG<C>ABGL4<CEC" 10 IFSOUND()CONTELSELC1,N:?"HIT ANY KEY":IF!INKEY()CONTELSES=S+[8+N]:R=R+1:CLS:N=0:GOTO3 11 LC6,N:IFH?H;"H"; 12 IFB?B;"B" 13 LC0,N:?" ":N=N+1:IFN<EGOTO5 14 LC1,N+1:?"GAME OVER":PLAY">AAA8AR8<C>B8BA8A+G8A"
解説
変数
変数 | 説明 |
---|---|
A | ●パターン抽出用 |
B | 数字パターン抽出用/ブロー数カウンター |
H | ヒット数カウンタ |
I | ループ処理(数字生成、重複使用フラグクリア、入力評価など) |
J | ループ処理(入力評価) |
K | キー入力 |
N | 試行回数(0~) |
R | ステージ数 |
S | スコア |
V | 面生成用 |
[0]~[4] | IchigoJamの選択した4桁の数値 |
[5]~[7] | ユーザ入力用 |
[8]~[22] | クリア時のスコアテーブル |
[30]~[39] | 重複チェック用テーブル |
コード解説
1行目で初期化と、足し算インベーダー改でやったように、 丸数字の作成を行っています。今回は⓪も使うので、少しコードが違いますが、やっていることは同じです。2行目は乱数の初期化と面数、試行回数上限と、クリア時のスコアテーブルを作っています。乱数の種はTICK()を使っています。なので、他のゲームではやっているCLTをあえてしていません。
3~4で、IchigoJamが4桁の数字を作ります。重複管理は[30]~[39]
が未使用(0)かどうかで行っています。ゲーム中では、ユーザ入力の重複チェックにも使うので、数字を選び終わったら全て未使用(ゼロクリア)しています。
5行目は画面の初期状態。プロンプトの表示と、初回だけ画面最下行に面数とスコアとを表示しています。
6~7行目はキー入力処理です。BSの場合、4桁入力した状態でスペースキーが押された場合、数字が押された場合の順にチェックしています。BSは入力をクリアするだけでなく数字の使用フラグも忘れずにクリアしないといけません。BSまたは数字が押された場合にはBEEP、4桁確定のスペースキーではL20GEC
とならしています。
8行目で入力された数字の評価をしています。9~10行目は4Hつまりあたった場合の処理です。音楽が鳴り終わるまで待って、次の面への移動待ちになります。HIT ANY KEYですので、何かキーが押されるまで待っています。
11~13行はあたらなかった場合のヒントの表示です。試行回数を増やして、ゲームオーバーのチェックもします。14行目はGAME OVERの表示と、音楽です。ここでは演奏の終了は特には待ちません。
簡単ですね。