SHIROのIchigoJam日記

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

ペアペア

トランプカードを使ったソリティア(1人遊び)です。Facebookの「おうちクエスト」グループで出ていたネタですが、トランプカードネタを一度やってみたかったので作ってみました。

f:id:shiro0922:20200423221459p:plain

f:id:shiro0922:20200423221512p:plain

f:id:shiro0922:20200423221525p:plain

遊び方

  • 実行してしばらく待つと、カードが3枚ずつ10個の山で配られます。山の一番目(一番下)のカードが表、残りは裏返しです。残り22枚は山札となり、枚数が画面左上に表示されます。
  • 同じ数字のカードをペアにします。左右の矢印キー←→でカーソルを移動させ、ペアの1枚目でスペースキーを押すと、そのカードに上矢印↑が表示されます。次にペアのもう片方のカードを選んでスペースキーを押すと、そのペアが取られて消えます。
    • IchigoJam webにタッチキーボードが付いたので、スペースキーのほか上下矢印キー↑↓でもカード選択できるようにしました。
  • カードが取られた山は一段低くなり、次のカードが表になります。山の全部のカードが取られると、その場所に山札から1枚出されます。
  • それぞれの山や山札のカードを、全てペアにして取るとゲームクリアです。手詰まりになった時はESCキーでプログラムを止めて、「RUN」またはF5キーでもう一度実行してください。

ソリティアとしてはそれほど難しくなく、成功率は7割くらい。
とにかく山を崩して、隠れたカードを無くすのがセオリーです。
カードの運によっては、スタートでいきなり手詰まりになることもあります。

プログラム

※4/24修正:IchigoJam webのタッチキーボード用に上下矢印キー↑↓でもカード選択、カード選択部分のバグ修正。

1 '*PairPair
2 CLV:CLP:L=52:M=30:SRNDTICK()
3 A=234:B=241:GSB@PCG
4 A=65:B=232:GSB@PCG
5 FORI=2TO9:A=48+I:B=231+I:GSB@PCG:NEXT
6 A=74:B=242:GSB@PCG
7 A=81:B=243:GSB@PCG
8 A=75:B=244:GSB@PCG
9 FORI=0TO51:[I]=I%13+I/13*16+17:NEXT
10 FORI=1TO200
11 A=RND(52):B=RND(52)
12 C=[A]:[A]=[B]:[B]=C
13 NEXT:GSB@PRC:S=-1
14 @LOOP
15 LCX*2,10,1:K=INKEY()
16 X=X-(K=28)*(X>0)+(K=29)*(X<9)
17 IFK>29&&K<33GSB@SET
18 IFL>0GOTO@LOOP
19 BEEP10,30:LC10,12:?"!!CLEAR!!":END
20 @PCG
21 COPYB*8,A*8,8:RTN
22 @PRC
23 CLS:?52-M
24 FORI=0TO27STEP3:H=I/3*2
25 FORJ=0TO2
26 C=[I+J]:T=C/16:N=C&15:IF!NGOTO@PRE
27 LCH,8-J*3:IFJ?CHR$(143)ELSE?CHR$(T+227)
28 LCH,9-J*3:IFJ?CHR$(143)ELSE?CHR$(N+231)
29 @PRE
30 NEXT:NEXT:RTN
31 @SET
32 IFX=SS=-1:?" ":RTN
33 B=X*3:IFS<0IF[B]S=X:?CHR$(226):BEEP:RTN ELSERTN
34 A=S*3:IF[A]%16!=[B]%16RTN
35 BEEP:I=A:GSB@SFT:I=B:GSB@SFT
36 L=L-2:S=-1:GSB@PRC:RTN
37 @SFT
38 [I]=[I+1]:[I+1]=[I+2]:[I+2]=0
39 IF![I]&&M<52[I]=[M]:M=M+1
40 RTN

トランプの数字は「A,2,3,4,5,6,7,8,9,10,J,Q,K」と変則的なので、PCG領域の文字コード232~244へ文字データを転送して、その並びを作っています。

  • 3行目:「10」をコード241へ転送(後の転送で上書きされないように最初に転送)
  • 4行目:「A」をコード232へ転送
  • 5行目:「2」~「9」をコード233~240へ転送
  • 6行目:「J」をコード242へ転送
  • 7行目:「Q」をコード243へ転送
  • 8行目:「K」をコード244へ転送

連続した並びを作ってしまえば、文字コードの順に処理して表示できます(28行目)。

IchigoJam web版

IchigoJam web版はこちら。
最初のカードのシャッフルに10秒くらいかかります。気長に待ってください。