suna8’s blog

還暦を過ぎたジジーの気まぐれ日記

やっぱり趣味のプログラミングは楽しい(Part2)

Part1より

 

イスカンダルのトーフ屋ゲーム

このゲームは月刊アスキー1978年6月号に掲載されたBASICプログラムで、この当時はまだ日本ではマイコンブームにはなりつつありましたが、製品としてパソコンの形をしたものはほとんどなく、翌年の1979年に発表・発売されたNECPC-8001の登場を待たねばなりませんでした。なので、このゲームもオリジナルのマイコンで動かしていたようです。

イスカンダルのトーフ屋ゲームは筆者が1978年に考案し、ASCII誌上で発表したもので,一種の経営戦略シュミレーションゲームです.当時のコンピュータの演算能力は現在からは考えられないくらい貧弱で(当時の筆者のマシンは8ビット6800CPU, クロック1MHz, メモリ4~32Kバイト,HDD, FDD はなく,テープレコーダに300bpsでプログラムを保存していました),アプリケーションと言えば単純な数当てゲームのようなものばかりでしたので,このトーフ屋ゲームは単純な設定とは言え,コンピュータと対戦できるということで大変好評でした.

(プログラムの作者のWebページ=イスカンダルのトーフ屋ゲーム (vivi.dyndns.org)より抜粋引用

上記のような背景もあって、オリジナルのソースプログラムは、私が調べた限りネット上には見つからず、ChatGPTを利用してのJava言語への変換を試すことはできません。そもそもオリジナルはBASIC言語、それも構造化される前の旧仕様であり、当該ソースGOTO文を多用した”スパゲッティプログラム”(失礼)のため、おそらくまともには変換できないだろうとは思います。

唯一手元に残っている『イスカンダルのトーフ屋ゲーム』が掲載されていた月刊アスキー1978年6月号のページの写真

上記の写真は、以前所持していた月刊アスキーの該当ページの写真で、『イスカンダルのトーフ屋ゲーム』がずっと気になっていることが分かる証拠でもあります。不鮮明ですが、ギリギリでBASICのソースコードを確認することが出来ますが、このままではJava言語のような構造化言語に書き換えることは難しい(できないことはない)と思いました。

そこで、前出の作者ページの中にある他言語(他環境)への移植プログラムソースを元ネタにしようと各リンク先を探ってみたところ、かなりのデッドリンクとなっていました。かなり古い情報を掲載していてそのままアップデートされていない状態のようです。

ちなみにそのページの最終更新日を調べてみると、下記のように2015年の12月になっているので、もうすでに8年近く放置されていることが分かります。(結局は、リンク一覧の最新日付と一致するので、最後のリンクの追加日を見ればよかったという話になるわけだが……)

ブラウザの開発ツール上でJavaScriptを利用してそのページの最終更新日を知ることが出来るようだ

結局、デッドリンクになっていない貴重なリンク先を巡って、使えそうなソースコードを探してみることにしました。こう言ったら怒られそうですが「帯に短したすきに長し」状態で、なかなか適当なソースコードが見つかりませんでした。

その中で、下記の2つが使えそうでした。

1.Shozo Hatta氏Ruby
2.たけおか氏Prolog

いずれも私自身が経験したことのない言語だったので、ソースコードを見てもピンと来ませんでした。でも、コメントを参考にしたりコードを眺めてみるとそれぞれ下記の仕様のようです。

1.オリジナルの外部仕様からリバースした形で元の仕様に近い移植
2.オリジナルからの移植ではなく別の人が移植したperl版から移植したもの

オリジナルの再現性は1のほうが高いようでしたが、2のほうが仕様としてはかなり拡張されており、さらには日本語化もされルール説明も付加されるなど親切設計になっていました。

横道に逸れますが、後学のためにRuby言語とProlog言語の特徴を調べてみました。

Ruby

Rubyは日本人の技術者が開発した日本製のプログラミング言語であり、Webアプリケーションの開発に用いられることが多い言語です。データやそこに作用する手続きの集合体をオブジェクトとして表現するオブジェクト指向言語で、シンプルに短いコードで記述できるという特徴があります。

Ruby / ルビーとはどのような開発言語か。Rubyで出来ること・事例を紹介 | 株式会社GeNEE より

Prolog

Prologは名称の由来の通り、論理を使ってプログラミングをする言語です。少し難しい言い回しですが、「Prologは数理論理学に基づいた“論理型言語 ”である」と表現できるでしょう。Prologは、論理的思考が得意なのです。また、ALGOL、BASIC、C言語などに代表される手続き型言語とは異なり、Prologは宣言型言語です。 Prologでは、対象の性質を宣言することでプログラムを構成していきます。

Prologとは?プログラミング言語を初心者にもわかりやすく解説 | プログラミング入門 (programming-world.net) より

オブジェクト指向言語であるJavaに移植するには、Rubyのほうがやりやすそうですが果たしてどうでしょうか。いずれにしても、使えそうなコードはこれぐらいなので、さっそくChatGPTに変換を頼むことにしました。さて。。。

 
Part3へつづく)