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


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

快適な移動を支援する。

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

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

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

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

 

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

プログラミング言語

JavaScriptで遊べます。

どんな感じ?

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

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

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

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

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

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

 

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

次のページでブラウザさえあれば、すぐ動かせて遊べますよ☺
Elevator Saga - the elevator programming game
https://play.elevatorsaga.com/

登場するオブジェクト

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

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

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

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

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

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


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

初めのソース

初期化(init)のところを注目します。
プログラムの動き初めに実行される内容です。

ここのエレベータオブジェクトに、行き先を登録しておけば、起動後はその動作が行われます。
今回は以下のように フロア先を設定することでその階に移動します。
(イギリスでは入り口をエントランスと認識しており、
   日本でいう2階から、1階が始まるようになってます)

最初の例は、行き先が完了した時(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




コメントを残す

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