Home > CGI > よしのやぎゅどーん

よしのやぎゅどーん

 Perl 5.8 より利用可能になったithreadsの機能をあますところなく(10%ぐらい)使った習作プログラム。(2003-07-19 ページ更新)

よしのやぎゅどーん(from JNethack)

 よしのやぎゅどーんとは、皆様(誰?)ご存知の通り、JNethackに登場する魔法なわけですが、それはさておき、Perlでスレッドプログラミングをしてみようと思い立った私は、Going Up?という記事に出ていたエレベーターのシミュレーターに触発されたのです。

 「よし、このようなシミュレーターを私もつくってみよう」

 そうして完成したのが、コレ。プログラムを開始すると店員が登場。次つぎにお客がやってきて料理を注文します。店員は一つひとつ注文を受け、調理をし、手渡します。こうして全ての客が店を去るまでの店内の殺伐とした風景をテキストベースで味わおうという、まさに画期的なシミュレーターです。

 エレベーターはどこにいったんだ?

仕組み

 店員及び客は各々独立したスレッド上で実現されます。お客の注文はキューにenqueueされ、店員がdequeueします。時々、客の中に「つゆだく」と口走る者がおりますが、気にしないでください。でも別の客が反応する場合があります。同期の練習としてつくったので無駄にcond_signalとか使っています。

スクリプト

 ソースはかなり汚いですが、いつものことなので勘弁してください。文字コードはEUC-JPです。Windows上でお試しになる場合はなんらかの形でShift-JISにしませんと、楽しくありません。いうまでもなくithreadsの利用可能なPerlでないと動きません。

自分の環境では試せないじゃないか!

 そんなあなたに朗報です。可能な限り同じようにRubyに書き換えてみました。Rubyを実行できる環境の方はどうぞ!

やっぱり試せないよ!

 そんなあなたに朗報です。可能な限り同じようにJavaに書き換えてみましたので、こちらで試すことができます。

Java版よしのやぎゅどーん

店員の数:(1-50)
お客の数:(1-200)
開店から注文受けまでの時間:(0-20)
来店間隔:(0-30)
店の広さ:(1-100)
調理時間:(0-10)

 PerlのコードをJavaに置き換えようとしたため、かなり無理が生じています。複数起動のことやリロードを考慮していません。たぶんリロードしても暫くは画面に何もでません。時間が経てばリロードしたときにテキストフォームが現れるでしょう。なお、Queue関連のクラスはhttp://www.masatic.com/のmasaticさんが公開されていたものを使いました。ありがとうございます。

免責

 これらのプログラムを使った結果に作者は責任を負いませんので、あしからず。 プログラム動作中に登場する人物・地名・料理名は(一部)フィクションであり、実在のものとは関係ございやせん。

ページの先頭