2019-12-30
食べ終わったラーメン、浮いている油をくっつけて遊びました。
上下左右に傾けて同じ数字をくっつけ育てて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)

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