路線バス運転シミュレータ開発記

OMSIを使って路線バスの運転シミュレータを製作しています。備忘録的にゆるーく書いていきたいと思いますので、お付き合いいただければ幸いです。

開発の契機とこれまでの経緯(その2)

さて、高校に入り部活でVisualBasicを使うことができ、さらにプログラミングを勉強したのですがこれが大変でした。私が中学生のときに勉強していたN88BASICはGOTOなどを使わなければ基本、プログラムの先頭からか末尾まで順番に実行していくので、その流れを意識してプログラムを書いていけば良いのですが、VisualBasicはCと同じ構造化プログラミングであり、さらにWindowsのプログラムはユーザーの操作によってイベントが発生してOS側からプロシージャが呼び出されるといういわゆるイベントドリブンプログラミングだったので、N88BASICとあまりに勝手が違いすぎてなかなかこの壁を乗り越えるのが大変でした。今までやりたいことをただ順番に並べていけば良かったものが、実行されてユーザーが操作するまでどの処理が動くかわからないというプログラムを書かないといけないというのは、なかなか慣れるのに苦労しました。

確か1998年頃だったと思いますが、ようやく念願の新しいパソコンが手に入ったのでVisual C++を学割で購入してC/C++の勉強をすることにしました。早速、VisualBasicでやったときのようにWindowsで動くEXEファイルを作って実行するぞと意気込んだのはいいのですが、当時まだCもC++も知らない状態でいきなりやろうとしたので当然挫折しました。VisualC++入門のような本を買ってはみたものの、CやC++はすでに知っているという前提でMFCの解説をしているので何が何だかちんぷんかんぷんでした。そもそも勉強方法すらよくわからず、この頃は手探りで進めてたような感じです。

また、VisualC++にはVisualBasicのようにGUIをデザインするツールがあったので、最初それを見たときはこれでVisualBasic的にコントロールを配置してプログラムが作れるだろうと高を括っていたのですが、これがVisualC++だと勝手が違い、ダイアログ一つ出すだけでも色々コードを付け加えたりしないといけないことがわかり寒気がしたのを覚えています。

そこで、ネットにあるC/C++入門みたいなページを見ながらコンソールアプリをつくる練習からはじめてみました。ただ、コンソールアプリができても一般のWindowsアプリケーションはつくれないので、今度はWindows APIの勉強をすることにしました。MFCではなくWindows APIの勉強をしようと考えたのは、DirectXというものを使えば3Dグラフィックを使ったプログラムが書けることを知っていたからです。当時のDirectXが公式にサポートしていたのはWindows APIを使用したプログラムのみで、荒業的にVisualBasicから呼び出して使うような方法を紹介している書籍もありましたが、SDKに付属しているサンプルコードも一部を除いてほとんどがWindows APIでゴリゴリ書かれていました。

ちなみに当時ちょうどDirectXのバージョンが6から7になるときで、SDK日経ソフトウェアの付録CD-ROMに収録されていて関連記事があったので勉強しようと思い、購入したのですがこれがWindows APIのプログラミングよりわけがわからない代物で(COMとか3Dの座標変換に使用する数学などが理解不能)、当時は数少ないDirectXの書籍を何冊か買って勉強して、ようやく画面でティーポットが回転したときは感動しました。

あとはRMモードというのを使えば、xファイルというモデルデータを読み込んで表示できるということを知っていたので、地形のデータとバスのデータをメタセコイアという3Dモデリングソフトウェアで作成してプログラムで読み込ませて動かしたり、移動速度に応じて速度計の針を動かしたりエンジン音を変えるというところまでは高校を卒業する前に達成できました。

(つづく)