バウンド
跳ね回るボールをどれだけ長く避けていられるかというゲーム。
遊び方は、画面を跳ねているボールに当らないように自分(\)をひたすらカーソルキーで避けまくります。
プログラム
/********************************************************/
/* アプリケーションループ */
/********************************************************/
while( 1 ) {
/********************************************************/
/* 変数初期化 */
/********************************************************/
/* キャラクタの位置 */
x = 8;
y = 5;
/* ボールの位置 */
a = 2;
b = 1;
/* ボールの方向 */
c = 1;
d = 1;
/* スコア */
s = 0;
/********************************************************/
/* スタート画面 */
/********************************************************/
/* 画面表示 */
cls();
locate( 3, 3 );
printstr( "GAME START" );
locate( 2, 8 );
printstr( "PUSH ANY KEY" );
/* キークリア待ち */
while( ( pad() & 0xff ) );
/* キー待ち */
while( !( pad() & 0xff ) );
/********************************************************/
/* メインループ */
/********************************************************/
while( 1 ) {
/* キャラクタの位置 */
p = pad();
if( ( p & PAD_RI ) && x < 15 )
x++;
if( ( p & PAD_LF ) && x > 0 )
x--;
if( ( p & PAD_UP ) && y > 1 )
y--;
if( ( p & PAD_DN ) && y < 10 )
y++;
/* ボールの位置 */
a += c;
b += d;
if( a == 0 ) c = 1;
if( a == 15 ) c = -1;
if( b == 1 ) d = 1;
if( b == 10 ) d = -1;
/* 画面表示 */
cls();
locate( 0, 0 );
siprintf( "SCORE %d", s );
locate( x, y );
printstr( "\\" );
locate( a, b );
printstr( "O" );
/* 当たり判定 */
if( x == a && y == b )
break;
/* スコアアップ */
s++;
/* ウェイト */
wait( 100 );
}
/********************************************************/
/* ゲームオーバー */
/********************************************************/
/* 画面表示 */
cls();
locate( 4, 3 );
printstr( "GAMEOVER" );
locate( 2, 5 );
siprintf( "SCORE %d", s );
locate( 2, 8 );
printstr( "PUSH ANY KEY" );
/* キークリア待ち */
while( ( pad() & 0xff ) );
/* キー待ち */
while( !( pad() & 0xff ) );
}
ダウンロード
改造案
画面中を跳ね回るボールだけれど、実は通るルートが決まっていて安全地帯が存在します。安全地帯があるとゲームが面白くありませんので潰したいのですが、どうすればいいでしょうか。
時間が経つとともにボールの速度が上がるようにしたら、よりゲームらしくなるでしょう。
ボールが一つだと避けるのが簡単なので、同時に複数のボールが跳ねるようにしたら難易度を上げることが出来ます。