スネーク?
ヘビのキャラクタの体がだんだん長くなっていき、自分自身の体に当ってしまわないようにするスネークと言うゲームがあります。そのまま作りたかったのですが、体の長さ分だけ全部座標を覚えておかないといけないのでプログラムが面倒!と言う事で、頭が進んでいった途中にずっと体が残っていくように、大胆に仕様を変えてみました(^^)。故に名前もスネークではなくスネーク?と疑問形になっています。
ゲームは、頭が'@'で体が'O'です。頭は今の方向にどんどん進んでいき、カーソルで方向を変えることが出来ます。頭が体に突っ込んでしまったらゲームオーバーです。
プログラム
/********************************************************/
/* アプリケーションループ */
/********************************************************/
while( 1 ) {
/********************************************************/
/* 変数初期化 */
/********************************************************/
/* 初期位置 */
x = 8;
y = 5;
/* 方向 */
a = 1;
b = 0;
/********************************************************/
/* スタート画面 */
/********************************************************/
/* 画面表示 */
cls();
locate( 3, 3 );
printstr( "GAME START" );
locate( 2, 8 );
printstr( "PUSH ANY KEY" );
/* キークリア待ち */
while( ( pad() & 0xff ) );
/* キー待ち */
while( !( pad() & 0xff ) );
cls();
/********************************************************/
/* メインループ */
/********************************************************/
while( 1 ) {
/* パッド入力 */
p = pad();
if( p & PAD_RI ) { a = 1; b = 0; }
if( p & PAD_LF ) { a = -1; b = 0; }
if( p & PAD_UP ) { a = 0; b = -1; }
if( p & PAD_DN ) { a = 0; b = 1; }
/* 前進 */
if( x + a >= 0 && x + a <= 15 && y + b >= 0 && y + b <= 10 ) {
locate( x, y );
printstr( "O" ); /* 体 */
x += a;
y += b;
/* 当たり判定 */
if( scan( x, y ) != 0 )
break;
locate( x, y );
printstr( "@" ); /* 頭 */
}
/* ウェイト */
wait( 100 );
}
/********************************************************/
/* ゲームオーバー */
/********************************************************/
/* 画面表示 */
cls();
locate( 4, 3 );
printstr( "GAMEOVER" );
locate( 2, 8 );
printstr( "PUSH ANY KEY" );
/* キークリア待ち */
while( ( pad() & 0xff ) );
/* キー待ち */
while( !( pad() & 0xff ) );
}
ダウンロード
改良案
何と言っても、体がずっと伸びていく一方と言うのは問題です。現状は画面埋め尽くしゲームになってしまっていますし。という事で、体を引きずっていけるようにするのが第一でしょう。
画面上にアイテムを置いて取るとポイントアップとか、障害物を置くなども本来のスネークの仕様なのです。
時間が経ったりアイテムを取ったら体が長くなっていく、というのも本来の仕様なのです。