C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單飛機(jī)大戰(zhàn)
本文實(shí)例為大家分享了C語(yǔ)言實(shí)現(xiàn)飛機(jī)大戰(zhàn)的具體代碼,供大家參考,具體內(nèi)容如下
定義四個(gè)函數(shù)實(shí)現(xiàn)飛機(jī)大戰(zhàn)
#include<stdio.h>
#include<windows.h>
#include<conio.h>
//定義全局變量
int high,width; //定義邊界
int position_x,position_y; //飛機(jī)位置
int bullet_x,bullet_y; //子彈位置
int enemy_x,enemy_y;
int score;
int flag; //飛機(jī)狀態(tài)
void gotoxy(int x,int y) //光標(biāo)移動(dòng)到(x,y)位置
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(handle,pos);
}
void HideCursor() // 用于隱藏光標(biāo)
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0}; // 第二個(gè)值為0表示隱藏光標(biāo)
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void startup() //數(shù)據(jù)初始化
{
high=18;
width=26;
position_x=high-3;
position_y=width/2;
bullet_x=0;
bullet_y=position_y;
enemy_x=0;
enemy_y=position_y;
score=0;
flag=0; //飛機(jī)完好
HideCursor();
}
void show() //顯示界面
{
int i,j;
for(i=0;i<high;i++)
{
for(j=0;j<width;j++)
{
if(flag)
break;
else if((i==position_x)&&(j==position_y)) //飛機(jī)坐標(biāo)
printf("*");
else if((i==enemy_x)&&(j==enemy_y)) //敵機(jī)坐標(biāo)
printf("*");
else if((i==bullet_x)&&(j==bullet_y)) //子彈坐標(biāo)
printf("|");
else if ((j==width-1)||(i==high-1)||(j==0)||(i==0)) //打印邊界
printf("#");
else
printf(" ");
}
printf("\n");
}
printf("\n");
if((position_x==enemy_x)&&(position_y==enemy_y))
{
flag=1; //飛機(jī)撞毀 游戲結(jié)束
printf("得分: %d\n",score);
printf("游戲結(jié)束");
}
else
printf("得分: %d\n",score);
}
void withoutInpute() //與用戶輸入無(wú)關(guān)
{
if(bullet_x>0) //子彈上升效果
bullet_x--;
if((bullet_x==enemy_x)&&(bullet_y==enemy_y)) //子彈命中敵機(jī)
{
score++;
bullet_x=-1;
enemy_x=1;
enemy_y=2+rand()%width-2;
}
static int speed;
if(speed<30) //減慢敵機(jī)速度,不影響飛機(jī)和子彈速度
speed++;
if(speed==30)
{
if(enemy_x<high)
enemy_x++;
else
{
enemy_x=0;
enemy_y=2+rand()%width-2;
}
speed=0;
}
}
void withInpute() //與用戶輸入有關(guān)
{
char input;
if(kbhit()) //控制飛機(jī)方向
{
input=getch();
if((input=='w')&&position_x>1)
position_x--;
if((input=='s')&&position_x<high-2)
position_x++;
if((input=='a')&&position_y>1)
position_y--;
if((input=='d')&&position_y<width-2)
position_y++;
if(input==' ')
{
bullet_x=position_x-1;
bullet_y=position_y;
}
}
}
int main()
{
system("color 2f");
startup(); // 數(shù)據(jù)初始化
while(1) // 游戲循環(huán)執(zhí)行
{
gotoxy(0,0);
show(); // 顯示畫面
withoutInpute(); // 與用戶輸入無(wú)關(guān)的更新
withInpute(); // 與用戶輸入有關(guān)的更新
}
}
作者的另一段代碼:C語(yǔ)言實(shí)現(xiàn)空戰(zhàn)游戲,也很棒,分享給大家:
#include<stdio.h>
#include<windows.h>
#include<conio.h>
#define High 27 //定義邊界
#define Width 45
#define EnemyNum 5 //敵機(jī)數(shù)目
//定義全局變量
int canvas[High][Width]={0}; //定義元素,0為空格,1為飛機(jī),2為子彈,3為敵機(jī),4為右下邊界
int position_x,position_y; //飛機(jī)坐標(biāo)
int enemy_x[EnemyNum],enemy_y[EnemyNum]; //敵機(jī)坐標(biāo)
int score; //得分
int Speed; //敵機(jī)速度
int bulletwidth; //子彈寬度
void HideCursor() //隱藏光標(biāo)
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void gotoxy(int x,int y) //光標(biāo)移動(dòng)到(x,y)位置
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(handle,pos);
}
void startup() //數(shù)據(jù)初始化
{
position_x=High-2; //初始化飛機(jī)位置
position_y=Width/2;
canvas[position_x][position_y]=1;
bulletwidth=0; //初始化子彈寬度
Speed=25; //敵機(jī)初始最小速度
int k;
for(k=0;k<EnemyNum;k++)
{
enemy_x[k]=rand()%2; //初始化敵機(jī)位置
enemy_y[k]=rand()%Width;
canvas[enemy_x[k]][enemy_y[k]]=3;
}
score=0; //得分初始化
HideCursor();
}
void show() //顯示界面
{
int i,j;
gotoxy(0,0);
for(i=0;i<=High;i++)
{
for(j=0;j<=Width;j++)
{
if(canvas[i][j] == 1)
printf("*"); //輸出飛機(jī)
else if(canvas[i][j]==2)
printf("|"); //輸出子彈
else if(canvas[i][j]==3)
printf("@"); //輸出敵機(jī)
else if(canvas[i][j]==4)
printf("#"); //輸出邊界#
else
printf(" "); //輸出空格
}
printf("\n");
}
printf("得分:%d\n",score);
}
void updateWithoutInput() //無(wú)需用戶輸入的更新
{
int i,j,k;
for(i=0;i<High;i++)
{
for(j=0;j<Width;j++)
{
if(canvas[i][j]==2)
{
for(k=0;k<EnemyNum;k++)
{
if(i==enemy_x[k] && j==enemy_y[k]) //擊中敵機(jī)
{
score++;
if(score==5||score==10) //得分達(dá)到標(biāo)準(zhǔn)子彈加寬
bulletwidth++;
canvas[enemy_x[k]][enemy_y[k]]=0; //生成新的敵機(jī)
enemy_x[k]=rand()%2;
enemy_y[k]=rand()%Width;
canvas[enemy_x[k]][enemy_y[k]]=3;
}
}
canvas[i][j]=0; //子彈自動(dòng)上升
if(i>0)
canvas[i-1][j]=2;
}
}
}
for(k=0;k<EnemyNum;k++)
{
if(enemy_x[k]>High) //生成新的敵機(jī)
{
canvas[enemy_x[k]][enemy_y[k]]=0;
enemy_x[k]=rand()%2;
enemy_y[k]=rand()%Width;
canvas[enemy_x[k]][enemy_y[k]]=3;
}
}
static int speed=0;
if(speed<Speed) //敵機(jī)速度
speed++;
if(speed==Speed)
{
for(k=0;k<EnemyNum;k++)
{
canvas[enemy_x[k]][enemy_y[k]]=0; //敵機(jī)自動(dòng)下落
enemy_x[k]++;
canvas[enemy_x[k]][enemy_y[k]]=3;
}
speed=0;
}
for(k=0;k<EnemyNum;k++)
{
if(enemy_x[k]==position_x&&enemy_y[k]==position_y) //飛機(jī)撞毀
{
printf("游戲結(jié)束\n");
exit(0);
}
}
}
void updateWithInput() //需用戶輸入的更新
{
char input;
if(kbhit())
{
input=getch();
if(input=='w' && position_x>0) //控制飛機(jī)方向
{
canvas[position_x][position_y]=0;
position_x--;
canvas[position_x][position_y]=1;
}
else if(input=='s' && position_x<High-1)
{
canvas[position_x][position_y]=0;
position_x++;
canvas[position_x][position_y]=1;
}
else if(input=='a' && position_y>0)
{
canvas[position_x][position_y]=0;
position_y--;
canvas[position_x][position_y]=1;
}
else if(input=='d' && position_y<Width-1)
{
canvas[position_x][position_y]=0;
position_y++;
canvas[position_x][position_y]=1;
}
else if(input=' ') //space發(fā)射子彈
{
int left,right;
int x;
left=position_y-bulletwidth;
if(left<0)
left=0;
right=position_y+bulletwidth;
if(right>Width-1)
right=0;
for(x=left;x<=right;x++)
canvas[position_x-1][x]=2;
}
}
}
int main()
{
startup();
system("color 2f");
while(1)
{
show(); //顯示界面
updateWithoutInput(); //無(wú)需用戶輸入的更新
updateWithInput(); //需用戶輸入的更新
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C語(yǔ)言實(shí)現(xiàn)飛機(jī)大戰(zhàn)
- C語(yǔ)言實(shí)現(xiàn)飛機(jī)大戰(zhàn)程序設(shè)計(jì)
- C語(yǔ)言用封裝方法實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲
- C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的飛機(jī)大戰(zhàn)游戲
- C語(yǔ)言實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲完整代碼
- C語(yǔ)言控制臺(tái)實(shí)現(xiàn)字符飛機(jī)大戰(zhàn)
- C語(yǔ)言版飛機(jī)大戰(zhàn)游戲
- C語(yǔ)言代碼實(shí)現(xiàn)飛機(jī)大戰(zhàn)
- C語(yǔ)言之飛機(jī)大戰(zhàn)游戲
- C語(yǔ)言實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲
相關(guān)文章
VisualStudio2022不支持.NET Framework 4.0項(xiàng)目解決辦法
本文主要介紹了VisualStudio2022不支持.NET Framework 4.0項(xiàng)目解決辦法,文中通過(guò)圖文的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-09-09
C++解密Chrome80版本數(shù)據(jù)庫(kù)的方法示例代碼
這篇文章主要介紹了C++解密Chrome80版本數(shù)據(jù)庫(kù)的方法示例代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
C語(yǔ)言 數(shù)據(jù)結(jié)構(gòu)中求解迷宮問(wèn)題實(shí)現(xiàn)方法
這篇文章主要介紹了C語(yǔ)言 數(shù)據(jù)結(jié)構(gòu)中求解迷宮問(wèn)題實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下2017-03-03
QT使用udp實(shí)現(xiàn)發(fā)送與接收?qǐng)D片
這篇文章主要為大家詳細(xì)介紹了QT如何使用udp協(xié)議實(shí)現(xiàn)發(fā)送與接收?qǐng)D片功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12
C語(yǔ)言實(shí)現(xiàn)超市管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)超市管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07
Qt使用事件與定時(shí)器實(shí)現(xiàn)字幕滾動(dòng)效果
我們經(jīng)常能夠在外面看到那種滾動(dòng)字幕,那么本文就拿Qt來(lái)做一個(gè)吧,本文將使用事件與定時(shí)器實(shí)現(xiàn)字幕滾動(dòng)的效果,感興趣的小伙伴可以了解一下2023-06-06

