これはプログラミングのゲームです!
あなたは JavaScriptのプログラムを書いてエレベーターの動作をプログラミングします。
ゴールは効率的にユーザを各階に運ぶことです。
うまく運ぶとより難しい課題にチャレンジすることができます。
素晴らしいプログラムだけがすべてのレベルにチャレンジ・完了することができるのです。
ゲームビュー下部にコードを書き、 Apply ボタンを押すとそのレベルが開始されます。
ゲーム中の時間の速度は と のボタンによって調整することができます。.
あなたのプログラムにエラーがある場合、 ブラウザ上の開発ツールを用いることでデバッグできます。
最初からやり直したい場合は Reset ボタンを押します。すべてがリセットされるのでバグはなくなりますが、初期状態に戻ります。
もし、 Sublime Textのようなエディタを使いたいのでしたら、コードをそのエディタで編集してコードを貼り付けてください。
画面下部のプログラムは自動的にローカルストレージに保存されます。このため、誤ってブラウザを閉じても消えることはありません。
プログラムは init と updateという2つの関数を含む必要があります。
{
init: function(elevators, floors) {
// elevators、floorはarray型です
},
update: function(dt, elevators, floors) {
// elevators、floorはarray型です
// dtは最後にupdate関数を呼び出してから、この関数が呼ばれるまでのゲーム内の秒数です。
}
}
この2つの関数はゲーム中に自動的に呼び出されます。
init はゲームの開始時に、update はゲーム中に繰り返し呼ばれる関数です。
一般的に、多くのコードは initにイベントリスナーとロジックが書かれます。
elevator.goToFloor(1);
if(elevator.currentFloor() > 2) { ... }
イベントをListenすることで、フロア到着時やボタンを押された際にプログラムを実行することができます。
elevator.on("idle", function() { elevator.goToFloor(0); });
elevator.on("floor_button_pressed", function(floorNum) { ... } );
floor.on("up_button_pressed", function() { ... } );
Property | Type | 説明 | 例 |
---|---|---|---|
goToFloor | function | 第一引数に指定されたフロアをキューに入れます。第二引数にtrueを設定するとキューに入ることなくその階に向かいます。そのあと、キューに入っているフロアに向かいます。 |
|
stop | function | 動作キューをクリアし、エレベータをストップします。通常、エレベータをストップすることはありません。この関数は再スケジューリングロジックの実装のために用意されています。この関数が呼ばれたときおそらくエレベータはフロアに停止していないので、乗客は降りることができません。 |
|
currentFloor | function | エレベータのいるフロアを返します |
|
goingUpIndicator | function | Upのインジケータをset/getします。これはフロアで停止した際の乗客の行動に影響します。 |
|
goingDownIndicator | function | Downのインジケータをset/getします。これはフロアで停止した際の乗客の行動に影響します。 |
|
maxPassengerCount | function | 最大乗車人数を取得します |
|
loadFactor | function | エレベータに乗っている人々の重さを得ます。そのエレベータごとに0が空、1がFULLを示します。 |
|
destinationDirection | function | エレベータの今の状態を得ます。 "up", "down" or "stopped"のいずれかです。 | |
destinationQueue | array | そのエレベータの今の行き先キューをgetします。これは設定することが可能です(空にすることも可能です)。変更を即座に反映したい場合、checkDestinationQueue関数を呼ぶ必要があります。 |
|
checkDestinationQueue | function | この関数はdestinationDirectionを手動で編集した場合に呼ぶ必要があります。この関数はdestination queueを参照し、次の宛先を決定します。 |
|
getPressedFloors | function | 現在押されているフロアを配列で取得します。 |
|
Event | Explanation | Example |
---|---|---|
idle | このイベントはエレベータがなんのタスクも持っていないときに発火します。 |
|
floor_button_pressed | 乗客がエレベータ内の行き先フロアボタンを押したときに発火するイベントです。 |
|
passing_floor | エレベータがフロアを通過する直前に発火するイベントです。そのフロアに停止すべきかを判断するのに利用できます。ただし、このイベントはdestination フロアには発火しません。尚、"Direction"は"up"か"down"です。 |
|
stopped_at_floor | フロアに到着した時に発火するイベント。 |
|
Property | Type | Explanation | Example |
---|---|---|---|
floorNum | function | そのフロアの階数を示します。 |
|
Event | Explanation | Example |
---|---|---|
up_button_pressed | フロアで乗客が"up"ボタンを押した際に発火するイベントです。乗客がエレベータに入れなかった場合、再度ボタンは押されます。 |
|
down_button_pressed | フロアで乗客が"down"ボタンを押した際に発火するイベントです。乗客がエレベータに入れなかった場合、再度ボタンは押されます。 |
|