Elevator Sagaでエレベータのアルゴリズムに挑戦してみる
エレベータのアルゴリズムを作るゲーム
エンジニアな人はエレベータが余りに遅いと「どんなアルゴリズムになってるんだ、俺が書き換えてやりたいわ」なんて思ったりします。(しますよね?)エレベータのアルゴリズムを書いて時間内に一定数輸送するゲームがあったので紹介です。
Elevator Saga
http://play.elevatorsaga.com/
初期のコード
最初は1-3階までの建物で、60秒のうちに15人以上を目的値に移動させるというものです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
{ init: function(elevators, floors) { var elevator = elevators[0]; // Let's use the first elevator // Whenever the elevator is idle (has no more queued destinations) ... elevator.on("idle", function() { // let's go to all the floors (or did we forget one?) elevator.goToFloor(0); elevator.goToFloor(1); }); }, update: function(dt, elevators, floors) { // We normally don't need to do anything here } } |
このコードのまま実行させてみます。すると失敗します。実はこの初期状態のエレベータは1階から2階へ交互に移動するだけのポンコツエレベータです。3階へ行きたい人と、3階で待っている人のキューが捌けずにミッション失敗してしまいます。
というわけでコードを見つつ、次は1階→2階→3階→1階へと移動するエレベータに作り変えてみます。現実のエレベータがこんな動きだと耐えられたもんじゃないですが、とりあえずこれでクリアできるようです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
{ init: function(elevators, floors) { var elevator = elevators[0]; // Let's use the first elevator // Whenever the elevator is idle (has no more queued destinations) ... elevator.on("idle", function() { // let's go to all the floors (or did we forget one?) elevator.goToFloor(0); elevator.goToFloor(1); elevator.goToFloor(2); }); }, update: function(dt, elevators, floors) { // We normally don't need to do anything here } } |
クリアすると次のチャレンジに進めます。
続きは時間見つけて挑戦してみます。