日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

项目: 用封装的方法实现飞机大战游戏

發布時間:2025/3/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 项目: 用封装的方法实现飞机大战游戏 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 一、項目描述和最終的成果展示
  • 二、用函數進行封裝
  • 三、新型的發射子彈功能
  • 四、實現移動的敵機功能和更正屏幕閃爍,清除光標功能
  • 五、訂正一些BUG和完成一些美化

這是上一次的飛機大戰游戲的項目。項目: 最簡單的飛機大戰游戲
上次沒有用函數進行的封裝。這次在上次的基礎上進行封裝和一些功能的優化。

一、項目描述和最終的成果展示

項目描述: 在上一次的基礎上用函數進行了封裝,對于一些功能也進行了一些優化。

最終效果圖如下:

二、用函數進行封裝

代碼如下:

#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("☆");elseprintf(" ");}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("|");//輸出子彈elseprintf(" ");}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("*");//輸出敵機elseprintf(" ");//輸出空格}printf("\n");}printf("得分:%d\n",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; }

效果圖如下:

五、訂正一些BUG和完成一些美化

我們的項目基本是已經完成了。但是還有很多的漏洞。 比如: 飛機控制越界問題,以及敵機越界問題。 而且界面不夠好看我們要再美化一下。 以及增加游戲暫停功能。 游戲結束功能。

代碼如下:

#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("-");elseprintf(" ");//輸出空格}printf("\n");}printf("得分:%d\n",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("分數為:%d\n",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; }

效果圖如下:

總結

以上是生活随笔為你收集整理的项目: 用封装的方法实现飞机大战游戏的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字幕一区二区三区在线不卡 | 国产成人精品av | 天天干天天操天天干 | 午夜xxx | 艳妇乳肉豪妇荡乳 | 已满十八岁免费观看全集动漫 | 亚洲一区二区三区影视 | 亚洲国产日韩在线一区 | 亚洲一级理论片 | 日韩专区av | 中文字幕一区二区三区乱码不卡 | 在线免费黄色片 | 日韩高清在线观看一区 | 91免费看. | 国产熟女一区二区丰满 | 日本偷拍一区 | 国产免费专区 | 五月天综合 | 天天搞夜夜 | 国产亚洲欧美精品久久久久久 | 亚洲天堂欧美 | 深夜激情视频 | 日本三级韩国三级美三级91 | 亚洲乱码精品久久久久 | 亚洲欧洲一二三区 | 在线你懂| 性xxxx视频 | 香蕉视频国产 | 91精品在线播放 | av青娱乐 | 免费小视频 | 久草手机在线观看 | 91视频在线免费观看 | 久久久九九九热 | 国产成人在线一区 | 夜夜高潮夜夜爽国产伦精品 | 国产日本视频 | 少妇人妻综合久久中文字幕 | 亚洲av无码一区二区二三区软件 | 少妇肥臀大白屁股高清 | 青青草社区 | 天天性综合 | 激情综合小说 | av资源网站| 天天舔天天 | 日韩成人av网址 | 68日本xxxxxⅹxxx22 | 日韩电影第一页 | 小镇姑娘国语版在线观看免费 | 日韩成人一区二区 | 国产一及毛片 | 久久久午夜电影 | 亚洲美女视频在线 | 日本加勒比中文字幕 | 成人亚洲综合 | 1024欧美| 中文字幕日韩精品一区 | av生活片| 亚洲精品美女久久久 | 一二三四精品 | 操批网站| 琪琪秋霞午夜被窝电影网 | 91亚洲视频在线观看 | 国产精品99精品无码视亚 | jizzjizz中国精品麻豆 | 成人动漫视频在线观看 | 国产精品伦一区二区三级古装电影 | 国产资源网| 欧美一级视频免费观看 | 自拍偷拍国产精品 | 亚洲v国产 | 国产成人在线观看网站 | 国产无遮挡aaa片爽爽 | 亚洲高清免费 | 中文字幕丰满人伦在线 | 91久久精品一区二区三区 | 日韩福利小视频 | 日干夜操| 韩日一区二区三区 | 天天射,天天干 | 久久综合激情网 | 污片在线观看 | 黄色av网站在线观看 | 色图自拍| 中文在线观看免费 | 91看片就是不一样 | 亚洲成人黄色在线 | 亚洲一级伦理 | 久久免费视屏 | 日韩在线第一区 | 蜜桃在线一区二区三区 | 色欲AV无码精品一区二区久久 | 日日色综合 | 国产精品无码久久久久 | 日本一区二区在线观看视频 | 欧美 丝袜 自拍 制服 另类 | 午夜精品久久久久 | 国产免费a | 国产人人干 |