開飛機打飛機
極度簡陋版,做着玩
/20.3.27/
基本描述
- 玩家控制一架飛機,用
表示;*
- 敵機隻有一架,随機位置飛來,用
表示;@
- 子彈能發一顆 ,用
表示;//暫且叫做子彈吧,要不然叫飛彈?感覺叫啥都行|
- 子彈擊中敵機後,子彈和敵機消失,得一分;
- 被敵機撞到後,遊戲結束
- 上下左右由
、W
、S
、A
控制,D
發射子彈;空格
存在缺陷
- 隻有一架飛機,飛完就沒了
- 隻有一顆子彈,打完了再打,之前的就沒了
- 有幾率打不中,飛機和子彈恰好遇到,下一個循環恰好錯過時,miss
C語言源代碼
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
int high, wid; //遊戲場景的高和寬
int plane_h, plane_w; //飛機位置
int bullet_h, bullet_w; //子彈位置
int enemy_h, enemy_w; //敵機位置
int interval; //同個計次來模拟時間間隔
int itv_enemy; //敵機移動的時間間隔
int score; //分數
void Startup(); //遊戲數值初始化
void Show(); //遊戲界面輸出
void UpdateInput(); //與輸入無關的遊戲狀态更新
void UpdateNormal(); //因輸入導緻的遊戲狀态更新
int main()
{
Startup(); //初始化
while(1){ //遊戲循環
Show();
UpdateInput();
UpdateNormal();
}
return 0;
}
void Startup(){
score=0;
high=25; //初始化場景高度
wid=60; //初始化場景寬度
plane_h=15; //初始化飛機豎直坐标
plane_w=10; //初始化飛機水準坐标
bullet_h=-1; //初始化子彈豎直坐标
bullet_w=10; //初始化子彈水準坐标
enemy_h=-1; //初始化敵機豎直坐标
srand(time(NULL));
enemy_w=rand()%wid; //初始化敵機水準坐标
interval=0; //初始化時間間隔計數
itv_enemy=5; //初始化敵機移動時間間隔
}
void Show(){
HideCursor(); //隐藏光标
gotoxy(1,1); //回調光标、重新整理畫面
for(int i=0;i<high;i++){
for(int j=0;j<wid;j++){
if( i==plane_h && j==plane_w ){ //目前位置為飛機位置
printf("*");
}
else if( i==bullet_h && j==bullet_w ){ //目前位置為子彈位置
printf("|");
}
else if( i==enemy_h && j==enemy_w ){ //目前位置為敵機位置
printf("@");
}
else if( i<high && j<wid ){ //目前位置無物,且在邊界内
printf(" ");
}
}
printf("|\n"); //輸出右邊界
}
for(int i=0;i<wid;i++){ //輸出下邊界
printf("-");
}
printf("*\n\n得分:%d",score);
}
void UpdateInput(){
char key; //檢測按下的鍵
if(kbhit()){ //當鍵按下
key=getch(); //擷取鍵值
if(key=='w'||key=='W'){ //當按下w鍵,上移
if(plane_h>0)plane_h--;
}
if(key=='s'||key=='S'){ //當按下s鍵,下移
if(plane_h<high-1)plane_h++;
}
if(key=='a'||key=='A'){ //當按下a鍵,左移
if(plane_w>0)plane_w--;
}
if(key=='d'||key=='D'){ //當按下d鍵,右移
if(plane_w<wid-1)plane_w++;
}
if(key==' '){ //當按下空格鍵,發射子彈
bullet_h=plane_h-1;
bullet_w=plane_w;
}
}
}
void UpdateNormal(){
if(bullet_h>-1&&bullet_h<high){ //子彈未到邊界時,向上移動
bullet_h--;
}
if(enemy_h<high && interval%itv_enemy==0){ //敵機未到下邊界時,向下移動,
/每次移動的時間間隔為itv_enemy
enemy_h++;
}
if(bullet_h==enemy_h && enemy_w==bullet_w){ //子彈打到敵機,兩兩消失
enemy_h=high;
bullet_h=-1;
printf("\a"); //擊中響鈴
score++;
}
if(plane_h==enemy_h && plane_w==enemy_w){ //敵機撞到玩家飛機,遊戲結束
printf("\t遊戲結束!");
exit(0);
}
if(interval<=100){ //時間間隔計次
interval++;
}
else{
interval=0;
}
}
void gotoxy(int x,int y){ //回調光标
COORD pos;
pos.X=x-1;
pos.Y=y-1;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
void HideCursor(){ //隐藏光标函數
CONSOLE_CURSOR_INFO cursor;
cursor.bVisible = FALSE;
cursor.dwSize = sizeof(cursor);
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorInfo(handle, &cursor);
}
參考
- 河海大學童晶老師的課程(做遊戲,學程式設計)