国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

C/C++游戲項目教程:看完只會說“編譯飛機大戰太簡單了吧”

jsliang / 3614人閱讀

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

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

今天我就用C++帶大家一步步去完成風靡全球的小程序飛機大戰小游戲~

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

開發工具為VS2013

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

正片開始:

第一步:?打開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

?


好啦,重要的基礎代碼就這些~需要完整源碼對照的同學可以點擊文章末鏈接群領取,飛機大戰/雷霆戰機教程就到此結束啦,后續我會發布更多的項目源碼以及學習資料,希望大家可以持續關注,想要C/C++學習資料以及完整源碼素材圖形庫開發工具等的可以加群【639681529】了解,或者有問題也可以進群提問,希望大家可以在這里得到自己想要的知識,也希望如果對你有所幫助的話可以多多關注點贊評論,有建議也可以在評論區提出,謝謝大家的支持!
?

?

?點擊下方鏈接進群:

源碼素材編譯器圖形庫還有各種學習資料都在這里等你哦~https://jq.qq.com/?_wv=1027&k=ne3yBn5V

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/124024.html

相關文章

  • C/C++游戲項目詳細教程:《黃金礦工》

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

    cnio 評論0 收藏0
  • C/C++游戲項目:中國程序員一定要會的中國象棋教程

    摘要:中國象棋是中國一種流傳十分廣泛的游戲。宣布認輸的一方算輸。今天我就用語言帶大家一步步去完成好玩有趣學會就能和朋友對弈的中國象棋小游戲。 ? ? ? ?中國象棋是中國一種流傳十分廣泛的游戲。 下棋雙方根據自己對棋局形式的理解和對棋藝規律的掌握,調動車馬,組織兵力,協調作戰在棋盤這塊特定的戰場...

    kamushin233 評論0 收藏0
  • 徹底理解z-index,看完還是只會無厘頭的設置9999你打我~~~~

    摘要:如果同級父元素不是層疊上下文元素就不需要看父元素的眼色了文章到這里就結束了,希望看完這篇文章的同學可以徹底理解。 今天寫代碼用antd-mobile的checkbox時候,想在內容文本后面添加一個icon,并且需要對這個icon綁定事件,發現綁定之后怎么也點不中,調試發現原來被層層嵌套的dom元素蓋住了,肯定是z-index在作祟。可是按照我之前對z-index的了解(自信滿滿)卻怎么...

    bladefury 評論0 收藏0
  • 徹底理解z-index,看完還是只會無厘頭的設置9999你打我~~~~

    摘要:如果同級父元素不是層疊上下文元素就不需要看父元素的眼色了文章到這里就結束了,希望看完這篇文章的同學可以徹底理解。 今天寫代碼用antd-mobile的checkbox時候,想在內容文本后面添加一個icon,并且需要對這個icon綁定事件,發現綁定之后怎么也點不中,調試發現原來被層層嵌套的dom元素蓋住了,肯定是z-index在作祟。可是按照我之前對z-index的了解(自信滿滿)卻怎么...

    RobinTang 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<