Sourcer プログラム対戦シューティング
自機を動かすプログラムを書いて、対戦させよう!
概要
Sourcer というプログラムで動かす機体を使い対戦をするゲームです。
Sourcer のプログラムは JavaScript というプログラミング言語を使い記述できます。
ルール
対戦相手のシールドを先に 0 にした方が勝ちとなります。
攻撃手段
- レーザー
- 発射すると真っ直ぐに飛んでいく攻撃手段です。残弾数は無制限です。
- ミサイル
- Sourcerと同様、プログラムで動かすことができる攻撃手段です。20発まで発射することができます。ミサイルはレーザーで撃ち落とすことができます。
ステータス
- シールド
- 初期値 100 でダメージをうけると減ります。0 になると戦闘不能となり、相手より先に戦闘不能になると負けとなってしまいます。
- 温度
- 初期値 0 で攻撃を行ったり、ダメージをうけると上昇します。温度が 100 を超えると、徐々に耐久力が減っていきます。温度は時間経過で徐々に減っていきます。
- 燃料
- Sourcer が移動を行うと徐々に減っていきます。0 になると移動が行えなくなります。
- ミサイル残弾
- 初期値 20 でミサイルを使うごとに減少します。0 になるとミサイルが発射できなくなります。
その他
- 高度が0の位置に地面があり、地面に触れるとダメージをうけます。
- Sourcerは重力に引っ張られ、移動を行わないと、徐々に地面に引き寄せられます。レーザーやミサイルは重力の影響をうけません。
プログラム
function を return することで プログラム を登録します。
引数の コントローラ を通して操作できます。
var bot = function(controller) { if (controller.altitude() < 100) { // 高度が下がったら上昇 controller.ascent(); } // 前進する controller.ahead(); }; return bot;
コントローラによる命令 ⇒ 命令の実施 ⇒ 命令 ⇒ 実施 ⇒ ...と繰り返し動作します。
コントローラで行える操作
- 移動
- 前進、後退、上昇、下降など
- レーダー
- 敵機の探知と、自機に飛来してくる攻撃の探知など
- 攻撃
- レーザーの発射、ミサイルの発射
- ステータスの確認
- 耐久力、温度、燃料、高度、ミサイル残弾数などの確認
レーダーは呼び出す回数が増えると、次の行動までの時間が長くなります。
攻撃操作は一度に1つしか受け付けません。
ミサイル の プログラム は、発射命令の際、引数に指定します。
var missile = function(controller) { if(controller.scanEnemy(90, 180)) { // 左側にいる場合は、左へ回転 controller.turnLeft(); } else { // それ以外は、右へ回転 controller.turnRight(); } // 今向いている方向へ、加速する controller.speedUp(); }; var bot = function(controller) { // ・・・省略・・・ controller.fireMissile(missile); // ・・・省略・・・ }; return bot;
API Documents
SourcerController
Sourcerを操作するためのコントローラ。
Methods
frame()
戦闘を開始してから経過した フレーム数 を取得します。
- returns {number}
- 戦闘を開始してから経過した フレーム数
altitude()
現在の高度を取得します。
- returns {number}
- 現在の高度値
wait(frame)
指定したフレーム数、行動をしない命令を出します。
- {number} frame
- 行動をしないフレーム数
shield()
自機のシールドの耐久力を取得します。
- returns {number}
- 自機のシールドの耐久力
fuel()
自機の残燃料を取得します。
- returns {number}
- 自機の燃料
temperature()
自機の温度を取得します。
- returns {number}
- 自機の温度
missileAmmo()
ミサイル残弾数を取得します。
- returns {number}
- ミサイルの残段数
scanEnemy(direction, angle, renge)
指定した方向、範囲、距離に敵が入っているか否かを判定します。
- {number} direction
- レーダーの方向を度数で指定。向いている方向を0とし、上方向がプラス+、下方向がマイナス−。
- {number} angle
- レーダーの範囲・角度。
- {number} renge
- レーダーの距離。省略した場合、距離に関係無く判定される。
- returns {boolean}
- 指定範囲内に敵が入っていた場合 true
Sample
controller.scanEnemy(45, 60, 75);
右向きの場合
左向きの場合
controller.scanEnemy(-45, 120, 50);
右向きの場合
左向きの場合
scanAttack(direction, angle, renge)
指定した方向、範囲、距離に敵の攻撃が居るか否かを判定します。
なお敵の攻撃は、自分に近づいてくるもののみを対象とする。
- {number} direction
- レーダーの方向を度数で指定。向いている方向を0とし、上方向がプラス+、下方向がマイナス−。
- {number} angle
- レーダーの範囲・角度。
- {number} renge
- レーダーの距離。省略した場合、距離に関係無く判定される。
- returns {boolean}
- 指定範囲内に敵の攻撃が入っていた場合 true
ahead()
向いている方向に前進します。
back()
向いている方向とは逆方向に後退します。
ascent()
上昇します。
descent()
下降します。
turn()
現在向いている方向と逆方向を向きます。
fireLaser(direction, power)
レーザーを発射します。
- {number} direction
- 打ち出す方向を度数で指定。向いている方向を0とし、上方向がプラス+、下方向がマイナス−。
- {number} power
- 打ち出す強さ。
fireMissile(source)
ミサイルを発射します。
- {function} source
- ミサイルの動きを制御するための function
log(message)
ログを出力します。
- {string} message
- 出力するメッセージ
console.log() も使うことができます。
scanDebug(direction, angle, renge)
指定した方向、範囲、距離の扇形を画面に表示します。
- {number} direction
- 扇形の方向を度数で指定。向いている方向を0とし、上方向がプラス+、下方向がマイナス−。
- {number} angle
- 扇形の範囲・角度。
- {number} renge
- 扇形の距離。省略した場合も適当な数値で埋められます。
MissileController
ミサイルを操作するためのコントローラ。
Methods
frame()
戦闘を開始してから経過した フレーム数 を取得します。
- returns {number}
- 戦闘を開始してから経過した フレーム数
altitude()
現在の高度を取得します。
- returns {number}
- 現在の高度値
wait(frame)
指定したフレーム数、行動をしない命令を出します。
- {number} frame
- 行動をしないフレーム数
fuel()
ミサイルの残燃料を取得します。
- returns {number}
- ミサイルの残燃料
direction()
現在ミサイルが向いている方向を取得します。
右水平方向 を 0 とし、逆時計周り方向をプラス+、時計回り方向をマイナス−。
- returns {number}
- 現在ミサイルが向いている方向
scanEnemy(direction, angle, renge)
指定した方向、範囲、距離に敵が入っているか否かを判定します。
範囲の指定方法について、 Sourcer と相違がある点に注意してください。
- {number} direction
- レーダーの方向を度数で指定。向いている方向を0とし、逆時計周り方向をプラス+、時計回り方向をマイナス−。
- {number} angle
- レーダーの範囲・角度。
- {number} renge
- レーダーの距離。省略した場合、距離に関係無く判定される。
- returns {boolean}
- 指定範囲内に敵が入っていた場合 true
Sample
controller.scanEnemy(45, 60, 75);
上向きの場合
下向きの場合
右向きの場合
左向きの場合
speedUp()
速度を上げます。
speedDown()
速度を下げます。
turnRight()
右方向に向きを変えます。
turnLeft()
左方向に向きを変えます。
log(message)
ログを出力します。
- {string} message
- 出力するメッセージ
console.log() も使うことができます。
scanDebug(direction, angle, renge)
指定した方向、範囲、距離の扇形を画面に表示します。
- {number} direction
- 扇形の方向を度数で指定。向いている方向を0とし、上方向がプラス+、下方向がマイナス−。
- {number} angle
- 扇形の範囲・角度。
- {number} renge
- 扇形の距離。省略した場合も適当な数値で埋められます。