上下左右に傾けて同じ数字をくっつけ育てて9を作るまでのステップ数を競う、Threes!風ゲーム「MAKE9」
IchigoJamとカラー&和音拡張ボードPanCake用の2種類作りました。
きっかけは、過去アップした動画の再生回数ランキング。12,000回再生されているこのゲーム。
「ゲーム中毒から抜け出す方法 / IchigoJam BASICでThrees!風を創る」
一瞬映るプログラム、探すのも手間なので、リメイク!
5年前からだいぶ高速化したので、5x5へとフィールドを広げてもサクサク、VIDEO3の拡大モードで快適!
プログラムはこちら、708byteと余裕あるつくりです(RUN on IchigoJam web)
10 @MAKE9:VIDEO3:CLS:Z=45:S=0:F=0 20 FORI=0TO24:LCI%5,I/5:?CHR$(Z+(RND(3)+48-Z)*(RND(5)=0)):NEXT 40 K=INKEY():IF!KCONT 50 IF K=UP D=1:GSB@UD 51 IF K=DOWN D=-1:GSB@UD 52 IF K=LEFT D=1:GSB@LR 53 IF K=RIGHT D=-1:GSB@LR 80 GOTO40 100 @UD:FORI=0TO4:FORJ=3-2*(D=1)TO4*(D=1)STEPD:N=SCR(I,J):IFN=ZGOTO120 110 LCI,J-D:M=SCR():IFM=N?CHR$(N+1):F=F+(N=56)ELSEIFM=Z?CHR$(N)ELSEGOTO120 115 LCI,J:?CHR$(Z) 120 NEXT:NEXT:GSB@NEXT:RTN 300 @LR:FORI=0TO4:FORJ=3-2*(D=1)TO4*(D=1)STEPD:N=SCR(J,I):IFN=ZGOTO320 310 LCJ-D,I:M=SCR():IFM=N?CHR$(N+1):F=F+(N=56)ELSEIFM=Z?CHR$(N)ELSEGOTO320 315 LCJ,I:?CHR$(Z) 320 NEXT:NEXT:GSB@NEXT:RTN 500 @NEXT:N=RND(25):LCN%5,N/5:IFSCR()=Z?RND(3) 510 S=S+1:LC6,2:?"STEP:";S:IF!FRTN 600 LC6,4:?"NICE NINE!"
上下移動と左右移動をひとまとめにしてプログラムをコンパクトにしています。上下も左右も合わせる方法を考えてみるのも楽しいかも。 Z=45は、ハイフン(-)のキャラクターコードです。フラグFで9ができたら600行のクリア表示へ!
IchigoJam Advent Calendar 2019 の最終日に、ステキなPanCakeを使った記事掲載!
「IchigoJamでPanCakeに三毛猫を表示する - Qiita」
オシャレな16色カラーがでるIchigoJam用拡張ボードPanCake、せっかくなのでMAKE9もきれいにしてみましょう!
まずはPanCakeの実験!
よく使うミニモニター、黄色と白の2本ビデオ入力線がありますが、白が優先されます。なので、黄色をPanCakeに白をIchigoJamに挿して、IchigoJamのビデオ出力を止めるとモニターにPanCakeの映像が映ります。 F8で画面表示すると、IchigoJamの画面に戻ってきます。F10のSWITCHで切り替えるという技もあり!(テレビが2つ使える場合、デュアルモニターでの開発がより便利です)
背景画像を切替えるテストプログラムとスタンプ
10 VIDEO0:WAIT120 20 FOR I=0 TO 7 30 '?"PC IMAGE ";DEC$(100+I,2) 31 ?CHR$(128,4,4,I); 32 ?CHR$(128,6,20,0,0,73); 40 WAIT30 50 NEXT
30行、テキストで送信する方法と、バイナリで送信する方法がありますが、プログラムで使うときはバイナリが便利!
PanCakeの解像度 80x45 を考慮し、MAKE9のゲーム用の表示を実験します
1000 LET[0],S/1000,S/100%10,S/10%10,S%10:FORI=0TO3:?CHR$(128,6,20,46+I*8,19,#A6+[I]);:NEXT:RTN 1100 FORI=0TO24:N=SCR(I%5,I/5):N=#9B*(N=45)+(#A6+N-ASC("0"))*(N!=45):?CHR$(128,6,20,I%5*8+2,I/5*8+3,N);:NEXT:RTN 1200 ?CHR$(128,4,4,7);:RTN
ステップ数とフィールド表示ができました。5x5フィールドがちょうどぴったり!
これらのプログラムを表示させつつ、先のIchigoJam版MAKE9をLOADして、1000行以降に追加して、プログラムを整えてできあがり!ゲーム内容は全く一緒ですが、なんだかステキなゲームに見えますね!
こちら完成版「MAKE9P for IchigoJam BASIC & PanCake」
10 @MAKE9P:VIDEO0:CLS:Z=45:S=0:F=0 20 FORI=0TO24:LCI%5,I/5:?CHR$(Z+(RND(3)+48-Z)*(RND(5)=0)):NEXT 30 GSB1000 40 K=INKEY():IF!KCONT 50 IFK=30D=1:GSB@UD 51 IFK=31D=-1:GSB@UD 52 IFK=28D=1:GSB@LR 53 IFK=29D=-1:GSB@LR 80 GOTO30 100 @UD:FORI=0TO4:FORJ=3-2*(D=1)TO4*(D=1)STEPD:N=SCR(I,J):IFN=ZGOTO120 110 LCI,J-D:M=SCR():IFM=N?CHR$(N+1):F=F+(N=56)ELSEIFM=Z?CHR$(N)ELSEGOTO120 115 LCI,J:?CHR$(Z) 120 NEXT:NEXT:GSB@NEXT:RTN 300 @LR:FORI=0TO4:FORJ=3-2*(D=1)TO4*(D=1)STEPD:N=SCR(J,I):IFN=ZGOTO320 310 LCJ-D,I:M=SCR():IFM=N?CHR$(N+1):F=F+(N=56)ELSEIFM=Z?CHR$(N)ELSEGOTO320 315 LCJ,I:?CHR$(Z) 320 NEXT:NEXT:GSB@NEXT:RTN 500 @NEXT:N=RND(25):LCN%5,N/5:IFSCR()=Z?RND(3) 510 S=S+1:LC6,2:?"STEP:";S:IF!FRTN 600 GSB1030 1000 LC0,-1:?CHR$(128,4,4,7); 1010 LET[0],S/1000,S/100%10,S/10%10,S%10:FORI=0TO3:?CHR$(128,6,20,46+I*8,19,#A6+[I]);:NEXT 1020 FORI=0TO24:N=SCR(I%5,I/5):N=#9B*(N=45)+(#A6+N-ASC("0"))*(N!=45):?CHR$(128,6,20,I%5*8+2,I/5*8+3,N);:NEXT:RTN 1030 LC0,-1:?CHR$(128,6,20,58,29,9);:FORI=0TO1:I=INKEY()=10:NEXT:RUN
LC0,-1で画面表示を一時的にOFF。IchigoJam 1.4から対応したUART9で一時的に画面表示を止めてもOK!
PanCake、シリアル信号を送るだけでNTSCカラーと、4和音がでる拡張ボード、IchigoJamだけでなくいろんなマイコンボードにつなげて楽しめます!
JavaScript、大容量4KBのBASICと共に使う「IchigoCake」もどうぞ!
links
- PanCake
- PanCake の使い方 - イチゴジャム レシピ
- fu-sen/PanCake-COMMAND: PanCake コマンド一覧 command reference (Japanese)