/********************************/ /* アスキーアート */ /* シューティングゲーム */ /* */ /* 敵UFO キャラクター: M */ /* ビーム: $$$ */ /* */ /* プレイヤー キャラクター: A */ /* ビーム: ||| */ /* */ /* キー操作 左右移動: ←,→ */ /* ビーム発射: ↑ */ /* 終了: Esc */ /* */ /* UFOは離れたら戻ってくる */ /********************************/ #include #include #include #include #define XMAX 80 #define YMAX 24 void main( ) { char buf[YMAX][XMAX]; // 文字配列(フィールド) int xM=30,yM=0; // キャラクタM 位置 int dxM=1; // キャラクタM 移動量(左右) int xMb,yMb=YMAX; // キャラクタM ビーム$ 位置 int xA=40,yA=YMAX-1; // キャラクタA 位置 int xAb,yAb=-1; // キャラクタA ビーム| 位置 int i,j; // 文字配列添字 while( 1 ) { system("cls"); // 画面消去 memset(&buf[0][0],' ',XMAX*YMAX); // 文字配列クリア buf[yM][xM]='M'; // M 配置 buf[yA][xA]='A'; // A 配置 if ( yMb1 ) buf[yMb][xMb-1]='$'; if ( xMb=0 ) { buf[yAb][xAb]='|'; // | 配置 if ( xAb>1 ) buf[yAb][xAb-1]='|'; if ( xAb=xAb-1 && xM<=xAb+1 ) // M,| 当り { Beep(784,1000); break; } // 終了 } if ( yA==yMb ) // A,$ { if ( xA>=xMb-1 && xA<=xMb+1 ) // A,$ 当り { Beep(330,1000); break; } // 終了 } if ( abs(yAb-yMb)<=1 ) // |,$ { if ( xAb>=xMb-2 && xAb<=xMb+2 ) // |,$ 当たり { Beep(588,100); yAb=-1; yMb=YMAX; // ビーム消滅 } } if ( xM==0 || xM==79 ) dxM=-dxM; // M 両端で反転 else if ( xM-xA> 15 ) dxM=-1; // M,A 右に離れた else if ( xM-xA<-15 ) dxM= 1; // M,A 左に離れた xM+=dxM; // M 位置更新 if ( yMb=0 ) yAb-=1; // | 1行上へ if ( kbhit( )!=0 ) // キーが押された { j=getch( ); // キー番号 if ( j==27 ) break; // Esc(終了) if ( j== 0 ) j=getch( ); // 特殊キー if ( j==75 ) // ← { xA-=3; // M 3桁左へ if ( xA<0 ) xA=0; // 左端 } else if ( j==77 ) // → { xA+=3; // M 3桁右へ if ( xA>=XMAX ) xA=XMAX-1; // 右端 } if ( j==72 && yAb<0 ) // ↑,|なし { xAb=xA; yAb=yA-1; } // | 発射 } if ( xA==xM && yMb>=YMAX ) // A,M x同位置,$なし { xMb=xM; yMb=1; } // $ 発射 Sleep(50); } }