<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了C語言用封裝方法實現飛機大戰遊戲的具體程式碼,供大家參考,具體內容如下
這是上一次的飛機大戰遊戲的專案。專案: 最簡單的飛機大戰遊戲
上次沒有用函數進行的封裝。這次在上次的基礎上進行封裝和一些功能的優化。
專案描述: 在上一次的基礎上用函數進行了封裝,對於一些功能也進行了一些優化。
最終效果圖如下:
程式碼如下:
#include<stdio.h> #include<stdlib.h> #include<Windows.h> #include<conio.h> //全域性變數 int position_x,position_y;//飛機位置 int high,width;//遊戲畫面尺寸 void startup()//資料的初始化 { high = 20; width = 30; position_x = high/2;//飛機的上下位置 position_y = width/2;//飛機的左右·位置 } void show()//顯示畫面 { system("cls"); int i,j; for(i=0;i<high;i++) { for(j=0;j<width;j++) { if( (i == position_x) && (j== position_y))//輸出飛機 printf("☆"); else printf(" "); } printf("n"); } } void updateWithoutInput()//與使用者輸入無關的更新 { } void updateWithInput()//與使用者輸入有關的更新 { char input; if(kbhit())//判斷有無輸入 { input=getch(); if( input == 'a' || input == 'A') position_y--;//左移 if( input == 'd' || input == 'D') position_y++;//右移 if( input == 'w' || input == 'W') position_x--;//上移 if( input == 's' || input == 'S') position_x++;//下移 } } int main(void) { startup(); //資料的初始化 while(1) { show();//顯示畫面 updateWithoutInput();//與使用者輸入無關的更新 updateWithInput();//與使用者輸入有關的更新 } return 0; }
程式碼如下:
#include<stdio.h> #include<stdlib.h> #include<Windows.h> #include<conio.h> //全域性變數 int position_x,position_y;//飛機位置 int high,width;//遊戲畫面尺寸 int bullet_x,bullet_y;//子彈位置 //定義隱藏遊標函數 void HideCursor() { CONSOLE_CURSOR_INFO cursor; cursor.bVisible = FALSE; cursor.dwSize = sizeof(cursor); HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorInfo(handle, &cursor); } void startup()//資料的初始化 { high = 120; width = 100; position_x = high/2;//飛機的上下位置 position_y = width/2;//飛機的左右·位置 bullet_x = 0; bullet_y = position_y; } void show()//顯示畫面 { system("cls"); int i,j; for(i=0;i<high;i++) { for(j=0;j<width;j++) { if( (i == position_x) && (j== position_y))//輸出飛機 printf("☆"); else if( (i == bullet_x)&&(j == bullet_y)) printf("|");//輸出子彈 else printf(" "); } printf("n"); } } void updateWithoutInput()//與使用者輸入無關的更新 { if(bullet_x>-1) bullet_x--; } void updateWithInput()//與使用者輸入有關的更新 { char input; if(kbhit()) { input=getch(); if( input == 'a' || input == 'A') position_y--;//左移 if( input == 'd' || input == 'D') position_y++;//右移 if( input == 'w' || input == 'W') position_x--;//上移 if( input == 's' || input == 'S') position_x++;//下移 if( input == ' ') { bullet_x=position_x-1; bullet_y=position_y; } } } int main(void) { startup();//資料的初始化 while(1) { show();//顯示畫面 HideCursor();//隱藏遊標,防止遊標亂閃。 updateWithoutInput();//與使用者輸入無關的更新 updateWithInput();//與使用者輸入有關的更新 } return 0; }
效果圖如下:
發射子彈的功能和上次有了明顯的改進,有了一個動態發射的一個效果。
程式碼如下;
#include<stdio.h> #include<stdlib.h> #include<Windows.h> #include<conio.h> //全域性變數 int position_x,position_y;//飛機位置 int high,width;//遊戲畫面尺寸 int bullet_x,bullet_y;//子彈位置 int enemy_x,enemy_y;//敵機的位置 int score;//得分 //定義隱藏遊標函數 void HideCursor() { CONSOLE_CURSOR_INFO cursor; cursor.bVisible = FALSE; cursor.dwSize = sizeof(cursor); HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorInfo(handle, &cursor); } 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()//資料的初始化 { system("color 09"); high = 30; width =50; position_x = high/2;//飛機的上下位置 position_y = width/2;//飛機的左右位置 bullet_x = 0; bullet_y = position_y; enemy_x=0; enemy_y=position_y; score=0; } void show()//顯示畫面 { //system("cls"); gotoxy(0,0); int i,j; for(i=0;i<high;i++) { for(j=0;j<width;j++) { if( (i == position_x) && (j== position_y))//輸出飛機 printf("☆"); else if( (i == bullet_x)&&(j == bullet_y)) printf("|");//輸出子彈 else if( (i== enemy_x) && ( j==enemy_y)) printf("*");//輸出敵機 else printf(" ");//輸出空格 } printf("n"); } printf("得分:%dn",score); } void updateWithoutInput()//與使用者輸入無關的更新 { static int speed=0; if(bullet_x>-1) bullet_x--; if( (bullet_x == enemy_x) && (bullet_y ==enemy_y) )//子彈擊中飛機 { score++;//分數無效 enemy_x=-1;//產生新的敵機 enemy_y=rand()%width; bullet_x=-2;//子彈無效 } // 用來控制敵機向下移動的速度,每隔幾次迴圈才移動一次敵機 // 這樣修改,雖然使用者按鍵的互動速度還是很快,但是NPC的移動顯示可以降速 if(speed<10) speed++; if(speed == 10 ) { enemy_x++; speed = 0; } } void updateWithInput()//與使用者輸入有關的更新 { char input; if(kbhit()) { input=getch(); if( input == 'a' || input == 'A') position_y--;//左移 if( input == 'd' || input == 'D') position_y++;//右移 if( input == 'w' || input == 'W') position_x--;//上移 if( input == 's' || input == 'S') position_x++;//下移 if( input == ' ') { bullet_x=position_x-1; bullet_y=position_y; } } } int main(void) { startup();//資料的初始化 while(1) { show();//顯示畫面 HideCursor();//隱藏遊標,防止遊標亂閃。 updateWithoutInput();//與使用者輸入無關的更新 updateWithInput();//與使用者輸入有關的更新 } return 0; }
效果圖如下:
我們的專案基本是已經完成了。但是還有很多的漏洞。
比如: 飛機控制越界問題,以及敵機越界問題。
而且介面不夠好看我們要再美化一下。
以及增加遊戲暫停功能。
遊戲結束功能。
程式碼如下:
#include<stdio.h> #include<stdlib.h> #include<Windows.h> #include<conio.h> //全域性變數 int position_x,position_y;//飛機位置 int high,width;//遊戲畫面尺寸 int bullet_x,bullet_y;//子彈位置 int enemy_x,enemy_y;//敵機的位置 int score;//得分 //定義隱藏遊標函數 void HideCursor() { CONSOLE_CURSOR_INFO cursor; cursor.bVisible = FALSE; cursor.dwSize = sizeof(cursor); HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorInfo(handle, &cursor); } 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()//資料的初始化 { system("color 09"); high = 30; width =50; position_x = high/2;//飛機的上下位置 position_y = width/2;//飛機的左右位置 bullet_x = 0; bullet_y = position_y; enemy_x=0; enemy_y=position_y; score=0; } void show()//顯示畫面 { //system("cls"); gotoxy(0,0); int i,j; for(i=0;i<high;i++) { for(j=0;j<width;j++) { if( (i == position_x) && (j== position_y))//輸出飛機 printf("☆"); else if( (i == bullet_x)&&(j == bullet_y)) printf("|");//輸出子彈 else if( (i== enemy_x) && ( j==enemy_y)) printf("*");//輸出敵機 else if(j==width-1&&i==position_x) //飛機那一行,因為有飛機多佔一格,所以要刪除前面的一個空格 printf("b+"); else if(j==width-1) printf("+"); else if(i==high-1) printf("-"); else printf(" ");//輸出空格 } printf("n"); } printf("得分:%dn",score); printf("按1鍵遊戲暫停n"); } void updateWithoutInput()//與使用者輸入無關的更新 { static int speed=0; if(bullet_x>-1) bullet_x--; if( (bullet_x == enemy_x) && (bullet_y ==enemy_y) )//子彈擊中飛機 { score++;//分數無效 enemy_x=-1;//產生新的敵機 enemy_y=rand()%width+1; bullet_x=-2;//子彈無效 } // 用來控制敵機向下移動的速度,每隔幾次迴圈才移動一次敵機 // 這樣修改,雖然使用者按鍵的互動速度還是很快,但是NPC的移動顯示可以降速 if(speed<6) speed++; if(speed == 6 ) { enemy_x++; if(enemy_x==high-1)//如果飛機越界再次生成 { enemy_x=-1;//產生新的敵機 enemy_y=rand()%width+1; } if( enemy_x==position_x-1)//撞機了 遊戲結束 { system("cls"); printf("飛機墜毀了,遊戲結束n"); printf("分數為:%dn",score); printf("請重啟再開始新的一局n"); while(1) { } } speed = 0; } } void updateWithInput()//與使用者輸入有關的更新 { char input; if(kbhit()) { input=getch(); if( input == 'a' || input == 'A') { position_y--;//左移 if(position_y==0)//判斷是否越界 { position_y++; } } if( input == 'd' || input == 'D') { position_y++;//右移 if(position_y==width-2)//判斷是否越界 { position_y--; } } if( input == 'w' || input == 'W') { position_x--;//上移 if(position_x==1)//判斷是否越界 { position_x++; } } if( input == 's' || input == 'S') { position_x++;//下移 if(position_x==high-1)//判斷是否越界 { position_x--; } } if( input == ' ')//發射子彈 { bullet_x=position_x-1; bullet_y=position_y; } if( input == '1')//按1鍵遊戲暫停 { while(1) { input=getch(); if(input == '1')//再按1鍵遊戲繼續 break; } } } } int main(void) { startup();//資料的初始化 while(1) { show();//顯示畫面 HideCursor();//隱藏遊標,防止遊標亂閃。 updateWithoutInput();//與使用者輸入無關的更新 updateWithInput();//與使用者輸入有關的更新 } 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