SHIROのIchigoJam日記

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

PK戦ボード2024

★この記事は「IchigoJam Advent Calendar 2024」に参加しています。

サッカーのPK戦が遊べる、IchigoJam用の拡張ボードです。
以前作ったボードを改良しました。
紹介動画はこちら。

回路図


IchigoJamのOUT1~4出力から7セグメントデコーダーIC・4511を介してゴール数を表示、OUT5・6出力で左右のゴールキーパーを表示、LED出力(WS.LEDコマンド)で左右のシュートコースをフルカラーLED×6個で表示します。
ジョイスティックの左右入力はIN2(ANA2)で読み取ります。上下入力は配線していないので使えません。
動かし方はプログラム次第です。「OUT0」~「OUT9」で0~9の数字を表示できるので、数字表示機能だけ使っても良いでしょう。

基板データ

*同じ基板を2枚並べて配置しています。
*この基板データは、CC BYライセンスとします。どうぞご利用ください。

(C) 2024 Shiro Saito (https://www.ichigojaman.jp)

材料

以下の順番ではんだ付けすると作りやすいです。

PK戦プログラム

ファイル0に保存(SAVE0)して電源ONで自動起動させると、キーボードやモニタ無しでも遊べます。

  • ジョイスティックを操作して、左か右か、シュートコースを選んでください。
  • 選んだ方向へシュートして、GKも左か右に飛びます。GKの逆を突くとゴールが決まり、ゴール数が1点増えます。
  • GKに止められるとゲームオーバーです。IchigoJamのボタンを押すと、リセットしてリプレイできます。
10 @ARUN:'*PK 2024
20 CLV:CLP
30 @START
40 BEEP 10,30
50 WAIT 30
60 OUT G
70 D=0
80 FOR L=0 TO 15:[L]=0:NEXT
90 WS.LED 6
100 @IND
110 D=(ANA(2)-512)/256
120 IF D=0 GOTO @IND
130 D=(D+1)/2
140 BEEP
150 [D*9]=50
160 WS.LED 6
170 WAIT 10
180 FOR E=0 TO 3 STEP 3
190 [E+D*9]=0
200 WS.LED 6
210 [E+3+D*9]=50
220 WS.LED 6
230 WAIT 10
240 NEXT
250 SRND TICK()
260 R=RND(2)
270 OUT 5+R,1
280 WAIT 30
290 IF D!=R G=G+1:GOTO @START
300 BEEP 30,60
310 WAIT 60
320 IF !BTN() CONT
330 RUN

横シューティングゲームその2 for IchigoJam P

★この記事は「IchigoJam Advent Calendar 2024」に参加しています。
https://qiita.com/advent-calendar/2024/ichigojam

先日公開した横スクロールシューティングゲームを改造。
プログラム2本に分割して、通常ステージとボスステージを設けてグラディウス風に。懐かしいな~。
紹介動画はこちら。

遊び方

  • 右側から飛んでくる敵を避けつつ、ビームで撃ってください。当たると点数が1点入ります。
  • 自機の操作は、カーソルキーの上下左右で移動、スペースキーでビーム発射です。
  • 敵を10体倒すとボスステージへ移行します。ボスの中心核へビームを10発当ててください。ボスを倒すと通常ステージへ戻ります。
  • 自機が敵や敵の弾に当たるとゲームオーバーとなり、プログラムが終了します。

プログラム

プログラムは2分割です。どちらも1Kバイトぎりぎり。
0番と1番など、連続したSAVEファイル2個に置いて、ファイル0から実行してください。
IchigoJam Sでは遅いのでお勧めしません(^_^;)

ファイル0:通常ステージ

1 CLV:Z=FILE():Y=12
2 [0]=0:COPY#801,#800,203:M=0:CLS:?S
3 GSB9:FORE=15TO31STEP4:FORB=0TO6STEP3:IF[B]GSB13
4 NEXT:WAIT1:B=(E-15)/8*3:IF![B]&&BTN(32)GSB12
5 IF[E]GSB16 ELSEIFRND(20)=1GSB15
6 NEXT:COPY#BE0,#BE1,30:LC30,23:?CHR$(RND(4)+140);:IFS%20=10LRUNZ+1
7 IF!MGOTO3
8 BEEP30,30:LCX,Y:?"*";:LC11,11:?"GAME OVER":CLK:END
9 U=X-BTN(28)*(X>0)+BTN(29)*(X<30):V=Y-BTN(30)*(Y>1)+BTN(31)*(Y<22)
10 LCX,Y:?" ":X=U:Y=V:IFSCR(X,Y)>139M=1:RTN
11 LCX,Y:?CHR$(243):RTN
12 [B]=1:[B+1]=X+1:[B+2]=Y:LC[B+1],[B+2]:?"-":RTN
13 C=[B+1]:D=[B+2]:LCC,D:?" ":C=C+1:[B+1]=C:IFC>30[B]=0:RTN
14 LCC,D:?"-":J=B:FORI=15TO31STEP4:GSB20:NEXT:RTN
15 [E]=1:[E+1]=30:[E+2]=RND(22)+1:[E+3]=RND(2)*2-1:LC[E+1],[E+2]:?CHR$(237):RTN
16 F=[E+1]:G=[E+2]:LCF,G:?" ":F=F-1:IFF<0[E]=0:RTN
17 G=G+[E+3]:IFG<1ORG>22[E+3]=-[E+3]:CONT
18 [E+1]=F:[E+2]=G:IFX=F&&Y=GM=1:RTN
19 LCF,G:?CHR$(237):I=E:FORJ=0TO6STEP3:GSB20:NEXT:RTN
20 K=0:IF[I]&&[J]&&[I+1]=[J+1]&&[I+2]=[J+2]K=I:L=J
21 IF!KRTNELSE[K]=0:[L]=0:BEEP:S=S+1:LC0:?S:LC[K+1],[K+2]:?" ":RTN

ファイル1:ボスステージ

1 CLS:?S:[0]=0:COPY#801,#800,203:P=28:T=0:W=9
2 GSB8:FORE=15TO31STEP4:FORB=0TO6STEP3:IF[B]GSB13
3 NEXT:WAIT1:B=(E-15)/8*3:IF![B]&&BTN(32)GSB12
4 IF[E]GSB17ELSEIFRND(20)=1GSB16
5 GSB20:NEXT:IFM=-1BEEP10,30:WAIT60:LRUNZ,2
6 IF!MGOTO2
7 BEEP30,30:LCX,Y:?"*";:LC11,11:?"GAME OVER":CLK:END
8 U=X-BTN(28)*(X>0)+BTN(29)*(X<30):V=Y-BTN(30)*(Y>1)+BTN(31)*(Y<22)
9 H=SCR(X,Y):IFH=61||(H>127&&H!=243)M=1:RTN
10 H=SCR(U,V):IFH=61||(H>127&&H!=243)M=1:RTN
11 LCX,Y:?" ":LCU,V:?CHR$(243):X=U:Y=V:RTN
12 [B]=1:[B+1]=X+1:[B+2]=Y:LC[B+1],[B+2]:?"-":RTN
13 C=[B+1]:D=[B+2]:LCC,D:?" ":C=C+1:H=SCR(C,D):IFH=255GSB22
14 [B+1]=C:IFC>30||H>32[B]=0:RTN
15 LCC,D:?"-":RTN
16 [E]=1:[E+1]=28:[E+2]=Q+1:LC[E+1],[E+2]:?"=":RTN
17 F=[E+1]:G=[E+2]:LCF,G:?" ":F=F-1:IFF<0[E]=0:RTN
18 [E+1]=F:IFX=F&&Y=GM=1:RTN
19 LCF,G:?"=":RTN
20 FORR=0TO2:LCP,Q+R:?"   ":NEXT:T=T+2:Q=10+SIN(T)/24
21 LCP,Q:?CHR$(140,140,159):LCP,Q+1:?CHR$(0,255);W:LCP,Q+2:?CHR$(131,131,157):RTN
22 BEEP:[B]=0:S=S+1:LC0:?S:W=W-1:IFW<0M=-1
23 RTN

プログラム2分割ですが、データを引き継いでいるだけでほぼ別のゲームです。
かつてのグラディウスのプログラムもこんな作り方だったのかな…?

おまけ:ビッグパイパー

以前にStable Diffusionで生成したグラディウスの自機・ビッグパイパーのイラスト。
以下のプロンプトで出ました。AIはグラディウスを理解している!(^_^)

bigpiper, flying in outer space, shooting beam, konami, gradius