CodeBattlerAce

CodeBattlerAce入門 利用可能なコードフォーマット一覧

読了時間: 約1512
CodeBattlerAce - CodeEditor

先日、私はAIプログラミング対戦ゲームCodeBattlerAce」をリリースしました。
個人的には、なかなか面白いゲームができたのではないかなと思っていますので…。
ぜひ一人でも多くの方にプレイしてもらいたいですね。

ところで、このCodeBattlerAceでは、プログラミングをするのがメインになりますが…。
そのプログラミングで利用できるコードフォーマットの種類が比較的たくさんあるのですよね。
私は作者なので、どんなコードがあるのかというのは把握していますが、初見の人にとっては全く分かりませんよね?

そこで、今回の記事では、CodeBattlerAceで利用可能なコードフォーマットの一覧とそれらの簡単な説明をしていきます。
まずは、どんなコードがあって、どのように行動するのかというのを1つずつ把握していきましょう。

Contents

行動系 (16)

ahead value trueX trueY 0 0

同期でvalueの値だけ前進します。
その後、ポインタを(trueX,trueY)移動します。
valueには値と変数、trueX,trueYは値のみ指定できます。

setAhead value trueX trueY 0 0

非同期でvalueの値だけ前進します。
その後、ポインタを(trueX,trueY)移動します。
valueには値と変数、trueX,trueYは値のみ指定できます。

back value trueX trueY 0 0

同期でvalueの値だけ後進します。
その後、ポインタを(trueX,trueY)移動します。
valueには値と変数、trueX,trueYは値のみ指定できます。

setBack value trueX trueY 0 0

非同期でvalueの値だけ後進します。
その後、ポインタを(trueX,trueY)移動します。
valueには値と変数、trueX,trueYは値のみ指定できます。

turnRight angle trueX trueY 0 0

同期で自機をangle度右回転させます。
その後、ポインタを(trueX,trueY)移動します。
angleには値と変数、trueX,trueYは値のみ指定できます。

setTurnRight angle trueX trueY 0 0

非同期で自機をangle度右回転させます。
その後、ポインタを(trueX,trueY)移動します。
angleには値と変数、trueX,trueYは値のみ指定できます。

turnLeft angle trueX trueY 0 0

同期で自機をangle度左回転させます。
その後、ポインタを(trueX,trueY)移動します。
angleには値と変数、trueX,trueYは値のみ指定できます。

setTurnLeft angle trueX trueY 0 0

非同期で自機をangle度左回転させます。
その後、ポインタを(trueX,trueY)移動します。
angleには値と変数、trueX,trueYは値のみ指定できます。

turnGunRight angle trueX trueY 0 0

同期で自機の砲塔をangle度右回転させます。
その後、ポインタを(trueX,trueY)移動します。
angleには値と変数、trueX,trueYは値のみ指定できます。

setTurnGunRight angle trueX trueY 0 0

非同期で自機の砲塔をangle度右回転させます。
その後、ポインタを(trueX,trueY)移動します。
angleには値と変数、trueX,trueYは値のみ指定できます。

turnGunLeft angle trueX trueY 0 0

同期で自機の砲塔をangle度左回転させます。
その後、ポインタを(trueX,trueY)移動します。
angleには値と変数、trueX,trueYは値のみ指定できます。

setTurnGunLeft angle trueX trueY 0 0

非同期で自機の砲塔をangle度左回転させます。
その後、ポインタを(trueX,trueY)移動します。
angleには値と変数、trueX,trueYは値のみ指定できます。

fire power trueX trueY 0 0

同期でパワーがpowerの弾丸を発射します。
パワーが大きいほど命中した際のダメージが大きくなりますが、自機はpower分のHPを失います。
その後、ポインタを(trueX,trueY)移動します。
powerには値と変数、trueX,trueYは値のみ指定できます。

setFire power trueX trueY 0 0

非同期でパワーがpowerの弾丸を発射します。
パワーが大きいほど命中した際のダメージが大きくなりますが、自機はpower分のHPを失います。
その後、ポインタを(trueX,trueY)移動します。
powerには値と変数、trueX,trueYは値のみ指定できます。

setVelocity velocity trueX trueY 0 0

自機の移動速度をvelocityに変更します。
指定できる範囲は(0〜8)までとなります。
その後、ポインタを(trueX, trueY)移動します。
velocityには値と変数、trueX,trueYは値のみ指定できます。

doNothing trueX trueY 0 0

何もしません。
主に他のコード同士をつないだり、時間調整をするのに使います。
その後、ポインタを(trueX,trueY)移動します。
trueX,trueYは値のみ指定できます。

取得系 (19)

getX x trueX trueY 0 0

自機のx座標を取得して、xに代入します。
その後、ポインタを(trueX,trueY)移動します。
xには変数のみ、trueX,trueYは値のみ指定できます。

getY y trueX trueY 0 0

自機のy座標を取得して、yに代入します。
その後、ポインタを(trueX,trueY)移動します。
yには変数のみ、trueX,trueYは値のみ指定できます。

getHeading heading trueX trueY 0 0

自機の方向を取得して、headingに代入します。
その後、ポインタを(trueX,trueY)移動します。
headingには変数のみ、trueX,trueYは値のみ指定できます。

e.getHeading heading trueX trueY 0 0

敵の方向を取得して、headingに代入します。
その後、ポインタを(trueX,trueY)移動します。
headingには変数のみ、trueX,trueYは値のみ指定できます。

getGunHeading gunHeading trueX trueY 0 0

自機の砲塔の角度を取得して、gunHeadingに代入します。
その後、ポインタを(trueX,trueY)移動します。
gunHeadingには変数のみ、trueX,trueYは値のみ指定できます。

e.getBearing bearing trueX trueY 0 0

自機の方向から見た敵との相対角を取得して、bearingに代入します。
その後、ポインタを(trueX,trueY)移動します。
bearingには変数のみ、trueX,trueYは値のみ指定できます。

e.getDistance distance trueX trueY 0 0

自機と敵との距離を取得して、distanceに代入します。
その後、ポインタを(trueX,trueY)移動します。
distanceには変数のみ、trueX,trueYは値のみ指定できます。

getHP hp trueX trueY 0 0

自機のHPを取得して、hpに代入します。
その後、ポインタを(trueX,trueY)移動します。
hpには変数のみ、trueX,trueYは値のみ指定できます。

e.getHP hp trueX trueY 0 0

敵のHPを取得して、hpに代入します。
その後、ポインタを(trueX,trueY)移動します。
hpには変数のみ、trueX,trueYは値のみ指定できます。

getFieldWidth fieldWidth trueX trueY 0 0

フィールドの幅を取得して、fieldWidthに代入します。
その後、ポインタを(trueX,trueY)移動します。
fieldWidthには変数のみ、trueX,trueYは値のみ指定できます。

getFieldHeight fieldHeight trueX trueY 0 0

フィールドの高さを取得して、fieldHeightに代入します。
その後、ポインタを(trueX,trueY)移動します。
fieldHeightには変数のみ、trueX,trueYは値のみ指定できます。

getDistanceRemaining distanceRemaining trueX trueY 0 0

自機の残り移動距離を取得して、distanceRemainingに代入します。
その後、ポインタを(trueX,trueY)移動します。
distanceRemainingには変数のみ、trueX,trueYは値のみ指定できます。

getTurnRemaining turnRemaining trueX trueY 0 0

自機の残り回転角を取得して、turnRemainingに代入します。
その後、ポインタを(trueX,trueY)移動します。
turnRemainingには変数のみ、trueX,trueYは値のみ指定できます。

getGunTurnRemaining gunTurnRemaining trueX trueY 0 0

自機の砲塔の残り回転角を取得して、gunTurnRemainingに代入します。
その後、ポインタを(trueX,trueY)移動します。
gunTurnRemainingには変数のみ、trueX,trueYは値のみ指定できます。

getTime time trueX trueY 0 0

ラウンドが開始してからの経過時間(秒)を取得して、timeに代入します。
その後、ポインタを(trueX,trueY)移動します。
timeは変数のみ、trueX,trueYは値のみ指定できます。

getCodeCount codeCount trueX trueY 0 0

ラウンドが開始してから、これまでに実行されたコードの数を取得して、codeCountに代入します。
その後、ポインタを(trueX,trueY)移動します。
codeCountは変数のみ、trueX,trueYは値のみ指定できます。

getFrameCount frameCount trueX trueY 0 0

ラウンドが開始してから、経過したフレーム数を取得して、frameCountに代入します。
その後、ポインタを(trueX,trueY)移動します。
frameCountは変数のみ、trueX,trueYは値のみ指定できます。

getLoopCount loopCount trueX trueY 0 0

ラウンドが開始してから、mainコードが実行された回数を取得して、loopCountに代入します。
すなわち、プログラムが何回ループしているかを取得します。
その後、ポインタを(trueX,trueY)移動します。
loopCountは変数のみ、trueX,trueYは値のみ指定できます。

getCodesPerFrame codesPerFrame trueX trueY 0 0

1フレームあたりに実行するコード数を取得して、codesPerFrameに代入します。
その後、ポインタを(trueX,trueY)移動します。
codesPerFrameは変数のみ、trueX,trueYは値のみ指定できます。

計算系 (31)

assign value result trueX trueY 0 0

resultにvalueを代入します。
その後、ポインタを(trueX,trueY)移動します。
valueには値と変数、resultには変数のみ指定できます。

sqrt value result trueX trueY 0 0

valueの平方根を計算して、resultに代入します。
その後、ポインタを(trueX,trueY)移動します。
valueには値と変数、trueX,trueYは値のみ指定できます。

abs value result trueX trueY 0 0

valueの絶対値を計算して、resultに代入します。
その後、ポインタを(trueX,trueY)移動します。
valueには値と変数、trueX,trueYは値のみ指定できます。

floor value result trueX trueY 0 0

floor(value)を計算して、resultに代入します。
その後、ポインタを(trueX,trueY)移動します。
valueには値と変数、trueX,trueYは値のみ指定できます。

ceil value result trueX trueY 0 0

ceil(value)を計算して、resultに代入します。
その後、ポインタを(trueX,trueY)移動します。
valueには値と変数、trueX,trueYは値のみ指定できます。

log value result trueX trueY 0 0

log(value)を計算して、resultに代入します。
その後、ポインタを(trueX,trueY)移動します。
valueには値と変数、trueX,trueYは値のみ指定できます。

exp value result trueX trueY 0 0

exp(value)を計算して、resultに代入します。
その後、ポインタを(trueX,trueY)移動します。
valueには値と変数、trueX,trueYは値のみ指定できます。

sin angle result trueX trueY 0 0

sin(angle)を計算して、resultに代入します。
ちなみに、angleは度で指定します。
その後、ポインタを(trueX,trueY)移動します。
angleには値と変数、trueX,trueYは値のみ指定できます。

cos angle result trueX trueY 0 0

cos(angle)を計算して、resultに代入します。
ちなみに、angleは度で指定します。
その後、ポインタを(trueX,trueY)移動します。
angleには値と変数、trueX,trueYは値のみ指定できます。

tan angle result trueX trueY 0 0

tan(angle)を計算して、resultに代入します。
ちなみに、angleは度で指定します。
その後、ポインタを(trueX,trueY)移動します。
angleには値と変数、trueX,trueYは値のみ指定できます。

asin angle result trueX trueY 0 0

asin(angle)を計算して、resultに代入します。
ちなみに、angleは度で指定します。
その後、ポインタを(trueX,trueY)移動します。
angleには値と変数、trueX,trueYは値のみ指定できます。

acos angle result trueX trueY 0 0

acos(angle)を計算して、resultに代入します。
ちなみに、angleは度で指定します。
その後、ポインタを(trueX,trueY)移動します。
angleには値と変数、trueX,trueYは値のみ指定できます。

atan angle result trueX trueY 0 0

atan(angle)を計算して、resultに代入します。
ちなみに、angleは度で指定します。
その後、ポインタを(trueX,trueY)移動します。
angleには値と変数、trueX,trueYは値のみ指定できます。

normalize angle result trueX trueY 0 0

angleの値を(-180〜180)の間になるように正規化して、resultに代入します。
その後、ポインタを(trueX,trueY)移動します。
angleには値と変数、trueX,trueYは値のみ指定できます。

bulletVelocity power result trueX trueY 0 0

パワーがpowerである弾丸の速度を計算して、resultに代入します。
その後、ポインタを(trueX,trueY)移動します。
powerには値と変数、trueX,trueYは値のみ指定できます。

bulletDamage power result trueX trueY 0 0

パワーがpowerである弾丸のダメージを計算して、resultに代入します。
その後、ポインタを(trueX,trueY)移動します。
powerには値と変数、trueX,trueYは値のみ指定できます。

gainHP power result trueX trueY 0 0

パワーがpowerである弾丸がヒットした際に回復するHP量を計算して、resultに代入します。
その後、ポインタを(trueX,trueY)移動します。
powerには値と変数、trueX,trueYは値のみ指定できます。

gunHeat power result trueX trueY 0 0

パワーがpowerである弾丸を発射した際の熱量を計算して、resultに代入します。
その後、ポインタを(trueX,trueY)移動します。
powerには値と変数、trueX,trueYは値のみ指定できます。

add a b result trueX trueY 0 0

「a + b」の計算結果をresultに代入します。
その後、ポインタを(trueX,trueY)移動します。
a,bには値と変数、resultは変数、trueX,trueYは値のみ指定できます。

sub a b result trueX trueY 0 0

「a – b」の計算結果をresultに代入します。
その後、ポインタを(trueX,trueY)移動します。
a,bには値と変数、resultは変数、trueX,trueYは値のみ指定できます。

mul a b result trueX trueY 0 0

「a * b」の計算結果をresultに代入します。
その後、ポインタを(trueX,trueY)移動します。
a,bには値と変数、resultは変数、trueX,trueYは値のみ指定できます。

div a b result trueX trueY 0 0

「a / b」の計算結果をresultに代入します。
その後、ポインタを(trueX,trueY)移動します。
a,bには値と変数、resultは変数、trueX,trueYは値のみ指定できます。

mod a b result trueX trueY 0 0

「a % b」の計算結果をresultに代入します。
その後、ポインタを(trueX,trueY)移動します。
a,bには値と変数、resultは変数、trueX,trueYは値のみ指定できます。

min a b result trueX trueY 0 0

aとbのうち、小さい方をresultに代入します。
その後、ポインタを(trueX,trueY)移動します。
a,bには値と変数、resultは変数、trueX,trueYは値のみ指定できます。

max a b result trueX trueY 0 0

aとbのうち、大きい方をresultに代入します。
その後、ポインタを(trueX,trueY)移動します。
a,bには値と変数、resultは変数、trueX,trueYは値のみ指定できます。

random min max result trueX trueY 0 0

min以上max未満のランダムな値を取得して、resultに代入します。
その後、ポインタを(trueX,trueY)移動します。
min,maxには値と変数、resultは変数、trueX,trueYは値のみ指定できます。

atan2 dy dx result trueX trueY 0 0

dyとdxから角度θを求め、resultに代入します。
その後、ポインタを(trueX,trueY)移動します。
dy,dxには値と変数、resultは変数、trueX,trueYは値のみ指定できます。

pow a b result trueX trueY 0 0

aのb乗の値を計算して、resultに代入します。
その後、ポインタを(trueX,trueY)移動します。
a,bには値と変数、resultは変数、trueX,trueYは値のみ指定できます。

limit value min max result trueX trueY 0 0

valueの値を(min〜max)の範囲にして、resultに代入します。
その後、ポインタを(trueX,trueY)移動します。
value,min,maxには値と変数、resultには変数、trueX,trueYは値のみ指定できます。

distance srcX srcY destX destY result trueX trueY 0 0

(srcX,srcY)から(destX,destY)までの距離を計算して、resultに代入します。
その後、ポインタを(trueX,trueY)移動します。
srcX,srcY,destX,destYには値と変数、resultには変数、trueX,trueYは値のみ指定できます。

direction srcX srcY destX destY result trueX trueY 0 0

(srcX,srcxY)から(destX,destY)への角度θを計算して、resultに代入します。
その後、ポインタを(trueX,trueY)移動します。
srcX,srcY,destX,destYには値と変数、resultには変数、trueX,trueYは値のみ指定できます。

条件系 (9)

if a condition b trueX trueY falseX falseY

(a condition b)を満たす場合はポインタを(trueX,trueY)移動し、そうでない場合には(falseX,falseY)移動します。
conditionには(==,!=,>=,>,<=,<)のみが指定できます。
a,bには値と変数、trueX,trueY,falseX,falseYは値のみ指定できます。

canFire trueX trueY falseX falseY

自機が弾丸を発射できる場合にはポインタを(trueX,trueY)移動し、そうでない場合には(falseX,falseY)移動します。
trueX,trueY,falseX,falseYは値のみ指定できます。

isNearWall distance trueX trueY falseX falseY

最も近い壁との距離がdistance以下ならポインタを(trueX,trueY)移動し、そうでない場合には(falseX,falseY)移動します。
distanceには値と変数、trueX,trueY,falseX,falseYは値のみ指定できます。

isNearEnemy distance trueX trueY falseX falseY

自機と敵との距離がdistance以下ならポインタを(trueX,trueY)移動し、そうでない場合には(falseX,falseY)移動します。
distanceには値と変数、trueX,trueY,falseX,falseYは値のみ指定できます。

isHitByBullet trueX trueY falseX falseY

自機が被弾している場合にはポインタを(trueX,trueY)移動し、そうでない場合には(falseX,falseY)移動します。
trueX,trueY,falseX,falseYは値のみ指定できます。

e.isHitByBullet trueX trueY falseX falseY

敵が被弾している場合にはポインタを(trueX,trueY)移動し、そうでない場合には(falseX,falseY)移動します。
trueX,trueY,falseX,falseYは値のみ指定できます。

isHitEnemy trueX trueY falseX falseY

自機と敵が衝突している場合にはポインタを(trueX,trueY)移動し、そうでない場合には(falseX,falseY)移動します。
trueX,trueY,falseX,falseYは値のみ指定できます。

isHitWall trueX trueY falseX falseY

自機が壁と衝突している場合にはポインタを(trueX,trueY)移動し、そうでない場合には(falseX, falseY)移動します。
trueX,trueY,falseX,falseYは値のみ指定できます。

contains x y trueX trueY falseX falseY

(x,y)がフィールド内に存在する場合にはポインタを(trueX,trueY)移動し、そうでない場合には(falseX,falseY)移動します。
x,yには値または変数、trueX,trueY,falseX,falseYは値のみ指定できます。

制御系 (6)

empty 0 0 0 0

このコードが実行されると、ロボットファイルの場合はポインタをmainコードの位置に変更します。
ファンクションファイルの場合は、「return 1 0 0 0 0」と同じ効果になります。
すなわちTrueを返します。

main trueX trueY 0 0

プログラムの始まりの位置を表します。
各ファイルには、必ず1つmainコードを入れてください。
実行後、ポインタを(trueX,trueY)移動します。
trueX,trueYは値のみ指定できます。

return value 0 0 0 0

valueの値を返します。
ロボットファイルで実行した場合、次のポインタの位置をmainコードの位置に変更します。
ファンクションファイルで実行した場合、0以下ならポインタを(falseX, falseY)移動し、そうでない場合には(trueX,trueY)移動するように、functionコードのポインタの移動先を設定します。
サンプルの「sample.FlipTest.robot」などを参照してください。
valueには値のみ指定できます。
基本的には、Trueを返したい時には1を、Falseを返したい時には0を指定してください。

function name trueX trueY falseX falseY

nameという名前のファンクションファイルを呼び出し、その処理を行います。
実行後、返り値がTrueならポインタを(trueX,trueY)、そうでない場合には(falseX,falseY)移動します。
nameには「.function」を除いた部分を指定してください。
例えば、「sample.Hello.function」を呼び出したい場合には、nameを「sample.Hello」とします。
trueX,trueY,falseX,falseYは値のみ指定できます。

wait n trueX trueY 0 0

nコード分処理を待ちます。
主に時間の調整に使います。
trueX,trueYは値のみ指定できます。

goto x y 0 0 0 0

ポインタの位置を(x, y)に変更します。
x,yは値のみ指定できます。

まとめ

今回の記事では、CodeBattlerAceで利用可能なコードフォーマットの一覧とその説明をしてみましたが…。
現時点でコード数が81もありましたよ。
我ながら、よくここまで用意したなと思いましたね。

もちろん、これら全てのコードを使わなければならないというわけではありません。
必要に応じて、自分が行いたい処理をするコードのみを使えば良いです。
とは言っても、いくつかプログラムを組んでいるうちに自然と覚えていくと思いますけども。

これだけのコードがあれば、大体の処理は対応できると思いますが…。
もしかすると、まだ何か足りないものがあるかもしれません。
その際には、ぜひコメントで教えてもらえるとありがたいです。

CodeBattlerAce
読了時間: 約018
CodeBattlerAce - バトル

CodeBattlerAceは、私が作成した本格的なJavaFXゲームアプリケーションです。
ロボット戦車の動きを制御するプログラム(AI)をプログラミングして、他のプログラム(AI)と対戦させるゲームです。
完全無料で遊べますので、ぜひダウンロードしてみてください。
ファイルのダウンロード先は以下のリンク先になります。

「CodeBattlerAce」をダウンロード!

簡単な遊び方の解説記事は以下のリンク先です。

「AIプログラミング対戦ゲーム「CodeBattlerAce」を公開!」を読む

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA