<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了C語言實現空戰遊戲的具體程式碼,供大家參考,具體內容如下
專案描述: 在以往的程式中進行了改進。
例如: 可以發射多個子彈
可以有多個敵機
現在這個版本是3.0版 這個版本的各個功能基本完善
效果圖如下:
程式碼如下:
#include<stdio.h> #include<string.h> #include<conio.h> #include<Windows.h> #define High 25 //遊戲的尺寸 #define Width 50 //全域性變數 int position_x,position_y;//飛機的位置 int canvas[High][Width]={0}; //二維陣列儲存遊戲畫布中對應的元素 //0為空格 1為飛機 2為子彈 3為敵機 void gotoxy(int x,int y)//將遊標移動到(x,y)位置 { HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE); COORD pos; pos.X=x; pos.Y=y; SetConsoleCursorPosition(handle,pos); } void startup()//資料的初始化 { position_x=High/2; position_y=Width/2; canvas[position_x][position_y]=1; } void show()//顯示畫面 { int i,j; gotoxy(0,0);//將遊標移動到原點位置,以下重畫清屏 for(i=0;i<High;i++) { for(j=0;j<Width;j++) { if(canvas[i][j]==0) printf(" ");//輸出空格 else if(canvas[i][j]==1) printf("*");//輸出空格 else if(canvas[i][j]==2) printf("|");//輸出子彈 } printf("n"); } } void updateWithoutInput()//與使用者輸入無關的更新 { int i,j; for(i=0;i<High;i++) { for(j=0;j<Width;j++) { if(canvas[i][j]==2)//子彈向上移動 { canvas[i][j]=0; if(i>0) canvas[i-1][j]=2; } } } } void updateWithInput()//與使用者輸入有關的更新 { char input; if(kbhit())//判斷是否有輸入 { input=getch();//根據使用者的不同輸入來移動 if(input=='a'||input=='A') { canvas[position_x][position_y]=0; position_y--;//位置左移 canvas[position_x][position_y]=1; } else if(input=='d'||input=='D') { canvas[position_x][position_y]=0; position_y++;//位置右移 canvas[position_x][position_y]=1; } else if(input=='w'||input=='W') { canvas[position_x][position_y]=0; position_x--;//位置上移 canvas[position_x][position_y]=1; } else if(input=='s'||input=='S') { canvas[position_x][position_y]=0; position_x++;//位置下移 canvas[position_x][position_y]=1; } else if(input==' ')//發射子彈 { canvas[position_x-1][position_y]=2; //發射子彈的初始位置在飛機的正上方 } } } int main() { startup();//資料的初始化 while(1)//遊戲迴圈執行 { show();//顯示畫面 updateWithoutInput();//與使用者輸入無關的更新 updateWithInput();//與使用者輸入有關的更新 } return 0; }
效果圖如下:
程式碼如下:
#include<stdio.h> #include<string.h> #include<conio.h> #include<Windows.h> #define High 25 //遊戲的尺寸 #define Width 50 #define EnemyNum 5//敵機的個數 //全域性變數 int position_x,position_y;//飛機的位置 int enemy_x[EnemyNum],enemy_y[EnemyNum];//敵機的位置 int canvas[High][Width]={0}; //二維陣列儲存遊戲畫布中對應的元素 //0為空格 1為飛機 2為子彈 3為敵機 int score;//得分 void gotoxy(int x,int y)//將遊標移動到(x,y)位置 { HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE); COORD pos; pos.X=x; pos.Y=y; SetConsoleCursorPosition(handle,pos); } void startup()//資料的初始化 { int k; position_x=High-1; position_y=Width/2; canvas[position_x][position_y]=1; for(k=0;k<EnemyNum;k++) { enemy_x[k]=rand()%2; enemy_y[k]=rand()%Width; canvas[enemy_x[k]][enemy_y[k]]=3; } score=0; } void show()//顯示畫面 { int i,j; gotoxy(0,0);//將遊標移動到原點位置,以下重畫清屏 for(i=0;i<High;i++) { for(j=0;j<Width;j++) { if(canvas[i][j]==0) printf(" ");//輸出空格 else if(canvas[i][j]==1) printf("*");//輸出空格 else if(canvas[i][j]==2) printf("|");//輸出子彈 else if(canvas[i][j]==3) printf("+");//輸出敵機 } printf("n"); } printf("得分:%3dn",score); Sleep(20); } void updateWithoutInput()//與使用者輸入無關的更新 { 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]) )//子彈擊中敵機 { score++;//分數加一 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; canvas[i][j]=0;//子彈消失 } } //子彈向上移動 canvas[i][j]=0; if(i>0) canvas[i-1][j]=2; } } } for(k=0;k<EnemyNum;k++) { if( (position_x==enemy_x[k])&&(position_y==enemy_y[k]) )//敵機撞到我機 { printf("失敗n"); Sleep(3000); system("pause"); exit(0); } if(enemy_x[k]>High)//敵機跑出螢幕 { 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; score--;//減分 } static int speed=0; if(speed<36) speed++; if(speed==36) { //敵機下落 for(k=0;k<EnemyNum;k++) { canvas[enemy_x[k]][enemy_y[k]]=0; enemy_x[k]++; speed=0; canvas[enemy_x[k]][enemy_y[k]]=3; } } } } void updateWithInput()//與使用者輸入有關的更新 { char input; if(kbhit())//判斷是否有輸入 { input=getch();//根據使用者的不同輸入來移動 if(input=='a'||input=='A') { canvas[position_x][position_y]=0; position_y--;//位置左移 canvas[position_x][position_y]=1; } else if(input=='d'||input=='D') { canvas[position_x][position_y]=0; position_y++;//位置右移 canvas[position_x][position_y]=1; } else if(input=='w'||input=='W') { canvas[position_x][position_y]=0; position_x--;//位置上移 canvas[position_x][position_y]=1; } else if(input=='s'||input=='S') { canvas[position_x][position_y]=0; position_x++;//位置下移 canvas[position_x][position_y]=1; } else if(input==' ')//發射子彈 { canvas[position_x-1][position_y]=2; //發射子彈的初始位置在飛機的正上方 } } } int main() { startup();//資料的初始化 while(1)//遊戲迴圈執行 { show();//顯示畫面 updateWithoutInput();//與使用者輸入無關的更新 updateWithInput();//與使用者輸入有關的更新 } return 0; }
效果圖如下:
當分數達到一定的值自動升級炮彈,當分數下降一定數值後炮彈下降一個等級。
程式碼如下:
#include<stdio.h> #include<string.h> #include<conio.h> #include<Windows.h> #define High 25 //遊戲的尺寸 #define Width 40 #define EnemyNum 5//敵機的個數 //全域性變數 int position_x,position_y;//飛機的位置 int enemy_x[EnemyNum],enemy_y[EnemyNum];//敵機的位置 int canvas[High][Width]={0}; //二維陣列儲存遊戲畫布中對應的元素 //0為空格 1為飛機 2為子彈 3為敵機 int score;//得分 int BulletWidth;//子彈的寬度 int EnemyMoveSpeed;//敵機的移動速度 void gotoxy(int x,int y)//將遊標移動到(x,y)位置 { HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE); COORD pos; pos.X=x; pos.Y=y; SetConsoleCursorPosition(handle,pos); } void startup()//資料的初始化 { int k; position_x=High-1; position_y=Width/2; canvas[position_x][position_y]=1; for(k=0;k<EnemyNum;k++) { enemy_x[k]=rand()%2; enemy_y[k]=rand()%Width; canvas[enemy_x[k]][enemy_y[k]]=3; } score=0; BulletWidth=0; EnemyMoveSpeed=20; } void show()//顯示畫面 { int i,j; gotoxy(0,0);//將遊標移動到原點位置,以下重畫清屏 for(i=0;i<High;i++) { for(j=0;j<Width;j++) { if(canvas[i][j]==0) printf(" ");//輸出空格 else if(canvas[i][j]==1) printf("*");//輸出空格 else if(canvas[i][j]==2) printf("|");//輸出子彈 else if(canvas[i][j]==3) printf("+");//輸出敵機 } printf("n"); } printf("════════════════════════════════════════n"); printf("得分:%3dn",score); system("date /t"); system("time /t"); Sleep(20); } //定義隱藏遊標函數 void HideCursor() { CONSOLE_CURSOR_INFO cursor; cursor.bVisible = FALSE; cursor.dwSize = sizeof(cursor); HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorInfo(handle, &cursor); } void updateWithoutInput()//與使用者輸入無關的更新 { 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-1==enemy_x[k])&&(j==enemy_y[k]) )//子彈擊中敵機 { score++;//分數加一 if(score%5==0&&EnemyMoveSpeed>3)//達到一定積分後敵機變快 EnemyMoveSpeed--; if(score/5)//達到一定積分後子彈變厲害 { BulletWidth=0; BulletWidth=BulletWidth+score/5; if(BulletWidth>5)//子彈加到一定威力後,會固定不變 BulletWidth=5; } 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; canvas[i][j]=0;//子彈消失 } } //子彈向上移動 canvas[i][j]=0; if(i>0) canvas[i-1][j]=2; } } } for(k=0;k<EnemyNum;k++) { if( (position_x==enemy_x[k])&&(position_y==enemy_y[k]) )//敵機撞到我機 { printf("失敗n"); Sleep(3000); system("pause"); exit(0); } if(enemy_x[k]>High)//敵機跑出螢幕 { 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; score--;//減分 if(score%5==0&&score>0)//減的分數過多,子彈威力下降 { BulletWidth--; EnemyMoveSpeed++; } } static int speed=0; if(speed<EnemyMoveSpeed) speed++; if(speed==EnemyMoveSpeed) { //敵機下落 for(k=0;k<EnemyNum;k++) { canvas[enemy_x[k]][enemy_y[k]]=0; enemy_x[k]++; speed=0; canvas[enemy_x[k]][enemy_y[k]]=3; } } } } void updateWithInput()//與使用者輸入有關的更新 { char input; if(kbhit())//判斷是否有輸入 { input=getch();//根據使用者的不同輸入來移動 if(input=='a'||input=='A') { canvas[position_x][position_y]=0; position_y--;//位置左移 if(position_y==0) position_y++; canvas[position_x][position_y]=1; } else if(input=='d'||input=='D') { canvas[position_x][position_y]=0; position_y++;//位置右移 if(position_y==Width-1) position_y--; canvas[position_x][position_y]=1; } else if(input=='w'||input=='W') { canvas[position_x][position_y]=0; position_x--;//位置上移 if(position_x==0) position_x++; canvas[position_x][position_y]=1; } else if(input=='s'||input=='S') { canvas[position_x][position_y]=0; position_x++;//位置下移 if(position_x==High) position_x--; canvas[position_x][position_y]=1; } else if(input==' ')//發射子彈 { int left =position_y-BulletWidth; int right=position_y+BulletWidth; if(left<0) left=0; if(right>Width-1) right=Width-1; int k; for(k=left;k<=right;k++)//發射子彈 canvas[position_x-1][k]=2; //發射子彈的初始位置在飛機的正上方 } } } int main() { startup();//資料的初始化 HideCursor(); system("title 遊戲中"); system("color 09"); while(1)//遊戲迴圈執行 { show();//顯示畫面 updateWithoutInput();//與使用者輸入無關的更新 updateWithInput();//與使用者輸入有關的更新 } return 0; }
效果圖如下:
增加一個主選單
裡面增加了一些小的功能
程式碼如下:
#include<stdio.h> #include<string.h> #include<conio.h> #include<Windows.h> #define High 25 //遊戲的尺寸 #define Width 40 #define EnemyNum 5//敵機的個數 //全域性變數 int position_x,position_y;//飛機的位置 int enemy_x[EnemyNum],enemy_y[EnemyNum];//敵機的位置 int canvas[High][Width]={0}; //二維陣列儲存遊戲畫布中對應的元素 //0為空格 1為飛機 2為子彈 3為敵機 int score;//得分 int BulletWidth;//子彈的寬度 int EnemyMoveSpeed;//敵機的移動速度 void gotoxy(int x,int y)//將遊標移動到(x,y)位置 { HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE); COORD pos; pos.X=x; pos.Y=y; SetConsoleCursorPosition(handle,pos); } void startup()//資料的初始化 { int k; position_x=High-1; position_y=Width/2; canvas[position_x][position_y]=1; for(k=0;k<EnemyNum;k++) { enemy_x[k]=rand()%2; enemy_y[k]=rand()%Width; canvas[enemy_x[k]][enemy_y[k]]=3; } score=0; BulletWidth=0; EnemyMoveSpeed=20; } void show()//顯示畫面 { int i,j; gotoxy(0,0);//將遊標移動到原點位置,以下重畫清屏 for(i=0;i<High;i++) { for(j=0;j<Width;j++) { if(canvas[i][j]==0) printf(" ");//輸出空格 else if(canvas[i][j]==1) printf("*");//輸出空格 else if(canvas[i][j]==2) printf("|");//輸出子彈 else if(canvas[i][j]==3) printf("+");//輸出敵機 } printf("n"); } printf("════════════════════════════════════════n"); printf("得分:%3dn",score); system("date /t"); system("time /t"); printf("提示:按 z 鍵回到主選單"); Sleep(20); } //定義隱藏遊標函數 void HideCursor() { CONSOLE_CURSOR_INFO cursor; cursor.bVisible = FALSE; cursor.dwSize = sizeof(cursor); HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorInfo(handle, &cursor); } int updateWithoutInput()//與使用者輸入無關的更新 { 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-1==enemy_x[k])&&(j==enemy_y[k]) )//子彈擊中敵機 { score++;//分數加一 if(score%5==0&&EnemyMoveSpeed>3)//達到一定積分後敵機變快 EnemyMoveSpeed--; if(score/5)//達到一定積分後子彈變厲害 { BulletWidth=0; BulletWidth=BulletWidth+score/5; if(BulletWidth>5)//子彈加到一定威力後,會固定不變 BulletWidth=5; } 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; canvas[i][j]=0;//子彈消失 } } //子彈向上移動 canvas[i][j]=0; if(i>0) canvas[i-1][j]=2; } } } for(k=0;k<EnemyNum;k++) { if( (position_x==enemy_x[k])&&(position_y==enemy_y[k]) )//敵機撞到我機 { system("cls"); printf("失敗n"); printf("得分:%dn",score); printf("正在返回主選單n"); Sleep(3000); return 1; } if(enemy_x[k]>High)//敵機跑出螢幕 { 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; score--;//減分 if(score%5==0&&score>0)//減的分數過多,子彈威力下降 { BulletWidth--; EnemyMoveSpeed++; } } static int speed=0; if(speed<EnemyMoveSpeed) speed++; if(speed==EnemyMoveSpeed) { //敵機下落 for(k=0;k<EnemyNum;k++) { canvas[enemy_x[k]][enemy_y[k]]=0; enemy_x[k]++; speed=0; canvas[enemy_x[k]][enemy_y[k]]=3; } } } return 0; } void updateWithInput(char input)//與使用者輸入有關的更新 { if(input=='a'||input=='A') { canvas[position_x][position_y]=0; position_y--;//位置左移 if(position_y==0) position_y++; canvas[position_x][position_y]=1; } else if(input=='d'||input=='D') { canvas[position_x][position_y]=0; position_y++;//位置右移 if(position_y==Width-1) position_y--; canvas[position_x][position_y]=1; } else if(input=='w'||input=='W') { canvas[position_x][position_y]=0; position_x--;//位置上移 if(position_x==0) position_x++; canvas[position_x][position_y]=1; } else if(input=='s'||input=='S') { canvas[position_x][position_y]=0; position_x++;//位置下移 if(position_x==High) position_x--; canvas[position_x][position_y]=1; } else if(input==' ')//發射子彈 { int left =position_y-BulletWidth; int right=position_y+BulletWidth; if(left<0) left=0; if(right>Width-1) right=Width-1; int k; for(k=left;k<=right;k++)//發射子彈 canvas[position_x-1][k]=2; //發射子彈的初始位置在飛機的正上方 } } void gamemenu()//遊戲選單 { int temp=0; int i,j; char input; for(i=0;i<High;i++)//陣列初始化 { for(j=0;j<Width;j++) { canvas[i][j]=0; } printf("n"); } startup();//資料的初始化 system("cls"); while(1) { show();//顯示畫面 temp=updateWithoutInput();//與使用者輸入無關的更新 if(kbhit())//判斷是否有輸入 { input=getch(); updateWithInput(input);//與使用者輸入有關的更新 if(input=='z'||input=='Z') temp=1; } if(temp==1) { system("cls"); break; } } } void help()//幫助選單 { char input; system("cls"); printf("nnnnnnnn"); printf("---------------------------------------n"); printf(" 幫助選單 nn"); printf(" 1. 按空格發射炮彈 n"); printf(" 2. a 鍵左移 n"); printf(" 3. d 鍵右移 n"); printf(" 4. w 鍵上移 n"); printf(" 5. s 鍵下移 n"); printf("---------------------------------------n"); printf("nn提示:按 z 鍵回到主選單n"); printf("nn 祝您玩的愉快!n"); while(1) { input=getch(); if(input=='z') { break; } } } void quit()//退出選單 { exit(0); } void menu()//主選單 { char change; system("cls"); printf("n--------------------------------------------n"); printf(" 8n"); printf(" 88n"); printf(" 888n"); printf(" 8888n"); printf(" 8888888888888n"); printf(" 8888n"); printf(" 888n"); printf(" 88n"); printf(" 8n"); printf("nnn Welcome to fly war!n"); printf("nnnn"); printf(" 主選單 nn"); printf(" 1. 進入遊戲 n"); printf(" 2. 幫助選單 n"); printf(" 3. 退出遊戲 n"); printf("---------------------------------------n"); printf("nn 祝您玩的愉快!n"); change=getch(); switch(change) { case '1': gamemenu();//遊戲選單 break; case '2': help();//幫助選單 break; case '3': quit();//退出選單 break; } } int main() { HideCursor(); system("title 遊戲中"); system("color 09"); system("mode 50,30"); while(1)//遊戲迴圈執行 { menu(); } return 0; }
效果圖如下:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45