今日の時間が少なくなってくる中、いまだにアドベントカレンダーの枠が埋まっていない。
残り少ない時間でサクッと作れる程度の何かを作ろう。
たとえば……神経衰弱とか?
プログラム
10 ' シンプル シンケイスイジャク
20 FORI=0TO25:[I]=I/2:[26+I]=0:NEXT
30 FORI=0TO24:S=RND(26-I)+I:T=[I]:[I]=[S]:[S]=T:NEXT
40 M=0:G=0:S=-1:T=-1
50 CLS:?"ハズレ x ";M
60 IFG=13?"クリア!":END
70 FORI=0TO25
80 IF[26+I]<2LOCATEI%4*4,I/4+1:?CHR$(#41+I);":";
90 IF[26+I]=1?HEX$([I]);
100 NEXT
110 IFT>=0WAIT60:Y=[S]=[T]:M=M+!Y:G=G+Y:[26+S]=Y*2:[26+T]=Y*2:S=-1:T=-1:GOTO50
120 K=INKEY()&#DF-#41:IFK<0OR25<KWAIT1:GOTO120
130 IF[26+K]<>0GOTO120
140 [26+K]=1
150 IFS<0S=K:GOTO50
160 T=K:GOTO50
遊び方
画面 (:の左側) に表示されているアルファベットのキーを押すことで、選択する。
2個選択し、同じものが出ればそれらは消える。
違うものが出れば、それらはもとに戻り、ハズレのカウントが増える。
より少ないハズレ数で全て消すことを目指そう!
ポイント
- 直接アルファベットのキーを押して選択する仕様にすることで、カーソルの実装を不要に
- 変化するところだけ描き直すのは面倒なので、毎回全部描き直す
-
SWITCH1やVIDEO3の画面に収まるコンパクトなUI - 最初の手がかりが全く無いときに揃わないのも「ミス」とするのは嫌だと思ったので、「ハズレ」という表現を採用
実行結果例
解説
初期化
10 ' シンプル シンケイスイジャク
20 FORI=0TO25:[I]=I/2:[26+I]=0:NEXT
30 FORI=0TO24:S=RND(26-I)+I:T=[I]:[I]=[S]:[S]=T:NEXT
40 M=0:G=0:S=-1:T=-1
まず、26枚の「カード」を用意する。
添字を2で割ることで、同じ「カード」を2枚ずつ用意する。
ついでに、それらの「カード」の選択状態を初期化する。
次に、用意した「カード」をシャッフルする。
それぞれの「カード」を、(それを含めた) 残りの「カード」のうちランダムな1枚と入れ替えていく。
最後に、状態を表す以下の変数を初期化する。
-
M:ハズレの回数 -
G:ペアが揃った回数 -
S:選択した1枚目の添字 -
T:選択した2枚目の添字
描画
50 CLS:?"ハズレ x ";M
60 IFG=13?"クリア!":END
70 FORI=0TO25
80 IF[26+I]<2LOCATEI%4*4,I/4+1:?CHR$(#41+I);":";
90 IF[26+I]=1?HEX$([I]);
100 NEXT
110 IFT>=0WAIT60:Y=[S]=[T]:M=M+!Y:G=G+Y:[26+S]=Y*2:[26+T]=Y*2:S=-1:T=-1:GOTO50
ハズレの回数と、それぞれの「カード」を描画する。
選択状態が2未満 (0か1) であれば、その「カード」はまだ消していないので、選択するために押すキーを描画する。
選択状態が1であれば、その「カード」は選択されているので、中身を描画する。
中身は、十六進数を用い、全て1桁で描画する。
13回ペアが揃った場合、全ての「カード」を消したはずなので、「カード」の描画は行わず、「クリア!」を表示して終了する。
2枚目を選択したら、1枚目と2枚目が揃ったかを変数 Y に格納し、少し待機したあと状態を進める。
揃っている場合 (Y=1) は、揃った回数 G を1増やし、選択状態を 2 (消した) にする。
揃っていない場合 (Y=0) は、ハズレの回数 M を1増やし、選択状態を 0 (初期状態) にする。
いずれの場合も、選択した「カード」の添字の情報をリセットし、再び描画を行う。
操作
120 K=INKEY()&#DF-#41:IFK<0OR25<KWAIT1:GOTO120
130 IF[26+K]<>0GOTO120
140 [26+K]=1
150 IFS<0S=K:GOTO50
160 T=K:GOTO50
INKEY() 関数で、キー入力を受け付ける。
#20 をビット反転した値とのビットANDをとることで、アルファベット小文字が入力されても大文字に変換する。
さらに、A の文字コードである #41 を引き、添字に変換する。
変換結果が添字として無効である場合は、処理を行わず、次の入力を受け付ける。
(キー入力が無く 0 を受け取った場合も、変換結果は無効となる)
添字として有効であっても、それが既に選択されている場合 (揃って消した場合を含む) は、処理を行わず、次の入力を受け付ける。
選択されていなかった「カード」を選択したら、選択したというフラグを立てる。
1枚目の選択 (S に添字が記録されていない) なら S に、そうでなければ T に選択された「カード」の添字を記録する。
そして、描画を行う。
まとめ
IchigoJam で、あまり労力をかけずに神経衰弱ゲームを作ることができた。
※IchigoJamはjig.jpの登録商標です。



