溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單飛機(jī)大戰(zhàn)的方法

發(fā)布時(shí)間:2021-04-17 15:09:25 來(lái)源:億速云 閱讀:473 作者:小新 欄目:編程語(yǔ)言

這篇文章給大家分享的是有關(guān)C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單飛機(jī)大戰(zhàn)的方法的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

具體內(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(); // 顯示畫(huà)面
 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(); //需用戶輸入的更新
 }
}

感謝各位的閱讀!關(guān)于“C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單飛機(jī)大戰(zhàn)的方法”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI