About 雪合戦〜プログラミング・ウォー
タンク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つだけ画面に表示します。主にデバッグ用ですが、対戦を盛り上げるためのセリフを言わせてもいいでしょう。
プログラムの編集
内蔵のエディタでプログラムを編集できます。プログラムファイルをエクスポートして、一般的なテキストエディタで編集することも可能です。外部のエディタで編集した場合は、インポートしたあとに名前を付けて保存することで、使えるようになります。
内蔵のエディタでは、右端の+ボタンを押すと、その下に行が追加されます。追加したいステートメントをメニューから選択して、適宜パラメータを設定してください。パラメータ入力時は、一度入力したことのある変数および既にプログラム中に出現している変数は、リストから選択することができます。 It is a snowball fight of the game by two-to-two tank. However, the tank can not be directly manipulated. Each tank will operate according to a pre-organized program. Since the performance of the tank are the same, win or lose is up to can the program.
※ If you want to save the edited program, it can not be saved to contain a "sample" or "level" in the file name. Please save by changing the appropriate file name.
Rules of the snowball fight
● The battle is divided into the blue team and the red team
● If bumped snowballs five times, will be sent off.
● both cars is lost when you hear the exit.
● snowball can have up to 10.
● snowball can replenish any number of times at any time return to the base of its own team.
● whether to exit both cars the tank of the opposing team, you win if the touch to the base of the opposing team.
● In the case of time-out wins it is one with a lot of remaining life. It is also the case the same will to win of the blue team.
About the program
We put the specifications below, but would prefer to try to edit the sample.xml than reading the following is a good way of understanding. sample.xml it can be read but can not be saved without changing the file name. As appropriate, please save to give it a name.
Game mode
● local competition
This play compete in a program with each other is stored inside the terminal. The app has a built-in from the beginning from level1 to level3 program, First is the first goal is to win this level1 program.
In local battle mode lets fight to select red team of program and the blue team of the program, respectively. Program of level3 from the above level1 can not be selected only as a red team of program. Basically, the blue team have their own side, please believe that the enemy is red team.
● global competition
If you win the level1 program at the local competition, you will be able to select the global competition. Here you play against the program that you have created all the world of users who are connected by the Internet. There are two menu entries and match selection. The first is the only valid entries, but will match selection is also valid when you run the entry.
Entry, and then upload the program made of yourself to the server. Uploaded program, you will be fighting as a red team. In the match selection, you can choose a program in which all the world of user-uploaded.
Entry to the program is, when you play against a whole world of someone of the program and the results will be notified. When the icon is displayed on the title screen the lower right is the state the match result has been notified. It will be confirmation screen to tap match result on the icon. While maintaining a cumulative scoreline when you select the re-upload, you can entry. When you click the playback, you can check the state of the match.
Specifications of the tank
● forward, backward, right turn, left turn
● left and right turning of the battery
● equipped with a radar of 16 divided resolution 360 degrees around
Program specification
● user variable is an integer type only
● flow control, if then else, while, switch case break
● event-driven
● special variable
Of · r1 external function as a storage destination of the return value, as an argument of the radar array variable, use
· R2 used as a storage destination of the external function of the return value
· R3 generic integer type variable
· UDir the direction of the battery represented by a range of -180~179 degrees
· Life remaining life. The initial value is 5
The number of snowball · ballNumber have
● radar array variable
The r1 of the special variable as an argument, it has to store the distance to the direction of the object. Value indicates that it can not find the object in that direction in the case of 1000. If the object is found, it contains an integer of 4 to 60.
· RadarBall object radar was a snowball a
· RadarTank object the radar was a tank
· RadarWall object radar, which was a wall and furniture
● user variables
It will be the user variable and put the% head. Integer type is variable. Declared unnecessary the initial value is 0.
● System of Units (distance, angle)
External function (described below) and the radar is different from the unit system. Distance of the external function is about five times the distance of the radar. Also angle is 360 degrees system of -180 degrees ~179 degrees in the external function, radar will be 0-15.
● if statement
Performs a comparison operation of integer each other, run the block surrounded by true if then~ / then, executes the block surrounded by fake if else~ / else. It can be nested.
● while statement
It performs a comparison operation of integer each other, to return to while running to true if / while. Exit from forcibly loop at the timing of 1000 times the loop so as not to endless loop. It can be nested.
● switch, case, break statement
Branches to the case statement by the value of the variable. It'll take you to / switch at the break. switch can not be nested.
● assign statement
And assigns a value to a variable.
● calc statement
Run the arithmetic of integer between, and assigns the integer result to a variable.
● func statement
Run the built-in function, and assigns the integer result to a variable.
· Abs Returns the absolute value.
· CvD2I to convert the unit system of the angle. From the angle of -180 degrees ~179 degrees, and converts it to a radar angle system of 0 to 15.
· CvI2D to convert the unit system of the angle. From radar angle system of 0 to 15, and then converted to a 360-degree angle system of -180 degrees ~179 degrees.
● exfunc statement
Run the external function. The result is stored in r1, r2.
· ShootBall fires snowballs. When you were able to successfully launch is stored is 0 to r1.
· SearchBase looking for a base of its own team. The direction of the 360-degree system in r1, the distance is stored in r2.
· SearchEnemy looking for a nearby enemy. The value to be stored is the same as searchBase.
· SearchFlag enemy to locate the base of the team.
● tank statement
You direct the operation of its own equipment. This statement is not executed immediately, it will be executed at the end of a series of processing is finished. So even if you specify more than one action at a time, is actually run is the only action that was last specified.
· MoveForward specified distance, and then move forward.
· MoveBack specified distance, to move backward.
· TurnRight at the specified angle and then turning to the right.
· TurnLeft at the specified angle and then turning to the left.
· RotateRight only turret direction you around to the specified angle right.
· RotateLeft only turret direction around to the specified angle left.
· OnlyTurnRight turret orientation is around only to right the direction of the tank without changing.
· OnlyTurnLeft turret orientation is around to the left only the direction of the tank without changing.
● display statement
The value of the string and the variable and displays it in only one screen. It is primarily for debugging, but would be good to let's say the words to liven up the match.
Editing of program
You can edit the program in the built-in editor. Export the program file, it is also possible to edit a general text editor. If you edit in an external editor, by Save after you import, ready to use.
In the built-in editor, and press the right edge of the + button, the row below it will be added. You want to add the statement by selecting from the menu, please set the appropriate parameters. Parameter time input, the variables that appeared in the variables and already programmed some of that you have once entered, can be selected from the list.