Sourcer

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
扇形の距離。省略した場合も適当な数値で埋められます。