Elevator Saga とは、プログラミングのゲームです! JavaScript で書いたプログラムでエレベータを動かしてみましょう。
人々を適切な方法で目的地まで運ぶことがこのゲームの目標です。 より良いプログラムを書くことで、より難度の高い目標に挑戦することができます。 最良のプログラムを実装して、すべての目標を達成してみましょう。
ゲーム画面の下にあるエディタにコードを入力し、適用ボタンを押すことで目標に挑戦します。 右上にあるやを押すことで速さを調節できます。
プログラムにエラーが含まれる場合は、開発者ツールを用いてデバッグを試みましょう。 コードを初めからやり直したいときは、リセットボタンを押してみましょう。動作する単純な実装に巻き戻ります。 Sublime Textなどの使い慣れたテキストエディタがある場合は、そちらで編集してゲームのエディタに貼り付けるのも OK です。 書いたコードはローカルストレージに自動保存されます。間違ってブラウザを閉じちゃっても心配しないで!
コードは少なくとも 2 つの関数(init と update)を含むオブジェクトである必要があります。
{
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.goToFloor(1);
if(elevator.currentFloor() > 2) { ... }
プロパティ名 | 種類 | 説明 | 例 |
---|---|---|---|
goToFloor | メソッド | 指定した階をキューに積みます。第2引数に true を与えたときは、エレベータはその階まで向かってから、キューに積まれた階へと向かいます。 |
|
stop | メソッド | 目的地キューを空にして、エレベータを停止させます。通常はエレベータを停止させる必要はなく、動作中のリスケジューリング処理を伴う高度な解法のために用いるべきです。エレベータがどこかの階で停止しなかった場合は、乗客は降りることができません。 |
|
currentFloor | メソッド | エレベータが現在いる階を取得します。 |
|
goingUpIndicator | メソッド | 上昇インジケータの状態を取得、あるいは設定します。待機している乗客の振る舞いが変化します。 |
|
goingDownIndicator | メソッド | 下降インジケータの状態を取得、あるいは設定します。待機している乗客の振る舞いが変化します。 |
|
maxPassengerCount | メソッド | 同時に入れる最大の乗客数を取得します。 |
|
loadFactor | メソッド | エレベータの積載量指数を取得します。0 ならば空、1 ならば満員を表します。乗客によって異なる体重によって変化し、正確な測定値ではありません。 |
|
destinationDirection | メソッド | エレベータの進行方向を取得します。"up", "down", "stopped" のいずれかの値をとります。 | |
destinationQueue | 配列 | 現在の目的地キュー、すなわちエレベータが今後向かう予定の階を順に並べたものです。編集することもできますが、すぐに反映させるためには checkDestinationQueue() を呼び出す必要があります。 |
|
checkDestinationQueue | メソッド | 新しい目的地を反映させるために目的地キューを確認します。明示的に目的地キューを編集した場合にのみ使うようにしましょう。 |
|
getPressedFloors | メソッド | 現在ボタンが押されている階を配列で取得します。 |
|
イベント名 | 説明 | 例 |
---|---|---|
idle | エレベータのすべてのタスクが完了し、なにも動作していないときに発火します。 |
|
floor_button_pressed | エレベータ内の乗客がボタンを押したときに発火します。 |
|
passing_floor | エレベータが階を通過する直前に発火します。エレベータをぴったりその階に停止させるタイミングで発火します。目的階のときには発火しません。コールバックの第2引数は "up" か "down" の値を取ります。 |
|
stopped_at_floor | エレベータが階に到着したときに発火します。 |
|
プロパティ名 | 種類 | 説明 | 例 |
---|---|---|---|
floorNum | メソッド | 階数を取得します。 |
|
イベント名 | 説明 | 例 |
---|---|---|
up_button_pressed | その階で誰かが ↑ ボタンを押したときに発火します。乗客はエレベータに乗り損ねたときにもう一度ボタンを押します。 |
|
down_button_pressed | その階で誰かが ↓ ボタンを押したときに発火します。乗客はエレベータに乗り損ねたときにもう一度ボタンを押します。 |
|