何とか庵日誌

本名荒井が毒にも薬にもならないことを書きつづるところ

「DOWNDOWN」 MSX-C化した

f:id:fukenko:20140911071434p:plain


手慰みに、はるか昔のMSXプログラム「DOWNDOWN」をMSX-Cに移植してみました。
「DOWNDOWN」は徳間書店のプログラムポシェットNo.4に掲載されたゲームプログラム。いわゆる「スキーゲーム」なんですが、オリジナルはたった1行、236文字のBASICからなります。
練習がてらMSX-Cで書いてみたら、結果は↓のとおりになりましたとさ(泣)


#include <stdio.h>
#include <msxalib.h>
#include <msxclib.h>


VOID locate( x, y)
int x,y;
{
printf("\33Y%c%c", y+32, x+32);
}


VOID initscr()
{
ginit();
screen(1); /* SCREEN 1 */
setmem(0xf3b0,1,32); /* WIDTH 32 */
}


main()
{
int a, b, c, d, e;

a = 0;
c = 0;
d = 0;

initscr();
c = d + 8;

do {
vpoke(0x1920 + c, 86); /* ジキ ヒョウジ */

locate( d, 23);
puts("ロロロロ ロロロロ\n"); /* カベ ヒョウジ */

b = gtstck(0);
c = c + (b == 3 && a > 9) - (b == 7 && a > 9); /* ジキ イドウ */

d = d + rnd(7) - 3;
d = d - (d > 13 ) * 3 + (d < 1) * 3; /* カベ ヲ ウゴカス */

e = vpeek(0x1920 + c); /* ショウガイブツ ケンシュツ */
a = a + 1; /* スコア カサン*/
} while (e == 32); /* アタリ ハンテイ */

printf("%d", a); /* スコア ヒョウジ */
}



コンパイルには「MSX-C入門下巻」収録の特製ライブラリ関数が必要ですが、おそらくMSX-C Library収録のglib.hとmsxbios.hでも代用可能です。
その際は冒頭のインクルードファイル宣言のmsxalib.hとmsxclib.hを削除し、かわりにglib.hを加えてください。
オリジナルとの大きな違いは操作性。オリジナルは左右移動に「.」「,」キーを使い、一コマ動くごとに1回キーを押す必要がありますが、このMSX-C版は、カーソルの左右に置き換えてあります。押しっぱなしでも動けるようになった分、難易度は下がってます。技術的に難しいことは何一つやってませんが、MSX-CにはBASICのWIDTH命令に匹敵する関数がないので、ワークエリアに直接数値を書き込んで画面幅を変えているのが、テクニックといやテクニックです。
それとリプレイ機能はありません。ゲームオーバーになるごとにDOSプロンプトに戻ります(汗)