成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

C/C++游戲項(xiàng)目教程:看完只會(huì)說“編譯飛機(jī)大戰(zhàn)太簡單了吧”

jsliang / 3629人閱讀

摘要:飛機(jī)大戰(zhàn)這是一款經(jīng)典飛行射擊類游戲,為玩家呈現(xiàn)一場不一樣射擊體驗(yàn)。簡單的觸屏操作,觸屏按住隨意一個(gè)地方,左右移動(dòng),便可自動(dòng)攻擊敵人,上下移動(dòng)亦可躲避強(qiáng)敵。玩家在游戲中要做的就是駕駛著最新戰(zhàn)機(jī),向敵人發(fā)起沖擊。

? ? ? 《飛機(jī)大戰(zhàn)》這是一款經(jīng)典飛行射擊類游戲,為玩家呈現(xiàn)一場不一樣射擊體驗(yàn)。簡單的觸屏操作,觸屏按住隨意一個(gè)地方,左右移動(dòng),便可自動(dòng)攻擊敵人,上下移動(dòng)亦可躲避強(qiáng)敵。玩家在游戲中要做的就是駕駛著最新戰(zhàn)機(jī),向敵人發(fā)起沖擊。

今天我就用C++帶大家一步步去完成風(fēng)靡全球的小程序飛機(jī)大戰(zhàn)小游戲~

PS:要安裝easyx圖形庫哦 #include?? ?

開發(fā)工具為VS2013

在此之前呢,和大家說明一下,因?yàn)檫@是一個(gè)比較大的項(xiàng)目了,所以展示所有代碼會(huì)有些困難,所以我裁剪了主要的大部分代碼,主要目的是讓大家明白實(shí)現(xiàn)這個(gè)項(xiàng)目的邏輯思路,希望大家可以理解,完整代碼/編譯器/圖形庫在文章最下方獲取哦

正片開始:

第一步:?打開vs2013,創(chuàng)建一個(gè)項(xiàng)目,并將準(zhǔn)備好的素材資源放到同級(jí)目錄下(素材可以在文章最下方領(lǐng)?。鐖D:

?

?第二步:寫出基本框架,看自己背景圖片的像素,創(chuàng)建一個(gè)相同像素的圖形窗口,并把背景圖片加上:

?

第三步:設(shè)置音樂,及玩家、敵機(jī)、子彈,開啟雙緩沖繪圖:?

#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;			}		}	}}

?

第四步:設(shè)置子彈的移動(dòng),鼠標(biāo)操控飛機(jī):

//玩家子彈的移動(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();}

第五步:設(shè)置游戲開始,判斷子彈是否擊中:

//開始...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

?


好啦,重要的基礎(chǔ)代碼就這些~需要完整源碼對(duì)照的同學(xué)可以點(diǎn)擊文章末鏈接群領(lǐng)取,飛機(jī)大戰(zhàn)/雷霆戰(zhàn)機(jī)教程就到此結(jié)束啦,后續(xù)我會(huì)發(fā)布更多的項(xiàng)目源碼以及學(xué)習(xí)資料,希望大家可以持續(xù)關(guān)注,想要C/C++學(xué)習(xí)資料以及完整源碼素材圖形庫開發(fā)工具等的可以加群【639681529】了解,或者有問題也可以進(jìn)群提問,希望大家可以在這里得到自己想要的知識(shí),也希望如果對(duì)你有所幫助的話可以多多關(guān)注點(diǎn)贊評(píng)論,有建議也可以在評(píng)論區(qū)提出,謝謝大家的支持!
?

?

?點(diǎn)擊下方鏈接進(jìn)群:

源碼素材編譯器圖形庫還有各種學(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

相關(guān)文章

  • C/C++游戲項(xiàng)目詳細(xì)教程:《黃金礦工》

    摘要:黃金礦工是一款非常經(jīng)典的游戲。在游戲中,玩家通過不斷挖礦,獲取金子,最終能夠闖入下一關(guān)。游戲的玩法主要是通過不斷采集地下的黃金和鉆石,來得到更高的積分。 ? ? ?《黃金礦工》是一款非常經(jīng)典的游戲。在游戲中,玩家通過不斷挖礦,獲取金子,最終能夠闖入下一關(guān)。在這個(gè)過程中,會(huì)不斷有巖石、煙霧、老...

    cnio 評(píng)論0 收藏0
  • C/C++游戲項(xiàng)目:中國程序員一定要會(huì)的中國象棋教程

    摘要:中國象棋是中國一種流傳十分廣泛的游戲。宣布認(rèn)輸?shù)囊环剿爿敗=裉煳揖陀谜Z言帶大家一步步去完成好玩有趣學(xué)會(huì)就能和朋友對(duì)弈的中國象棋小游戲。 ? ? ? ?中國象棋是中國一種流傳十分廣泛的游戲。 下棋雙方根據(jù)自己對(duì)棋局形式的理解和對(duì)棋藝規(guī)律的掌握,調(diào)動(dòng)車馬,組織兵力,協(xié)調(diào)作戰(zhàn)在棋盤這塊特定的戰(zhàn)場...

    kamushin233 評(píng)論0 收藏0
  • 徹底理解z-index,看完還是只會(huì)無厘頭的設(shè)置9999你打我~~~~

    摘要:如果同級(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的了解(自信滿滿)卻怎么...

    bladefury 評(píng)論0 收藏0
  • 徹底理解z-index,看完還是只會(huì)無厘頭的設(shè)置9999你打我~~~~

    摘要:如果同級(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的了解(自信滿滿)卻怎么...

    RobinTang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<