摘要:飛機(jī)大戰(zhàn)這是一款經(jīng)典飛行射擊類游戲,為玩家呈現(xiàn)一場不一樣射擊體驗(yàn)。簡單的觸屏操作,觸屏按住隨意一個(gè)地方,左右移動(dòng),便可自動(dòng)攻擊敵人,上下移動(dòng)亦可躲避強(qiáng)敵。玩家在游戲中要做的就是駕駛著最新戰(zhàn)機(jī),向敵人發(fā)起沖擊。
開發(fā)工具為VS2013
?
?
#include#include//包含圖形庫頭文件 easyx#include#pragma comment(lib,"winmm.lib")//加載多媒體設(shè)備庫#define WIN_WIDTH 591#define WIN_HEIGHT 864#define PLAYER_BULLET 15 //玩家子彈數(shù)量#define ENEMYPLANE_NUM 10//定義變量 int a=666;//定義一個(gè)圖片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];//時(shí)間的變化量DWORD t1, t2;//分模塊處理,專門的事情,準(zhǔn)們的函數(shù)做void GameInit(){ //1,創(chuàng)建一個(gè)圖形窗口 initgraph(WIN_WIDTH, WIN_HEIGHT); //設(shè)置隨機(jī)數(shù)種子 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); //初始化玩家數(shù)據(jù) 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; } //初始化時(shí)間變量 t1 = t2 = GetTickCount(); //初始化敵機(jī) for (int i = 0; i < ENEMYPLANE_NUM; i++) { enemy[i].flag = false; enemy[i].width = 52; enemy[i].height = 39; }}//游戲繪制函數(shù)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); } } //繪制敵機(jī) 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();}//產(chǎn)生玩家子彈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; } }}//生成敵機(jī)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; } } }}//操控飛機(jī),開..void KeyControl(int speed){ //按鍵處理,用getch() //向上移動(dòng) 邊界處理 if(GetAsyncKeyState(VK_UP) && player.y>=0) { player.y -= speed; } //向下移動(dòng) if (GetAsyncKeyState(VK_DOWN) && player.y+player.height<=WIN_HEIGHT) { player.y += speed; } //向左移動(dòng) if (GetAsyncKeyState(VK_LEFT) && player.x+player.width/2>=0) { player.x -= speed; } //向右移動(dòng) if (GetAsyncKeyState(VK_RIGHT) && player.x+player.width/2<=WIN_WIDTH) { player.x += speed; } //發(fā)射子彈 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); //產(chǎn)生一個(gè)子彈 CreatBullet(); t1 = t2; } t2 = GetTickCount();}//生成敵機(jī)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; } } }}
?
//玩家子彈的移動(dòng)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; } } }}//操控飛機(jī),開..void KeyControl(int speed){ //按鍵處理,用getch() //向上移動(dòng) 邊界處理 if(GetAsyncKeyState(VK_UP) && player.y>=0) { player.y -= speed; } //向下移動(dòng) if (GetAsyncKeyState(VK_DOWN) && player.y+player.height<=WIN_HEIGHT) { player.y += speed; } //向左移動(dòng) if (GetAsyncKeyState(VK_LEFT) && player.x+player.width/2>=0) { player.x -= speed; } //向右移動(dòng) if (GetAsyncKeyState(VK_RIGHT) && player.x+player.width/2<=WIN_WIDTH) { player.x += speed; } //發(fā)射子彈 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); //產(chǎn)生一個(gè)子彈 CreatBullet(); t1 = t2; } t2 = GetTickCount();}
//開始...void PlayPlane(){ //每個(gè)敵軍和每個(gè)子彈都要比較 for (int i = 0; i < ENEMYPLANE_NUM; i++) { if (!enemy[i].flag) continue; //遍歷子彈數(shù)組 for (int k = 0; k < PLAYER_BULLET; k++) { if (!pbull[k].flag) continue; //判斷子彈是否擊中敵機(jī) if (pbull[k].x>enemy[i].x && pbull[k].xenemy[i].y && pbull[k].y
源碼素材編譯器圖形庫還有各種學(xué)習(xí)資料都在這里等你哦~https://jq.qq.com/?_wv=1027&k=ne3yBn5V
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/124024.html
摘要:黃金礦工是一款非常經(jīng)典的游戲。在游戲中,玩家通過不斷挖礦,獲取金子,最終能夠闖入下一關(guān)。游戲的玩法主要是通過不斷采集地下的黃金和鉆石,來得到更高的積分。 ? ? ?《黃金礦工》是一款非常經(jīng)典的游戲。在游戲中,玩家通過不斷挖礦,獲取金子,最終能夠闖入下一關(guān)。在這個(gè)過程中,會(huì)不斷有巖石、煙霧、老...
摘要:中國象棋是中國一種流傳十分廣泛的游戲。宣布認(rèn)輸?shù)囊环剿爿敗=裉煳揖陀谜Z言帶大家一步步去完成好玩有趣學(xué)會(huì)就能和朋友對(duì)弈的中國象棋小游戲。 ? ? ? ?中國象棋是中國一種流傳十分廣泛的游戲。 下棋雙方根據(jù)自己對(duì)棋局形式的理解和對(duì)棋藝規(guī)律的掌握,調(diào)動(dòng)車馬,組織兵力,協(xié)調(diào)作戰(zhàn)在棋盤這塊特定的戰(zhàn)場...
摘要:如果同級(jí)父元素不是層疊上下文元素就不需要看父元素的眼色了文章到這里就結(jié)束了,希望看完這篇文章的同學(xué)可以徹底理解。 今天寫代碼用antd-mobile的checkbox時(shí)候,想在內(nèi)容文本后面添加一個(gè)icon,并且需要對(duì)這個(gè)icon綁定事件,發(fā)現(xiàn)綁定之后怎么也點(diǎn)不中,調(diào)試發(fā)現(xiàn)原來被層層嵌套的dom元素蓋住了,肯定是z-index在作祟。可是按照我之前對(duì)z-index的了解(自信滿滿)卻怎么...
摘要:如果同級(jí)父元素不是層疊上下文元素就不需要看父元素的眼色了文章到這里就結(jié)束了,希望看完這篇文章的同學(xué)可以徹底理解。 今天寫代碼用antd-mobile的checkbox時(shí)候,想在內(nèi)容文本后面添加一個(gè)icon,并且需要對(duì)這個(gè)icon綁定事件,發(fā)現(xiàn)綁定之后怎么也點(diǎn)不中,調(diào)試發(fā)現(xiàn)原來被層層嵌套的dom元素蓋住了,肯定是z-index在作祟??墒前凑瘴抑皩?duì)z-index的了解(自信滿滿)卻怎么...
閱讀 3630·2021-11-22 09:34
閱讀 3198·2021-11-15 11:38
閱讀 3078·2021-10-27 14:16
閱讀 1261·2021-10-18 13:35
閱讀 2437·2021-09-30 09:48
閱讀 3439·2021-09-29 09:34
閱讀 1661·2019-08-30 15:54
閱讀 1830·2019-08-26 11:57