2023-12-05
IchigoJamトランプ神経衰弱を順を追って作ってみましょう!
IchigoJam Advent Calendar 2023」参加記事です。

1. IchigoJamでトランプカードを作ります
2. 2スート、13枚のカードデータを配列に入れます
3. つくった26枚をシャッフルします
4. 先頭から10枚のカードデータと色が同じで数が一緒な10枚のカードデータを加えます
5. つくった20枚をシャッフルします
6. 画面上に20枚の裏面にしたカードを並べます
7. カーソルの上下左右で選べるようにします
8. スペースキーで押されたらカードを表示します
9. 2枚目として開かれるときに対応するカードかどうか判定します
10. 間違っていたら、2枚のカードを閉じます
11. 正解カウントが10になったらタイムを表示して終了します
12. タイトルをつけてかっこよくします

1. IchigoJamでトランプカードを作ります

2 POKE1834,146,130,68,40:POKE1849,40,68,130,68,40 499 END 500 @PUTN:IFN<10?N;ELSEIFN=10?CHR$(234);ELSEIFN=11?"J";ELSEIFN=12?"Q";ELSE?"K"; 510 RTN 600 @PUTC:?CHR$(228+C/100);:N=C%100:GSB@PUTN:RTN FORI=1TO13:FORJ=0TO3:C=J*100+I:GSB@PUTC:?" ";:NEXT:?:NEXT

RUN on IchigoJam web

2. 2スート、13枚のカードデータを配列に入れます
番号で指定できる変数、配列。IchigoJamでは102コの配列が使えます。スペードとハート、2スート26枚のデータを1の配列変数に1つずつ順に入れることにしましょう。

10 FORI=1TO13:FORJ=0TO3:C=J*100+I:[I-1+J*13]=C:NEXT:NEXT

ループ変数Iは数、Jはスートを表し、IchigoJamトランプカードの表示プログラムに合わせて、スートを100倍して数に足しています。

3. つくった26枚をシャッフルします
「デタラメにかき混ぜる」を実現するのはランダム(RND)。0から51までランダムな番号の変数と値を交換するサブルーチン、@SHUFFLEを作ります。

700 @SHUFFLE:FORI=1TOL:N=RND(L):T=[I]:[I]=[N]:[N]=T:NEXT:RTN 20 L=13*2:GSB@SHUFFLE

変数Lでシャッフルする枚数を指定するようにしたので、13*2、26枚をシャッフル。

4. 先頭から10枚のカードデータと色が同じで数が一緒な10枚のカードデータを加えます
全部並べてもいいですが、難しくなりすぎそうなので、10ペア、20枚で神経衰弱することにします。そこで、シャッフルした先頭から10枚を使って、配列のその後ろに対応する10枚のカードデータをセットします。

25 FORI=0TO9:[I+10]=[I]+200:NEXT

5. つくった20枚をシャッフルします

26 L=20:GSB@SHUFFLE

シャッフルサブルーチン、活躍!

6. 画面上に20枚の裏面にしたカードを並べます

1 CLS 30 FORI=0TO4:FORJ=0TO3:LC4+I*5,3+J*2:?CHR$(1,1);:NEXT:NEXT

裏向きのカードはCHR$(1)の真っ白な四角2つで表現しました。

7. カーソルの上下左右で選べるようにします

40 X=0:Y=0:P=-1 50 LC3+X*5,3+Y*2:?" "; 60 X=X-(K=28&&X>0)+(K=29&&X<4) 70 Y=Y-(K=30&&Y>0)+(K=31&&Y<3) 80 LC3+X*5,3+Y*2:?CHR$(225); 85 K=INKEY():IF!KCONT 90 GOTO 50

INKEYで入力されたキーコードを取得し、その数にあわせてXとYを増減することで移動を実現。CHR$(225)はIchigoJam絵文字の右矢印です。

8. スペースキーで押されたらカードを表示します

86 IFK=32GSB100 100 LC4+X*5,3+Y*2:Q=X+Y*5:C=[Q]:GSB@PUTC 110 RTN

これで指定されたカードが開けるようになりました。

9. 2枚目として開かれるときに対応するカードかどうか判定します

110 IFP==-1 P=Q:RTN 120 IF[P]%100=[Q]%100&&([P]/100+[Q]/100)%2=0 P=-1:H=H+1:RTN 130 RTN

開いていないときは-1にしてある、変数Pが1枚目のカードデータ。1枚目と比較して合っていたら開いたままにします。

10. 間違っていたら、2枚のカードを閉じます

130 WAIT30:BEEP15:LC4+X*5,3+Y*2:?CHR$(1,1);:WAIT30:BEEP15:LC4+P%5*5,3+P/5*2:?CHR$(1,1);:P=-1:RTN

ペナルティを兼ねて、低めの音と共にWAIT30と共に裏返し表示に戻しています。

11. 正解カウントが10になったらタイムを表示して終了します

200 LC10,15:?"CLEAR!!":LC10,17:?"TIME:";TICK()/60;"SEC":END

12. タイトルをつけてかっこよくします

1 CLS:LC12,0:?"SUIJACK!"

名付けて「SUIJACK!」


RUN on IchigoJam web(ハクビシン、モモンガ、モモンガ)
IchigoJamトランプ神経衰弱「SUIJACK!」のできあがり!
60秒を切れるかな!?

やってみよう!
1. 右矢印絵文字をネコに変えてみよう!
2. 裏返しのカードデザインを変えるサブルーチンを作ってみよう!
3. 「3 SRND 0」と加えるとどうなるか実験してみよう!
4. お手つきした数を数えてみよう!
5. 使うカードの枚数を変えてゲームの難易度を変えてみよう!

links
- IchigoJamのカレンダー | Advent Calendar 2023 - Qiita
- IchigoJamトランプ神経衰弱の作り方
- IchigoJamプリント

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS