KEIS BLOGは株式会社ケイズ・ソフトウェアが運営しています。

KEIS BLOG

攻略 Elevator Saga =基本編=

LINEで送る
[`evernote` not found]
Pocket

misawa01

AngularJSの連載もひと区切りついたので、今回はいつもとは志向を変えて、「Elevator Saga」というゲームを攻略していこうと思います。
全2回で、基本編と応用編に分けて解説していきます。
基本編では、ゲームの概要と基本操作の説明と、最後に初歩的なロジックを掲載します。

Elevator Saga 関連リンク

Elevator Saga
http://play.elevatorsaga.com/

Help and API document
http://play.elevatorsaga.com/documentation.html

Source code
https://github.com/magwo/elevatorsaga

Elevator Sagaとは
平たく言うとエレベータのシミュレーションゲームです。

エレベータを制御して各ステージ(Challenge)をクリアしていくゲームです。
各ステージ毎に設定された条件をみたす事でステージクリアです。
ステージは全部で19ステージあり、ステージが進むに連れて、階数が増えたり、エレベータが増えたりと、
どんどん難易度が上がっていきます。

最大の特徴は・・・。
ゲーム自体HTML5/JavaScriptで作られているのですが、
エレベータのアルゴリズムを「JavaScript」で書くことです。

基本操作
misawa02

① ステージクリアの条件が確認出来ます。
② ゲーム速度(1倍~55倍)が調整できます。
③ ゲームを開始します。
④ コード貼り付けエリア、SublimeTextなどでコーディングして貼り付けましょう。
⑤ 貼り付けたコードを適用します。これを押し忘れると、前のロジックで動いてしまいますので注意してください。

APIについて

Elevator objectとFloor objectが利用出来ます。
Elevator objectは各エレベータの情報取得とコントロール、イベントハンドリングが行え、Floor objectは各階の情報取得とイベントハンドリングが行えます。
詳しくはドキュメントを参照してください。

アルゴリズムの実装方法

コードにはinitとupdateと言う2つの関数を宣言する必要があります。

{
    init: function(elevators, floors) {
        // Do stuff with the elevators and floors, which are both arrays of objects
    },
    update: function(dt, elevators, floors) {
        // Do more stuff with the elevators and floors
        // dt is the number of game seconds that passed since the last time update was called
    }
}

これらの関数はゲーム実行時に呼び出されます。
initはゲーム開始時に、updateはゲーム中に呼び出されます。
通常はinitにElevatorとFloorを組み合わせ、イベントリスナとロジックを設定します。

コードサンプル

エレベータのコントロール方法

elevator.goToFloor(1);

他のタスク完了後、エレベータを1階に移動させます。
エレベーターが既にその階に行くように待機している場合には効果がありません。

if(elevator.currentFloor() > 2) { ... }

エレベータが現在いる階数が取得されます。
これは丸められた数字であり、必ずしもエレベータが停止状態にあるわけではありません。

イベントハンドリング方法

各階に止まるときやボタンが押されたときのイベントをキャッチ出来ます。

elevator.on("idle", function() { elevator.goToFloor(1); });

上記の例では、エレベータがアイドル状態のとき1階に移動するように指示しています。

elevator.on("floor_button_pressed", function(floorNum) { ... } );

エレベータ内のフロアボタンが押された時発生するイベントで、引数によりどの階が押されたかを知ることが出来ます。

floor.on("up_button_pressed", function() { ... } );

乗客が待っている階で上ボタンが押されたことを知ることが出来ます。
どの階で押されたかが知りたい場合は、floorNumプロパティを使います。

サンプル
misawa03

最低限の機能をのみを実装したロジックでChallenge3までクリアできます。

次回は「攻略 Elevator Saga =応用編=」です。

【関連記事】
Google App Engine 第一回
Google App Engine 第二回
Javaのライブラリを手軽にテストしたい!! Groovy入門 第1回
Google App Engine 第三回
Google App Engine 第四回
Google App Engine 第五回
Google App Engine 第六回
Google App Engine 第七回
Google App Engine 第八回
Google App Engine 第九回
Google App Engine 第十回
Google App Engine 第十一回
Google App Engine 第十二回
AngularJS入門01
AngularJS入門02
AngularJS入門03
AngularJS入門04
AngularJS入門05
AngularJS入門06
AngularJS入門07
AngularJS入門08
AngularJS入門09

LINEで送る
[`evernote` not found]
Pocket