APKPure Appを使用する
雪合戦〜プログラミング・ウォーの旧いバージョンをダウンロードすることが可能
専用マシンをプログラミングして、いざ雪合戦!
タンク2台対2台による雪合戦のゲームです。ただしタンクは直接操作できません。それぞれのタンクは予め組まれたプログラムに従って動作します。タンクの性能は同一なので、勝敗はプログラムの出来次第です。
※編集したプログラムを保存する場合、ファイル名に「sample」や「level」が含まれていると保存できません。適宜ファイル名を変えて保存してください。
雪合戦のルール
●青チームと赤チームに分かれて戦います
●雪玉を5回ぶつけられると、退場になります。
●2台とも退場になったら負けです。
●雪玉は10個まで持つことができます。
●雪玉は自チームの基地に戻ればいつでも何回でも補充できます。
●相手チームのタンクを2台とも退場させるか、相手チームの基地にタッチすれば勝ちです。
●時間切れの場合は残りライフの多い方が勝ちです。それも同じ場合は青チームの勝ちになります。
プログラムについて
下記に仕様を載せていますが、下記を読むよりもsample.xmlを編集して試してみるほうが理解の早道になるでしょう。sample.xmlは読み込むことはできますがそのままのファイル名では保存できません。適宜、名前を付けて保存してください。
ゲームモード
●ローカル対戦
端末の内部に格納されているプログラム同士で競う対戦です。アプリには最初からlevel1からlevel3までのプログラムを内蔵していて、まずはこのlevel1プログラムに勝つことが最初の目標です。
ローカル対戦モードでは赤チームのプログラムと青チームのプログラムをそれぞれ選択して戦わせます。上記のlevel1 からlevel3のプログラムは赤チームのプログラムとしてしか選択できません。基本的には青チームが自分側、赤チームが敵側と考えてください。
●グローバル対戦
ローカル対戦にてlevel1 プログラムに勝利すると、グローバル対戦を選択することができるようになります。こちらはインターネットで繋がっている全世界のユーザーが作成したプログラムと対戦します。エントリーとマッチ選択の二つのメニューがあります。最初はエントリーのみが有効ですが、エントリーを実行するとマッチ選択も有効になります。
エントリーは、自分の作ったプログラムをサーバーにアップロードします。アップロードしたプログラムは、赤チームとして戦うことになります。マッチ選択では、全世界のユーザーがアップロードしたプログラムを選択できます。
エントリーしたプログラムが、全世界の誰かのプログラムと対戦するとその結果が通知されます。タイトル画面右下にアイコンが表示されている時は対戦結果が通知されている状態です。アイコンをタップすると対戦結果の確認画面になります。再アップロードを選択すると累積対戦成績を保持したまま、エントリーできます。再生をクリックすると、対戦の様子を確認できます。
タンクの仕様
●前進、後退、右旋回、左旋回
●砲台の左右旋回
●周囲360度を16分割した分解能のレーダーを搭載
プログラムの仕様
●ユーザー変数は整数型のみ
●フロー制御は、if then else、while、switch case break
●イベントドリブン型
●特殊変数
・r1 外部関数の戻り値の格納先として、レーダー配列変数の引数として、使用
・r2 外部関数の戻り値の格納先として使用
・r3 汎用的な整数型変数
・uDir 砲台の方向を-180〜179度の範囲で表す
・life 残りライフ。初期値は5
・ballNumber 持っている雪玉の数
●レーダー配列変数
特殊変数のr1を引数として、その方向の対象物までの距離を格納しています。値が1000の場合はその方向には対象物が見つからないことを示します。対象物が見つかっている場合は4〜60の整数が格納されています。
・radarBall 対象物を雪玉としたレーダー
・radarTank 対象物をタンクとしたレーダー
・radarWall 対象物を壁としたレーダー
●ユーザー変数
頭に%を付けるとユーザー変数になります。整数型の変数です。宣言不要で初期値は0です。
●単位系(距離、角度)
外部関数(後述)とレーダーでは単位系が異なります。外部関数の距離はレーダーの距離の約5倍です。また角度は、外部関数では-180度〜179度の360度系ですが、レーダーでは0〜15になります。
●if文
整数同士の比較演算を行い、真ならthen〜/thenで囲まれたブロックを実行し、偽ならelse〜/elseで囲まれたブロックを実行します。入れ子にできます。
●while文
整数同士の比較演算を行い、真なら/whileまで実行してwhileまで戻ります。永久ループにならないよう1000回ループしたタイミングで強制的にループから抜けます。入れ子にできます。
●switch、case、break文
変数の値によってcase文に分岐します。breakで/switchに飛びます。switchは入れ子にできません。
●assign文
変数に値を代入します。
●calc文
整数同士の四則演算を実行し、結果の整数を変数に代入します。
●func文
内蔵関数を実行し、結果の整数を変数に代入します。
・abs 絶対値を返します。
・cvD2I 角度の単位系を変換します。-180度〜179度の角度から、0〜15のレーダー角度系に変換します。
・cvI2D 角度の単位系を変換します。0〜15のレーダー角度系から、-180度〜179度の360度角度系に変換します。
●exfunc文
外部関数を実行します。結果はr1,r2に格納されます。
・shootBall 雪玉を発射します。正常に発射できた時はr1に0が格納されます。
・searchBase 自チームの基地を探します。r1に360度系での方向、r2に距離が格納されます。
・searchEnemy 近くの敵を探します。格納される値はsearchBaseと同様です。
・searchFlag 敵チームの基地を探します。
●tank文
自機の動作を指示します。このステートメントは即座に実行されず、一連の処理が終わった最後に実行されます。ですので一度に複数の動作を指定しても、実際に実行されるのは最後に指定された動作のみになります。
・moveForward 指定された距離、前方へ移動します。
・moveBack 指定された距離、後方へ移動します。
・turnRight 指定された角度で右に旋回します。
・turnLeft 指定された角度で左に旋回します。
・rotateRight 砲台の向きのみ指定された角度右へ回ります。
・rotateLeft 砲台の向きのみ指定された角度左へ回ります。
・onlyTurnRight 砲台の向きは変えずにタンクの向きだけ右へ回ります。
・onlyTurnLeft 砲台の向きは変えずにタンクの向きだけ左へ回ります。
●display文
文字列と変数の値を1つだけ画面に表示します。主にデバッグ用ですが、対戦を盛り上げるためのセリフを言わせてもいいでしょう。
プログラムの編集
内蔵のエディタでプログラムを編集できます。プログラムファイルをエクスポートして、一般的なテキストエディタで編集することも可能です。外部のエディタで編集した場合は、インポートしたあとに名前を付けて保存することで、使えるようになります。
内蔵のエディタでは、右端の+ボタンを押すと、その下に行が追加されます。追加したいステートメントをメニューから選択して、適宜パラメータを設定してください。パラメータ入力時は、一度入力したことのある変数および既にプログラム中に出現している変数は、リストから選択することができます。
Last updated on 2018年12月15日
Minor bug fixes and improvements. Install or update to the newest version to check it out!
雪合戦〜プログラミング・ウォー
1.00 by furusawa326
2018年12月15日