SHIROのIchigoJam日記

マイコン「IchigoJam」(イチゴジャム)の電子工作とプログラミングをメインに

神経衰弱

IchigoJamの画面で遊ぶ神経衰弱ゲームです。
トランプカードを使ったシンプルなゲームを目指して作ってみましたが、1Kバイト目一杯になってしまいました。

遊び方

f:id:shiro0922:20210823214503p:plain
実行すると、画面に52枚のカードが伏せて並べられます。点滅するカーソルを矢印キーで移動して、オープンしたいカードでスペースキーを押してください。
f:id:shiro0922:20210823214610p:plain
2枚のカードをオープンして、もし同じ数字だったら2枚とも消えます。違う数字だったら再び伏せられます。
f:id:shiro0922:20210823214901p:plain
同じ数字のカードを見つけて、消していってください。
f:id:shiro0922:20210823221244p:plain
全てのカードを消すとゲームクリアで、タイムが表示されて終了します。

まずは5分以内でのクリアを目指しましょう。
なお、時間表示が適当なので、9分以上かかると表示がおかしくなります。

プログラム

10 CLV:VIDEO 3:CLS:L=52
20 FOR S=1 TO 4
30 FOR N=1 TO 13
40 [C]=S*16+N:C=C+1
50 NEXT:NEXT
60 FOR J=1 TO 200
70 A=RND(52):B=RND(52)
80 C=[A]:[A]=[B]:[B]=C
90 NEXT
100 FOR Z=0 TO 51
110 GSB @PR1
120 NEXT
130 Z=0:CLT
140 @LOOP
150 GSB @SEL:A=Z:[Z]=[Z]+256:GSB @PR1
160 GSB @SEL:B=Z:[Z]=[Z]+256:GSB @PR1
170 WAIT 60
180 IF [A]%16=[B]%16 BEEP:[A]=256:[B]=256:L=L-2
190 Z=A:[Z]=[Z]-256:GSB @PR1
200 Z=B:[Z]=[Z]-256:GSB @PR1
210 GSB @PRT
220 IF L GOTO @LOOP
230 BEEP 10,30:?:END
240 @PRT
250 T=TICK()/60
260 LC 0,11:?T/60;":";DEC$(T%60+100,2);
270 RTN
280 @SEL
290 WAIT 5
300 X=Z%5:Y=Z/5
310 K=INKEY():CLK
320 X=X-(K=28)*(X>0)+(K=29)*(X<4)
330 Y=Y-(K=30)*(Y>0)+(K=31)*(Y<10)
340 Z=Y*5+X:IF Z>51 Z=51
350 GSB @PRT:LC X*3,Y,1
360 IF K!=32 OR ![Z] OR [Z]&256 GOTO @SEL
370 BEEP 30:RTN
380 @PR1
390 X=Z%5:Y=Z/5
400 LC X*3,Y
410 C=[Z]
420 IF C=0 ?"  ":RTN
430 IF C/256=0 ?"**":RTN
440 S=C&#F0>>4:N=C%16
450 ?CHR$(227+S);
460 IF N=1 ?"A":RTN
470 IF N=10 ?CHR$(234):RTN
480 IF N=11 ?"J":RTN
490 IF N=12 ?"Q":RTN
500 IF N=13 ?"K":RTN
510 ?N:RTN

★web版はこちら。最初にカードをシャッフルするのに7秒ほど待たされます。

トランプカードのデータ

f:id:shiro0922:20210823224236p:plain

(8/24追記)プログラム簡易版

f:id:shiro0922:20210824215701p:plain
プログラミング教材を想定して、設定を簡単にした簡易版です。

  • 画面は通常の32×24サイズ
  • カード枚数を16枚に(1~8、×2セット)
  • カードのスーツ(マーク)を無くして、1~8の数字表示のみ
  • カード表示を4枚×4枚にして、カーソルはみ出し処理を簡単に

プログラムが短くなって、カードが少ないのでプレイも簡単です。

10 CLV:CLS:L=16
20 FOR S=1 TO 2
30 FOR N=1 TO 8
40 [C]=N:C=C+1
50 NEXT:NEXT
60 FOR J=1 TO 100
70 A=RND(L):B=RND(L)
80 C=[A]:[A]=[B]:[B]=C
90 NEXT
100 FOR Z=0 TO L-1
110 GSB @PR1
120 NEXT
130 Z=0:CLT
140 @LOOP
150 GSB @SEL:A=Z:[Z]=[Z]+256:GSB @PR1
160 GSB @SEL:B=Z:[Z]=[Z]+256:GSB @PR1
170 WAIT 60
180 IF [A]%16=[B]%16 BEEP:[A]=256:[B]=256:L=L-2
190 Z=A:[Z]=[Z]-256:GSB @PR1
200 Z=B:[Z]=[Z]-256:GSB @PR1
210 GSB @PRT
220 IF L GOTO @LOOP
230 BEEP 10,30:?:END
240 @PRT
250 T=TICK()/60
260 LC 0,14:?T/60;":";DEC$(T%60+100,2);
270 RTN
280 @SEL
290 WAIT 5
300 X=Z%4:Y=Z/4
310 K=INKEY():CLK
320 X=X-(K=28)+(K=29):X=X&3
330 Y=Y-(K=30)+(K=31):Y=Y&3
340 Z=Y*4+X
350 GSB @PRT:LC X*3,Y,1
360 IF K!=32 OR [Z]=0 OR [Z]>256 GOTO @SEL
370 BEEP 30:RTN
380 @PR1
390 X=Z%4:Y=Z/4
400 LC X*3,Y
410 C=[Z]
420 IF C=0 ?"  ":RTN
430 IF C<256 ?"**":RTN
440 N=C%16
450 ?N;" ":RTN