エレベータープログラミングゲームで楽しく学ぶ


エレベータープログラミングゲーム   Elevator Saga

快適な移動を支援する。

普段エレベータの動きに不満はないですか?

自分なら改善できるのにと思っているなら、
自分で考えてみましょう。

ハッカーのゲーム Hacknet がSteamにありますがこれは
エレベーターの動きをプログラミングするゲームです。

思ってたものより動きはシンプルですが
動かそうとすると相当複雑でした。

 

※ Saga とは英雄とか、歴史的神話の登場人物みたいなニュアンスです。

プログラミング言語

JavaScriptで遊べます。

どんな感じ?

全18ラウンド+エンドレスモード

stage 6,13あたりが乗り越えられればいけるかも。

ランダム要素が強いので、 10回ぐらいやれば1回ぐらいクリアできることもあります。

Web上でコードを書き、アニメーション付きで表示されます。
コードは自動でセーブされ、ローカルストレージに保存されます。色分け機能もついてます。

シミュレーションスピードも簡単に変えることができます。

プログラミングに相当慣れた中学生ぐらいでないと全クリアは難しいかもしれません。
ただ、4,5面ぐらいまでは、普通にクリアして楽しめると思います。

 

ステージは、制限時間タイプ、動作量制限タイプ、待ち時間制限タイプなどがあります。

登場するオブジェクト

ステージごとに、(大きさも変わる)エレベータとフロアのオブジェクトがあり、
それぞれ、特定のイベント(ボタンが押された、止まった)が来た時の動作をプログラミングしていきます。

人はランダムで発生し、重さがあるようです。
人はフロア0 (イギリス方式?)に、降りるときよく向かいます。

フィールド:レッツプレイ

Elevator Saga - the elevator programming game
https://play.elevatorsaga.com/

APIマニュアルや、ソース(GitHub), wikiなども完備されてます。

Web検索すると解決サンプルを上げている人もいます。


後ろのステージを見たい場合
https://play.elevatorsaga.com/#challenge=8

初めのソース

初期化(init)のところのエレベータに、行き先を登録します。
最初の例は、行き先が完了した時(idleイベント)、実行するプログラムです。

この例では、2フロアに行けません。そうするには・・・?

初期の改善のヒント

1.エレベータが複数台になったらどうすればいいでしょうか?
elevatorsが配列なので、ループすれば各オブジェクトが取れます。 floorsも同様です。
初期サンプルのように、それぞれのエレベータにイベントを登録します。


2.ボタンが押されたら直ちに直行するには?

elevator と floorの ボタン押下イベントを活用します。

 

3.上手くいったならば、人がいないところに留まってもしょうがないので、スキップしたいですよね。
これが結構大変だと思います。

stop イベントを活用します。

 

注意点

  • 満員を完全に検知することはできません(空いていても、満員かどうかわかりません。重さは検知できる。男、女性、子供がいる)
  • ドアが閉じるイベントはありません。
  • エレベータが動き出してから、乗った人がボタン押すこともあります。
  • 一度押され、ONになったボタンは、次の人が押すことはありません。
  • (行き先をクリアすると、elevatorのアイドルイベントが割り込むことがあります)

後忘れた、、、
(意外とできないことがあって、相当細かい方針を変えた・・)

※Traffic Confusionとかでないかな?

ソース

大方針

エレベータの動きはラウンド方式で、いって帰ってを繰り返します。
そのため、UP/DOWNを意識します。
行き先の保持は1floorだけで、1フロア移動するごとに計算しなおしています。

後細かくは、ボタンが押されたら、都度反応するようにしています。

このプログラムは、stage 6,7,13あたりをまれ(1/10回?)にクリアします。

 

L. 200行ちょっとになるとは思っていたけれども、400行ほどになってしまいました。

 

 

 

 

Delicious にシェア
Digg にシェア
reddit にシェア
LinkedIn にシェア
LINEで送る
email this
Pocket




コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です