~索敵アルゴリズム篇~
Kotaro Sakai
2014.11.05
エフェクト処理などの細かい演出を導入しました。また、前回のコードレビュー結果を受けて、ソースコードの修正(リファクタリング)を行いました。
今回行ったソースコードの修正(リファクタリング)の内容について、次のページから簡単に説明していきます。
●定数
あるプログラムにおいて、その開始から終了まで内容が一定であることを保証する変数。
var PIECE = 32;
var SQUARE = 32;
var Player = Class.create(Sprite, {
initialize: function(x, y) {
Sprite.call(this, PIECE, PIECE);
this.x = x * SQUARE;
this.y = y * SQUARE;
}
});
●連想配列①(宣言)
添字にスカラー数値以外のデータ型(文字列型等)が使用できる配列。
var AROUND = {
TOP: { X: 0, Y:-32 },
LEFT: { X:-32, Y: 0 },
RIGHT: { X: 32, Y: 0 },
BOTTOM: { X: 0, Y: 32 }
};
●連想配列②(参照)
function SetMoveScope(rx, ry, steps, direction) {
var x = rx + AROUND[direction].X;
var y = ry + AROUND[direction].Y;
}
●再帰呼出し
ある手続き中で再びその手続き自身を呼び出すこと。
// 移動範囲を伸ばす(再帰呼び出し)
if (direction != "BOTTOM") arguments.callee(x, y, steps - 1, "TOP");
if (direction != "RIGHT") arguments.callee(x, y, steps - 1, "LEFT");
if (direction != "LEFT") arguments.callee(x, y, steps - 1, "RIGHT");
if (direction != "TOP") arguments.callee(x, y, steps - 1, "BOTTOM");
●前回までのアルゴリズム
そもそも索敵アルゴリズムとは何かについて考えた。
その結果、索敵アルゴリズムは以下の2パターンに大別できるという結論に至った。
●猪突猛進型(フロア型)
「アークザラッドシリーズ」等で顕著に見られる
●虎視眈々型(フィールド型)
「ファイアーエムブレムシリーズ」等で顕著に見られる
function ScoutingSearch() {
for (var i = 0; i < MOVE_SCOPE.length; i++) {
for (var direction in AROUND) {
// 移動範囲+攻撃範囲
var x = MOVE_SCOPE[i].x + AROUND[direction].X;
var y = MOVE_SCOPE[i].y + AROUND[direction].Y;
if (x == player.x && y == player.y) {
return { X:MOVE_SCOPE[i].x, Y:MOVE_SCOPE[i].y };
}
}
}
return null;
}
●虎視眈々型(フィールド型)の実装コード
●猪突猛進型(フロア型)の実装コード
●cocos2d-x
●Unity
●Rubyを使ったゲーム開発