摘要:飛機大戰這是一款經典飛行射擊類游戲,為玩家呈現一場不一樣射擊體驗。簡單的觸屏操作,觸屏按住隨意一個地方,左右移動,便可自動攻擊敵人,上下移動亦可躲避強敵。玩家在游戲中要做的就是駕駛著最新戰機,向敵人發起沖擊。
開發工具為VS2013
?
?
#include#include//包含圖形庫頭文件 easyx#include#pragma comment(lib,"winmm.lib")//加載多媒體設備庫#define WIN_WIDTH 591#define WIN_HEIGHT 864#define PLAYER_BULLET 15 //玩家子彈數量#define ENEMYPLANE_NUM 10//定義變量 int a=666;//定義一個圖片IMAGE bk;IMAGE img_player[4];IMAGE img_bullet[2];IMAGE img_enemy[2];struct Plane{ int x; int y; bool flag;//..是否死亡 int width; int height;}player, pbull[PLAYER_BULLET], enemy[ENEMYPLANE_NUM];//時間的變化量DWORD t1, t2;//分模塊處理,專門的事情,準們的函數做void GameInit(){ //1,創建一個圖形窗口 initgraph(WIN_WIDTH, WIN_HEIGHT); //設置隨機數種子 srand(GetTickCount()); //2,貼背景圖片 //2.1加載圖片到bk里面 loadimage(&bk, "./images/background.jpg"); loadimage(&img_player[0], "./images/planeNormal_1.jpg"); loadimage(&img_player[1], "./images/planeNormal_2.jpg"); loadimage(&img_player[2], "./images/planeBoom_1.jpg"); loadimage(&img_player[3], "./images/planeBoom_2.jpg"); loadimage(&img_bullet[0], "./images/bullet1.jpg"); loadimage(&img_bullet[1], "./images/bullet2.jpg"); loadimage(&img_enemy[0], "./images/enemy_1.jpg"); loadimage(&img_enemy[1], "./images/enemy_2.jpg"); //3,播放音樂 首先打開音樂,然后播放音樂 mciSendString("open ./images/game_music.mp3 alias BGM", 0, 0, 0); mciSendString("play BGM repeat", 0, 0, 0); //初始化玩家數據 player.height = 120; player.width = 117; player.x = WIN_WIDTH / 2 - player.width / 2; player.y = WIN_HEIGHT - player.height; player.flag = true; //初始化子彈 for (int i = 0; i < PLAYER_BULLET; i++) { pbull[i].flag = false; pbull[i].height = 24; pbull[i].width = 19; } //初始化時間變量 t1 = t2 = GetTickCount(); //初始化敵機 for (int i = 0; i < ENEMYPLANE_NUM; i++) { enemy[i].flag = false; enemy[i].width = 52; enemy[i].height = 39; }}//游戲繪制函數void GameDarw(){ //雙緩沖繪圖,防止畫面閃爍 BeginBatchDraw(); //2.2輸出背景圖片 putimage(0, 0, &bk); //透明貼圖 if (player.flag) { putimage(player.x, player.y, &img_player[0], NOTSRCERASE); putimage(player.x, player.y, &img_player[1], SRCINVERT); } //繪制玩家子彈 for (int i = 0; i < PLAYER_BULLET; i++) { if (pbull[i].flag) { putimage(pbull[i].x, pbull[i].y, &img_bullet[0], NOTSRCERASE); putimage(pbull[i].x, pbull[i].y, &img_bullet[1], SRCINVERT); } } //繪制敵機 for (int i = 0; i < ENEMYPLANE_NUM; i++) { if (enemy[i].flag) { putimage(enemy[i].x, enemy[i].y, &img_enemy[0], NOTSRCERASE); putimage(enemy[i].x, enemy[i].y, &img_enemy[1], SRCINVERT); } } EndBatchDraw();}//產生玩家子彈void CreatBullet(){ for (int i = 0; i < PLAYER_BULLET; i++) { if (!pbull[i].flag) { pbull[i].x = player.x+53; pbull[i].y = player.y; pbull[i].flag = true; break; } }}//生成敵機void CreateEnemy(){ for (int i = 0; i < ENEMYPLANE_NUM; i++) { if (!enemy[i].flag) { enemy[i].x = rand() % (WIN_WIDTH - enemy[i].width); enemy[i].y =0; enemy[i].flag = true; break; } }}void EnemyMove(int speed){ for (int i = 0; i < ENEMYPLANE_NUM; i++) { if (enemy[i].flag) { enemy[i].y += speed; if (enemy[i].y>WIN_HEIGHT) { enemy[i].flag = false; } } }}//操控飛機,開..void KeyControl(int speed){ //按鍵處理,用getch() //向上移動 邊界處理 if(GetAsyncKeyState(VK_UP) && player.y>=0) { player.y -= speed; } //向下移動 if (GetAsyncKeyState(VK_DOWN) && player.y+player.height<=WIN_HEIGHT) { player.y += speed; } //向左移動 if (GetAsyncKeyState(VK_LEFT) && player.x+player.width/2>=0) { player.x -= speed; } //向右移動 if (GetAsyncKeyState(VK_RIGHT) && player.x+player.width/2<=WIN_WIDTH) { player.x += speed; } //發射子彈 if (GetAsyncKeyState(VK_SPACE) && t2-t1>200) { mciSendString("close gun", 0, 0, 0); mciSendString("open ./images/f_gun.mp3 alias gun", 0, 0, 0); mciSendString("play gun", 0, 0, 0); //產生一個子彈 CreatBullet(); t1 = t2; } t2 = GetTickCount();}//生成敵機void CreateEnemy(){ for (int i = 0; i < ENEMYPLANE_NUM; i++) { if (!enemy[i].flag) { enemy[i].x = rand() % (WIN_WIDTH - enemy[i].width); enemy[i].y =0; enemy[i].flag = true; break; } }}void EnemyMove(int speed){ for (int i = 0; i < ENEMYPLANE_NUM; i++) { if (enemy[i].flag) { enemy[i].y += speed; if (enemy[i].y>WIN_HEIGHT) { enemy[i].flag = false; } } }}
?
//玩家子彈的移動void BulletMove(int speed){ for (int i = 0; i < PLAYER_BULLET; i++) { if (pbull[i].flag) { pbull[i].y -= speed ; if (pbull[i].y < 0) { pbull[i].flag = false; } } }}//操控飛機,開..void KeyControl(int speed){ //按鍵處理,用getch() //向上移動 邊界處理 if(GetAsyncKeyState(VK_UP) && player.y>=0) { player.y -= speed; } //向下移動 if (GetAsyncKeyState(VK_DOWN) && player.y+player.height<=WIN_HEIGHT) { player.y += speed; } //向左移動 if (GetAsyncKeyState(VK_LEFT) && player.x+player.width/2>=0) { player.x -= speed; } //向右移動 if (GetAsyncKeyState(VK_RIGHT) && player.x+player.width/2<=WIN_WIDTH) { player.x += speed; } //發射子彈 if (GetAsyncKeyState(VK_SPACE) && t2-t1>200) { mciSendString("close gun", 0, 0, 0); mciSendString("open ./images/f_gun.mp3 alias gun", 0, 0, 0); mciSendString("play gun", 0, 0, 0); //產生一個子彈 CreatBullet(); t1 = t2; } t2 = GetTickCount();}
//開始...void PlayPlane(){ //每個敵軍和每個子彈都要比較 for (int i = 0; i < ENEMYPLANE_NUM; i++) { if (!enemy[i].flag) continue; //遍歷子彈數組 for (int k = 0; k < PLAYER_BULLET; k++) { if (!pbull[k].flag) continue; //判斷子彈是否擊中敵機 if (pbull[k].x>enemy[i].x && pbull[k].xenemy[i].y && pbull[k].y
源碼素材編譯器圖形庫還有各種學習資料都在這里等你哦~https://jq.qq.com/?_wv=1027&k=ne3yBn5V
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/124024.html
摘要:黃金礦工是一款非常經典的游戲。在游戲中,玩家通過不斷挖礦,獲取金子,最終能夠闖入下一關。游戲的玩法主要是通過不斷采集地下的黃金和鉆石,來得到更高的積分。 ? ? ?《黃金礦工》是一款非常經典的游戲。在游戲中,玩家通過不斷挖礦,獲取金子,最終能夠闖入下一關。在這個過程中,會不斷有巖石、煙霧、老...
摘要:中國象棋是中國一種流傳十分廣泛的游戲。宣布認輸的一方算輸。今天我就用語言帶大家一步步去完成好玩有趣學會就能和朋友對弈的中國象棋小游戲。 ? ? ? ?中國象棋是中國一種流傳十分廣泛的游戲。 下棋雙方根據自己對棋局形式的理解和對棋藝規律的掌握,調動車馬,組織兵力,協調作戰在棋盤這塊特定的戰場...
摘要:如果同級父元素不是層疊上下文元素就不需要看父元素的眼色了文章到這里就結束了,希望看完這篇文章的同學可以徹底理解。 今天寫代碼用antd-mobile的checkbox時候,想在內容文本后面添加一個icon,并且需要對這個icon綁定事件,發現綁定之后怎么也點不中,調試發現原來被層層嵌套的dom元素蓋住了,肯定是z-index在作祟。可是按照我之前對z-index的了解(自信滿滿)卻怎么...
摘要:如果同級父元素不是層疊上下文元素就不需要看父元素的眼色了文章到這里就結束了,希望看完這篇文章的同學可以徹底理解。 今天寫代碼用antd-mobile的checkbox時候,想在內容文本后面添加一個icon,并且需要對這個icon綁定事件,發現綁定之后怎么也點不中,調試發現原來被層層嵌套的dom元素蓋住了,肯定是z-index在作祟。可是按照我之前對z-index的了解(自信滿滿)卻怎么...
閱讀 3615·2021-11-22 09:34
閱讀 3185·2021-11-15 11:38
閱讀 3038·2021-10-27 14:16
閱讀 1233·2021-10-18 13:35
閱讀 2423·2021-09-30 09:48
閱讀 3429·2021-09-29 09:34
閱讀 1625·2019-08-30 15:54
閱讀 1818·2019-08-26 11:57