Tennis for IchigoJam

IchigoJam+PanCake用の Tennis for Two です。(一人用ですが。)


専用コントローラ版

オリジナルの Tennis for Two みたいに専用コントローラで操作します。

操作方法

  • 左側がプレイヤー、右側がIchigoJamです。
  • IN2につないだボリュームで角度を決めてボタンで打ちます。
  • サーブ権は常にプレイヤー側にあります。点数のカウントはありません。
  • キーボードのキーを押したら終了します。 (ESCで止めるとIchigoJamの画面が出ないので、F8とかを押してください。)

コントローラ

ボリュームとボタンをこう接続します。 点線部分はゲームの動作に関係なくボタンを押したらLEDが光るだけの回路です。(が、一応プルアップの役目を果たしているかも?) パドルコントローラ回路図

コントローラの例 パドルコントローラ製作例

ソース

10 VIDEO0:CLV:Z=128:O=4:H=12:G=160:T=120:W=320:L=60:C=162:R=259:LET[0],1,2,10,11,12,12
20 ?CHR$(Z,4,0,0):U=0:V=0:X=L:Y=T:S=0:F=1:B=1:D=0:M=5:?CHR$(Z,8,1,L/O,G/O,R/O,G/O,10)
30 ?CHR$(Z,8,1,C/O,T/O,C/O,G/O,10):K=N:N=BTN():ifF!=Bgoto60
31 ifBgoto40
32 ifD=0andX-Y>R-Ggoto60
33 ifV/5!=RND((G-Y)/(1+D*4))goto60
34 I=-H:J=H*(X-C+(Y-T)*2):J=J/(W-C):B=1:GOTO50
40 ifK>=Ngoto60
41 S=1:I=H:J=H*(63-ANA(2)/16):J=J/56:B=0
50 U=RND(3)-1+I-U/4:V=-J-V/4:D=0:M=6
60 A=A+ABS(U):ifA>30thenA=0:U=U-(U>0)+(U<0)
61 V=V+S:P=X:Q=Y:X=X+U:Y=Y+V
62 E=F:F=(X<C):ifY<Ggoto70
63 X=P+(U*(G-Q))/V:Y=G-1:A=99:V=-(V*4)/5:M=4:D=D+1:ifD>1orX<LorX>RorB!=FthenD=D+1:B=1-F:M=3:ifD>3goto20
70 ifF=EorY<Tgoto80
71 Y=Q+(V*(C-P))/U:X=C-F:M=5:ifY<TthenX=C-F:U=C-PelseX=C-E:U=-U/4:F=E
80 ?CHR$(Z,6,10,0,M,255*(M=0)):M=0:I=13:J=15:K=6:P=(X/O)*(X>0):Q=Y/O
81 ?CHR$(Z,8,1,[I],[I+1],[J],[J+1],[K]):[J]=[I]:[J+1]=[I+1]:J=I:I=I-2:K=K-1:ifK>2goto81
82 ?CHR$(Z,8,1,P,Q,[7],[8],[2]):[7]=P:[8]=Q:?CHR$(Z,8,1,P,Q,P,Q,[D>1]):ifINKEY()=0goto30
99 VIDEO1
情報

IchigoJamのバージョン1.0.0ベータ版(10011)で動作確認しています。(以下同様) もっと古いバージョン(正式版では0.9.7以前)の場合は41行目の ANA(2) を ANA() に変更してください。 他のバージョンは未確認です。


コントローラ不要版

  • ボタンだけで操作できるバージョンです。
  • 角度はボタンを押す長さで調節します。

ソース

10 VIDEO0:CLV:Z=128:O=4:H=12:G=160:T=120:W=320:L=60:C=162:R=259:LET[0],1,2,10,11,12,12
20 ?CHR$(Z,4,0,0):U=0:V=0:X=L:Y=T:S=0:F=1:B=1:D=0:M=5:?CHR$(Z,8,1,L/O,G/O,R/O,G/O,10):CLT
30 ?CHR$(Z,8,1,C/O,T/O,C/O,G/O,10):K=N:N=BTN():ifF!=Bgoto60
31 ifBgoto40
32 ifD=0andX-Y>R-Ggoto60
33 ifV/5!=RND((G-Y)/(1+D*4))goto60
34 I=-H:J=H*(X-C+(Y-T)*2):J=J/(W-C):B=1:GOTO50
40 ifK=Ngoto60
41 ifNclt:GOTO60
42 B=0:S=1:I=H:J=TICK()/3:ifJ>H J=H
50 U=RND(3)-1+I-U/4:V=-J-V/4:D=0:M=6
60 A=A+ABS(U):ifA>30 A=0:U=U-(U>0)+(U<0)
61 V=V+S:P=X:Q=Y:X=X+U:Y=Y+V
62 E=F:F=(X<C):ifY<Ggoto70
63 X=P+(U*(G-Q))/V:Y=G-1:A=99:V=-(V*4)/5:M=4:D=D+1:ifD>1orX<LorX>RorB!=FthenD=D+1:B=1-F:M=3:ifD>3goto20
70 ifF=EorY<Tgoto80
71 Y=Q+(V*(C-P))/U:X=C-F:M=5:ifY<TthenX=C-F:U=C-PelseX=C-E:U=-U/4:F=E
80 ?CHR$(Z,6,10,0,M,255*(M=0)):M=0:I=13:J=15:K=6:P=(X/O)*(X>0):Q=Y/O
81 ?CHR$(Z,8,1,[I],[I+1],[J],[J+1],[K]):[J]=[I]:[J+1]=[I+1]:J=I:I=I-2:K=K-1:ifK>2goto81
82 ?CHR$(Z,8,1,P,Q,[7],[8],[2]):[7]=P:[8]=Q:?CHR$(Z,8,1,P,Q,P,Q,[D>1]):ifINKEY()=0goto30
99 VIDEO1

自動デモ

  • 実行したら勝手に動き続けます。特に操作はできません。
  • キーボードのキーを押したら終了します。

ソース

10 VIDEO0:CLV:Z=128:O=4:H=12:G=160:T=120:W=320:L=60:C=162:R=259:LET[0],1,2,10,11,12,12 20 ?CHR$(Z,4,0,0):U=0:V=0:X=L:Y=T:S=0:F=1:B=1:D=1:M=5:?CHR$(Z,8,1,L/O,G/O,R/O,G/O,10):CLT
30 ?CHR$(Z,8,1,C/O,T/O,C/O,G/O,10):ifF!=Bgoto60
31 ifV/5!=RND((G-Y)/(1+D*4))goto60
32 ifBgoto40
33 ifD=0andX-Y>R-Ggoto60
34 I=-H:J=H*(X-C+Y-T)/(W-C):B=1:GOTO50
40 ifTICK()<30goto60
41 ifD=0andX+Y<L+Ggoto60
42 S=1:I=H:J=H*(C-X+Y-T)/C:B=0
50 U=RND(3)-1+I-U/5:V=RND(J/4)-J-V/4:D=0:M=6
60 A=A+ABS(U):ifA>30 A=0:U=U-(U>0)+(U<0)
61 V=V+S:P=X:Q=Y:X=X+U:Y=Y+V
62 E=F:F=(X<C):ifY<Ggoto70
63 X=P+(U*(G-Q))/V:Y=G-1:A=99:V=-(V*4)/5:M=4:D=D+1:ifD>1orX<LorX>RorB!=F D=D+1:B=1-F:M=3:ifD>3goto20
70 ifF=EorY<Tgoto80
71 Y=Q+(V*(C-P))/U:X=C-F:M=5:ifY<T X=C-F:U=C-PelseX=C-E:U=-U/4:F=E
80 ?CHR$(Z,6,10,0,M,255*(M=0)):M=0:I=13:J=15:K=6:P=(X/O)*(X>0):Q=Y/O
81 ?CHR$(Z,8,1,[I],[I+1],[J],[J+1],[K]):[J]=[I]:[J+1]=[I+1]:J=I:I=I-2:K=K-1:ifK>2goto81
82 ?CHR$(Z,8,1,P,Q,[7],[8],[2]):[7]=P:[8]=Q:?CHR$(Z,8,1,P,Q,P,Q,[D>1]):ifINKEY()=0goto30
99 VIDEO1

おまけ: PanCakeなし版

  • PanCakeを使わずIchigoJam本体だけでむりやりグラフィック表示します。
  • スペースキーで打ちます。押してから離すまでの長さで角度を調整します。
  • ESCを押したら終了。

ソース

1 'TFJ2
10 CLV:G=640:T=480:L=160:C=528:R=896:H=28:W=50:O=12:poke#7F0,255,0,0,0,0,0,0,0,0
20 CLS:?S:forP=#B85to#B9B:pokeP,#FE:next:U=0:V=0:X=L:Y=T:E=0:F=1:B=1:D=1:A=W:N=0:Z=0:Q=#E0:M=2
30 K=N:N=BTN(SPACE):ifF!=BorD>1goto60
31 ifBgoto40
32 ifD=0andX-Y>R-Ggoto60
33 ifV/16!=RND(G-Y)/(4+D*12)goto60
34 B=1:J=H*(X-C+Y-T-(R-X)/4)/(C-L):goto50
40 ifK=Ngoto60
41 ifNclt:goto60
42 B=0:E=2:J=TICK()-V/4
50 U=H-H*B*2:V=RND(J/8)-J:ifV<-H V=-H
51 ifD=0 V=V*5/4:U=U*4/5
52 D=0:M=1
60 A=A-ABS(U):ifA<0 A=W:U=U-(U>0)+(U<0)
61 V=V+E:I=X:J=Y:X=X+U:Y=Y+V:K=F:F=(X<C):ifY<Ggoto70
62 X=I+U*(G-J)/V:Y=G-1:U=U*2/3:V=-V/2:M=2:D=D+1:ifD>1orX<LorX>RorB!=F D=D+1:M=3:ifD>3 S=S+B*2-1:goto20
70 ifF=KorY<Tgoto80
71 Y=J+V*(C-I)/U:X=C-F:M=4:ifY<T X=C-F:U=C-IelseX=C-K:U=-U/3:F=K
80 poke#AF0,22:I=X>>5:J=Y>>5:ifI<0orI>31orJ<0orJ>23 P=0:goto90
81 P=#900+I+J*32:ifP!=[Z] Q=#E0+(Q-#DF)%O:pokeQ*8,0,0,0,0,0,0,0,0
85 I=(X>>2)%8:J=(Y>>2)%8+Q*8:K=PEEK(J)|(128>>I):pokeJ,K
90 Z=(Z+1)%O:poke[Z],0:pokeP,Q:[Z]=P
91 ifMbeepM*8,1:M=0
92 goto30