秀和システムトレーディング「プロのテクニック大公開!C言語ゲームプログラミング」 のプログラム(98用)をMSX上で作ろうという話です。MSXでC言語やってみたいけど、 何作っていいか分かんない方、どうですか?
◎はじめに
MSX−Cは、ANSI−C規格に沿ってなく、K&R書法で、かつ、いろいろと 制限がキツイです。どうしてもC言語のプログラムを、「MSXで作って動かしたい」 方のみ、先にお進みください(おいおい
◎本の入手
大分前の本で、残念ながら新品で入手不可のようです。中古で探してください。 また、掲載プログラムリストが、グチャってる部分があるので、なるべく (読込み可能な)付録ディスクつきのものがいいでしょう。
◎開発環境
kalはMSX−CのVer1.1で作りました。Ver1.2があれば、 Ver1.2でもOKかな。また、「MSX−C入門上下」、「MSX−Cの」 マニュアルがあると尚可です。てか、必要かも。
◎移植するゲーム:ブラックジャック
3章のトランプゲームから、ブラックジャックを選びました。自分の好みに 合わせて、他のプログラムでもOKです。
◎キャラクタ指向:トランプクラス、トランプの山クラス
キャラクタ指向とは、オブジェクト指向のことです。具体的には、構造体の中に データと動作(関数へのポインタ)を入れて、動作関数の実体と初期化関数(と終了関数) を用意します。

トランプクラスは、1枚のカードについて、データと動作を作り込みます。 具体的には、トランプの種類、数値、表示座標、裏か表か(ここまでがデータ部)、 消去、描画、反転、移動(ここまで動作部)、そして、初期化関数です。

トランプの山クラスは、山札について、データと動作を作り込みます。 山札、捨て札、山札の表示座標、山札残数(ここまでデータ部)、 カードを切る、1枚配る、1枚戻す、1枚捨てる(ここまで動作部)、そして、 初期化関数、終了関数(メモリの解放)です。

*山札、捨て札は、トランプクラス(へのポインタ)の配列(52個)にします。 ジョーカーは作りません。

これをMSX−Cで作り込みます。最初はコンパイルエラーの山ですが、 1つずつエラーを消していき、何とかコンパイルを通しましょう。 コンパイルが通ったら、簡単なプログラムを作って、動作確認します。
◎ブラックジャック:ルール通りに作り込み
トランプクラス、トランプの山クラスを利用して、ブラックジャックのルール通りに 本体を作り込みます。これらのクラスを利用すれば、他のトランプゲームも、 作れるようになります。トランプのルールブックが手元にあると便利です。

↓kalが移植したブラックジャック
非常にシンプルな画面です。これでも結構苦戦しました。都合で10がTに なってます。[]をカードの裏と山札の表示に使ってます。COMのアルゴリズムも シンプルですが、何故だか強いです。
◎感想
MSX−Cの仕様面で、かなり悪戦苦闘、四苦八苦でしたが、何とか移植する ことができました。カンタンなゲームですが、自分で打ち込んだ分、おもろいです。

さて、実行ファイルもソースファイルも公開できないんです。ごめんなさい!! 実行ファイルはVer1.1が原因です。公開していいのか分かりません。 (ちなみにVer1.2なら公開できるそうです。Mマガ永3参照) ソースは大部分、元の本から持ってきているので、公開はマズい気がします。

これは皆さんから、作る楽しみを奪うなということでしょうか(おいおい) kalは、今度はポーカー作りたい。
◎補足:MSX−Cに関する注意
インデントを多用するとソースが見づらい!!BASIC風にするといいかも。
変数名、関数名はなるべく短い方がいいかも。長すぎるとエラーになりそうな気 がする。
enum型が使えません。
関数へのポインタによる関数呼び出しは、(*a)();のように。a();では×
関数の引数は、宣言時には指定しない。実体を作るときにK&R書法で型指定。
画面表示で困ったら、とりあえずエスケープシーケンス(MSX−C入門上参照)
キー入力は自作の方がいいかも。getchar()はちょっとマズイ。
乱数生成、キー入力判定、BIOSコール、MSX−C入門下にライブラリあり。
クラスはライブラリ(RELファイル)として作る。
MSX−C入門下にライブラリ作成方法、コンパイル方法あり。
コンパイルが非常に遅い。「え、ハングったの?」ってくらい遅い。ガマンする。
関数が長すぎると、最適化でオーバーフローしてしまう。関数は短めに。
◎補足2:神経衰弱、ポーカー
↓3章より神経衰弱の移植
キー入力で不具合があるんだけど、動くからもういいや(おいおい

↓自作したポーカー
1回カード交換で、役を競う仕様です。役判定でちょっと苦労しました。 COMのアルゴリズムはちょー手抜き(スリーカーズよりいい役では交換しない) です。

ブラックジャック、神経衰弱、ポーカーでトランプクラス、トランプの山クラスを 使い回しました。この使い回しが、手間を省いたというか、得したというか、 そんな感じで楽しかったです。