- タイトル
BattleSpace(通信対戦) (電子工作マガジン2016年SUMMER号掲載) - 開発環境
IchigoJamBASIC1.0.1
IchigoJamBASIC1.1.1
IchigoJamBASIC1.2.0 - 内容
昭和の時代、大海原を舞台に熾烈な戦いが繰り広げられていた。
長き年を経た現代、その戦いは宇宙へと舞台を移し、今もなお戦いが続いていたのだ。
(海戦ゲーム、BattleShipゲームと同じルールです) - 準備
このゲーム通信対戦ゲームですので、IchigoJam(ディスプレイ・キーボード)を2台と通信ケーブルを用意してください。
通信ケーブルはショートしなければ何でも大丈夫と思いますが、私は短く切った単線のLANケーブル(そのうち使用するのは3本)を使用しました。
IchigoJamの電源を切った状態で、3本の線を下記の様に接続します。(クロス結線)
TXD - RXD
RXD - TXD
GND - GND - 注意
このプログラムは、毎回通信を行いながらゲームが進行していきます。
操作を間違えると、エラーが出続ける状態になります。
(いわゆる「ピンポンゲーム」状態)
IchigoJam A IchigoJam B エラー発生
エラー表示
エラー文を送信してしまうエラー文を受信
エラー発生
エラー表示
エラー文を送信してしまうエラー文を受信
エラー発生
エラー表示
エラー文を送信してしまうエラー文を受信
エラー発生
エラー表示
エラー文を送信してしまう以下、無限ループ
よって、まだ通信速度は合わせない状態で、それぞれのIchigoJamにプログラムを読み込んでください。(通信速度が異なっているのがベスト)
この時、誤操作によりエラーが出続けてしまった場合は、[F1]キー(CLRコマンド)を押し続けてください。
エラー表示が止まります。 - 開戦
ます2台の通信速度を合わせるため、それぞれのIchigoJamの電源を入れた後に下記のコマンドを実行してください。(通信環境によってはデフォルトのBPS115200でもプレイ可能です)
BPS300
ゲームの進行はターン(順番)制です。
後攻の人が「RUN」コマンドでプログラムを実行してください。
先攻の人は「RUN」と入力しなくても、後攻のIchigoJamより実行コマンドが送信され自動的にゲームが開始します。
画面上部には10マス×10マスのレーダーが2つ表示されています。
左側はプレイヤーの宇宙ステーションの位置を表すレーダー(YOU)です。
右側は敵機の位置を表すレーダー(OPPONENT)ですが、スタート時点ではまだ索敵していないため何も表示されていません。
宇宙ステーションの数はプレイヤー、対戦相手ともに3機で、ゲーム開始時にランダムに配置されます。/■\ ■■■ \■/
宇宙ステーションは右記の形状をしています。(「2001年宇宙の旅」の宇宙ステーションをイメージしています)
プレイヤーのターンの時には「YOU」の前に「→」が表示され、対戦相手のターンの時には「OPPONENT」の前に「→」が表示されます。 - 操作
「→YOU」と表示されていたらプレイヤーのターンです。(対戦相手には「→OPPONENT」と表示され、受信待機状態になっています)
対戦相手がいると思われる座標を入力して攻撃します。
「Y=」に縦座標、「X=」に横座標を入力してください。
座標入力は0~9の数値で、Enterキーは不要です。
攻撃した結果が、座標値の下には文字で、敵機レーダーにはキャラクタで表示されます。
結果 文字
表示レーダー
表示宇宙ステーションの機関部(「■」)に当たった場合 HIT! * 宇宙ステーションの外周部(「/」または「\」)に当たった場合 DAMAGE ・ 外れた場合 MISS -
プレイヤーの攻撃とその結果の表示が終わると「→OPPONENT」と表示され対戦相手のターンとなります。キーボードには触れずに対戦相手の攻撃を注視していてください。
対戦相手の攻撃結果もプレイヤーの攻撃結果と同様に文字とキャラクタで表示されます。
ただしキャラクタは自機のレーダーに表示されます。
3機の宇宙ステーションの全ての機関部を攻撃して破壊した方の勝ちです。 - プログラムのしくみPRINT文を実行すると表示された文字がシリアルポートにも出力される機能、およびシリアルポートからの入力をINKEY文で受け取れる機能を利用して、2台のIchigoJam間の通信を行っています。そのため、通信以外にPRINT文を使用できないので、画面表示は全てPOKE文を使用しています。画面表示にPOKE文を使用するにあたり、メモリ節約のためアスキーコードが99以下のキャラクタを多用しています。自ターンのキー入力待ち、敵ターンの受信待ちともにINKEY文を使用しているため、敵ターンの時にキー操作を行ってしまうと、コマンドを受信したものとして処理してしまうため誤動作します。
各行の処理 10行 20行 30行 40行 50行 60行 70行~90行 100行 110行~140行 150行 160行 900行
コメント(ファイル名) 対戦相手(先攻側)にプログラム実行コマンドを送信 IchigoJam1.1.1以後の画面制御コードの出力を抑制 自機の配置と表示 初期画面作成 自ターンの座標入力と通信相手からの攻撃結果待ち 通信相手からの結果を表示 敵ターン。通信相手からの攻撃待ち 敵ターンの攻撃結果の表示と送信 勝敗の表示 END キー入力待ちサブルーチン
変数表 I S J X Y K R C D P K
ループ用 先攻・後攻フラグ(先攻=0/後攻=1) 自機配置用アドレス x座標 y座標 入力した数字 受信した数字 自レーダーに表示する(表示されている)キャラクタコード 敵レーダーに表示するキャラクタコード HITした数 HITされた数
IchigoJam1.1.1以後は、PRINT文以外にLOCATE文やCLS文等も画面制御コードをシリアルポートに送信するようになっているので、30行のUART1にて画面制御コードの出力を抑制しています。これはFaceBookのIchigoJamFanグループで教えていただきました。ありがとうございました。 - プログラムの改造
プログラムサイズを小さくすれば、攻撃時のメッセージの種類や文言を変更できると思います。
(行番号の増分を+1にしたり、IchigoJam1.1.1ならGOSUBの短縮形を使用するなど)
BattleSpace(Ichigojam v1.0,v1.1) | |
---|---|
10 'BattleSpace(BPS300) 20 ?"CLV:GOTO30":CLV:S=1 30 IFVER()>11000UART1 40 CLS:FORI=0TO2:X=RND(8)+2:Y=RND(8)+2:J=#900+Y*32+X:IFPEEK(J-32)+PEEK(J-1)+PEEK(J)+PEEK(J+1)+PEEK(J+32)<>0I=I-1:NEXTELSEPOKEJ-33,#9D,1,#9C:POKE(J-1),1,1,1:POKE(J+31),#9C,1,#9D:NEXT 50 FORI=48TO57:POKE#8D1+I,I:POKE#320+I*32,I:POKE#8E1+I,I:POKE#330+I*32,I:NEXT:POKE#A84,89,79,85:POKE#A92,79,80,80,79,78,69,78,84:IFSGOTO100 60 LC0,14:?CHR$(12):POKE#A83,29:POKE#A91,0:POKE#AC0,89,61:GOSUB900:Y=K:LC3,14:?Y:POKE#AE0,88,61:GOSUB900:X=K:LC3,15:?X:GOSUB900:R=K:LC1,17:IFR=1?"HIT!":C=15:P=P+1 70 IFR=2?"DAMAGE":C=144 80 IFR=3?"MISS":C=45 90 POKE#931+Y*32+X,C:WAIT60:IFP=15GOTO150 100 POKE#A83,0:POKE#A91,29:GOSUB900:Y=K:POKE#AD0,89,61,Y+48:GOSUB900:X=K:POKE#AF0,88,61,X+48 110 WAIT90:A=#921+Y*32+X:C=PEEK(A):LC17,17:IFC=1?"1 HIT!":D=15:T=T+1 120 IFC=#9CORC=#9D?"2 DAMAGE":D=144 130 IFC=0?"3 MISS":D=45 140 POKEA,D:IFT<15WAIT90:GOTO60 150 POKE#B60,89,79,85:IFP=2POKE#B64,87,73,78,33ELSEPOKE#B64,76,79,83,69 160 END 900 K=INKEY()-48:IFK<0ORK>9GOTO900ELSERETURN |
BattleSpaceト(Ichigojam v1.2) (動作未確認) | |
---|---|
10 'BattleSpace(BPS300) 20 ?"CLV:GOTO30":CLV:S=1 30 IFVER()>11000UART1 40 CLS:FORI=0TO2:X=RND(8)+2:Y=RND(8)+2:J=#900+Y*32+X:IFPEEK(J-32)+PEEK(J-1)+PEEK(J)+PEEK(J+1)+PEEK(J+32)<>0I=I-1:NEXTELSEPOKEJ-33,#19,1,#1A:POKE(J-1),1,1,1:POKE(J+31),#1A,1,#19:NEXT 50 FORI=48TO57:POKE#8D1+I,I:POKE#320+I*32,I:POKE#8E1+I,I:POKE#330+I*32,I:NEXT:POKE#A84,89,79,85:POKE#A92,79,80,80,79,78,69,78,84:IFSGOTO100 60 LC0,14:?CHR$(12):POKE#A83,29:POKE#A91,0:POKE#AC0,89,61:GSB900:Y=K:LC3,14:?Y:POKE#AE0,88,61:GSB900:X=K:LC3,15:?X:GSB900:R=K:LC1,17:IFR=1?"HIT!":C=15:P=P+1 70 IFR=2?"DAMAGE":C=144 80 IFR=3?"MISS":C=45 90 POKE#931+Y*32+X,C:WAIT60:IFP=15GOTO150 100 POKE#A83,0:POKE#A91,29:GSB900:Y=K:POKE#AD0,89,61,Y+48:GSB900:X=K:POKE#AF0,88,61,X+48 110 WAIT90:A=#921+Y*32+X:C=PEEK(A):LC17,17:IFC=1?"1 HIT!":D=15:T=T+1 120 IFC=#9CORC=#9DORC=#1AORC=#19?"2 DAMAGE":D=144 130 IFC=0?"3 MISS":D=45 140 POKEA,D:IFT<15WAIT90:GOTO60 150 POKE#B60,89,79,85:IFP=2POKE#B64,87,73,78,33ELSEPOKE#B64,76,79,83,69 160 END 900 K=INKEY()-48:IFK<0ORK>9GOTO900ELSERTN |
MixJuiceでのダウンロードURLは下記になります。
BattleSpace(Ichigojam v1.0,v1.1) http://tagiyasoft.blog.jp/battlespace1.bin
BattleSpace(Ichigojam v1.2) http://tagiyasoft.blog.jp/battlespace2.bin(動作未確認)
以下のように入力してD/Lしてください。
NEW ? MJ GET tagiyasoft.blog.jp/battlespace1.bin |
ブラウザでD/LしてIchigoJamに転送する場合は、通信ソフトでバイナリ送信をしてください。
(例:TeraTermの場合は、メニューの[ファイル]-[ファイル送信]で当該ファイルを送信します)
- 参考ゲーム
海戦ゲーム
コメント