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

資訊專欄INFORMATION COLUMN

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

cnio / 1890人閱讀

摘要:黃金礦工是一款非常經(jīng)典的游戲。在游戲中,玩家通過(guò)不斷挖礦,獲取金子,最終能夠闖入下一關(guān)。游戲的玩法主要是通過(guò)不斷采集地下的黃金和鉆石,來(lái)得到更高的積分。

? ? ?《黃金礦工》是一款非常經(jīng)典的游戲。在游戲中,玩家通過(guò)不斷挖礦,獲取金子,最終能夠闖入下一關(guān)。在這個(gè)過(guò)程中,會(huì)不斷有巖石、煙霧、老鼠來(lái)?yè)v亂,甚至還會(huì)出現(xiàn)扛著炸藥包的小老鼠,玩家必須戰(zhàn)勝它們,才能進(jìn)入更深的礦坑。

游戲的玩法主要是通過(guò)不斷采集地下的黃金和鉆石,來(lái)得到更高的積分。只有完成任務(wù)目標(biāo),才可以通過(guò)相應(yīng)的關(guān)卡。游戲畫(huà)面中沙灘上的人物便是玩家的角色,下方深褐色的部分是地下,而黃金和鉆石就是玩家需要采集的物品。人物右邊的四個(gè)方框里的物品是游戲中可以使用的道具。

畫(huà)面中的虛線就是游戲中的探測(cè)器,探測(cè)器會(huì)不斷的左右擺動(dòng),當(dāng)擺動(dòng)到地下的黃金和鉆石的位置時(shí),只需要點(diǎn)擊礦坑任意處,便可以發(fā)射勘探頭采集到這些物品,當(dāng)然一定要瞄準(zhǔn)好再出手呦。

當(dāng)然想要順利采集到豐富的資源也不是那么簡(jiǎn)單的,地下礦坑中,會(huì)有各式各樣的困難和阻礙來(lái)干擾玩家的采集,這時(shí)我們就要用到人物右邊的各種道具了,當(dāng)?shù)V坑中采集到石塊的時(shí)候,玩家可以使用炸藥棒來(lái)炸毀這些石塊。當(dāng)?shù)V坑中有大量石塊阻礙玩家的采集時(shí),這時(shí)就可以用炸彈來(lái)拖拽到礦坑中石塊群的位置,會(huì)一次性炸毀所有礙事的石塊。當(dāng)?shù)V坑中煙霧桶被引爆后,看不清地下情況的時(shí)候,我們可以使用電風(fēng)扇,它會(huì)把所有的煙霧都吹散,讓玩家可以清楚的徹底看清礦坑的分布。礦坑中不時(shí)也會(huì)有小老鼠來(lái)?yè)v亂,不用擔(dān)心,我們有老鼠藥來(lái)對(duì)付這些小東西,只要把老鼠藥拖拽到老鼠所在的位置,就會(huì)瞬間消滅這些小麻煩,讓玩家更順利的采集到想要得到的資源。

緊張刺激的對(duì)戰(zhàn),輕松有趣的玩法,豐富多樣的道具,還有精美細(xì)致的畫(huà)面,這就是我們今天要完成的項(xiàng)目《黃金礦工》

在此之前呢,和大家說(shuō)明一下,因?yàn)檫@是一個(gè)比較大的項(xiàng)目了,所以展示所有代碼會(huì)有些困難,從中還要數(shù)據(jù)庫(kù)的參與,所以我裁剪了主要部分的代碼,主要目的的讓大家明白實(shí)現(xiàn)這個(gè)項(xiàng)目的難點(diǎn)以及邏輯思路,希望大家可以理解
?

好了,話不多說(shuō),開(kāi)始了

首先我們先創(chuàng)建一個(gè)頭文件,把一些結(jié)構(gòu)體以及枚舉類型的函數(shù)放進(jìn)去,這樣會(huì)讓整個(gè)項(xiàng)目看起來(lái)更加有序,更好理解,先把枚舉類型放進(jìn)去

enum ATTR{	//圖片對(duì)應(yīng)的數(shù)組下標(biāo)	i_gold=1,	i_money=3,	i_role=5,	i_stone=9,	i_bk= i_stone+1,	//窗口尺寸	WIDTH = 1080,	HEIGHT= 640,	//物品數(shù)量	MINE_NUM=10,}; enum TYPE{	//物品類型	GOLD,	//金塊	MONEY,	//錢(qián)袋	STONE,	//石頭	//擺動(dòng)方向	LEFT,	RIGHT,	//擺動(dòng)狀態(tài)	M_LONG,	M_NORMAL,	M_SHORT,};

之后把我們的老朋友結(jié)構(gòu)體也放進(jìn)去

struct Role{	int x;		//貼圖的位置	int y;	int width;//圖片寬度和高度	int height;	int coin;//金幣};struct Mine //物品{	int x;	int y;	int size;//用來(lái)計(jì)算碰撞	int flag;//物品是否存在	int type;//物品類型,錢(qián)袋,石頭,金塊	int gold;//價(jià)值};//鉤子struct Hook{	double x;//繩子開(kāi)始坐標(biāo),固定不變的	double y;	double endx;//末端變化的坐標(biāo)	double endy;	int len;//繩子長(zhǎng)度	int dir;//擺動(dòng)方向	double angle;//擺動(dòng)角度	double speed;//速度	double vx;//速度分量	double vy;	int swing;//是否在擺動(dòng)	int state;//伸長(zhǎng)狀態(tài),伸長(zhǎng),正常,縮短	int index;//抓到的物品下標(biāo)};

OK,接下來(lái)就是我們的主要函數(shù)main.Cpp了,記得開(kāi)始的時(shí)候加上我們寫(xiě)的頭文件,先寫(xiě)初始化函數(shù)

void GameInit(){	//初始化隨機(jī)數(shù)種子	srand(GetTickCount());	//初始化角色數(shù)據(jù)	role.coin = 0;	role.width = 140;	role.height = 120;	role.x = WIDTH / 2 - role.width / 2;//讓角色圖片居中顯示	role.y = 0;	//加載圖片	for (int i = 0; i < 10; i++)	{		char fileName[20];		sprintf(fileName, "./images/%d.jpg", i);		if (i <= 1)		{			loadimage(&img[i], fileName,73,62);		}		else		{			loadimage(&img[i], fileName);		}		}	loadimage(&img[i_bk], "./images/bk.jpg",WIDTH,HEIGHT-role.height);	//初始化物品	for (int i = 0; i < MINE_NUM; i++)	{		mine[i].flag = 1;		mine[i].size = 60;		mine[i].type = rand() % 3;		mine[i].x=rand()%(WIDTH-mine[i].size);		mine[i].y=rand()%(HEIGHT-role.height-100)+ role.height+ 50;		mine[i].gold = rand()%600+rand()%200;	}	//初始化鉤子	hook.x = role.x+45;	hook.y = role.y+100;	hook.len = 50;	hook.endx = hook.x;	hook.endy=hook.y+hook.len;	hook.angle = 0.0;	hook.dir = RIGHT;	hook.state = M_NORMAL;	hook.vx = 0;	hook.vy = 0;	hook.speed = 5.0;	hook.index = -1;}

再寫(xiě)我們的繪制函數(shù),這個(gè)比較簡(jiǎn)單,就是貼圖

void Gamedraw(){	BeginBatchDraw();	//設(shè)置背景顏色	setbkcolor(GREEN);	cleardevice();	putimage(0, role.height, &img[i_bk]);	//透明貼圖 兩張圖片,一張掩碼圖,一張?jiān)瓐D	putimage(role.x, role.y, &img[i_role-1],SRCAND);//掩碼圖	putimage(role.x, role.y, &img[i_role],SRCPAINT);//原圖		//繪制鉤子	setlinestyle(PS_SOLID, 5);	setlinecolor(BROWN);	line(hook.x, hook.y, hook.endx, hook.endy);	//繪制物品	for (int i = 0; i < MINE_NUM; i++)	{		if (mine[i].flag)		{			switch (mine[i].type)			{			case GOLD:				putimage(mine[i].x, mine[i].y, &img[i_gold-1],SRCAND);				putimage(mine[i].x, mine[i].y, &img[i_gold],SRCPAINT);				break;			case MONEY:				putimage(mine[i].x, mine[i].y, &img[i_money-1], SRCAND);				putimage(mine[i].x, mine[i].y, &img[i_money], SRCPAINT);				break;			case STONE:				putimage(mine[i].x, mine[i].y, &img[i_stone-1], SRCAND);				putimage(mine[i].x, mine[i].y, &img[i_stone], SRCPAINT);				break;			}		}	}	//繪制分?jǐn)?shù)	char s[30];	sprintf(s, "金幣:%d", role.coin);	settextstyle(50, 0, "黑體");	outtextxy(50, 50, s);	EndBatchDraw();}

鉤子擺動(dòng)的函數(shù),鉤子該如何的擺,主要是讓他不要往天上擺就行

//鉤子擺動(dòng)void hookRock(){	if (hook.state == M_NORMAL)	{		if (hook.dir == RIGHT)		{			hook.angle++;		}		else		{			hook.angle--;		}		if (hook.angle > 80)		{			hook.dir = LEFT;		}		else if (hook.angle < -80)		{			hook.dir = RIGHT;		}		hook.endx = hook.x + sin(π / 180 * hook.angle) * hook.len;		hook.endy = hook.y + cos(π / 180 * hook.angle) * hook.len;	}}int distance(struct Hook hook){	double dis=sqrt((hook.x-hook.endx)* (hook.x - hook.endx) + (hook.y-hook.endy) * (hook.y - hook.endy));	return dis <= hook.len;}void keyControl(){	//按空格伸長(zhǎng)	if (GetAsyncKeyState(VK_SPACE) && hook.state == M_NORMAL)	{		hook.state = M_LONG;		hook.vx = sin(π / 180 * hook.angle) * hook.speed;		hook.vy = cos(π / 180 * hook.angle) * hook.speed;	}	if (hook.endx <= 0 || hook.endx >= WIDTH || hook.endy >= HEIGHT)	{		hook.state = M_SHORT;	}		if (hook.state == M_LONG)	{		hook.endx += hook.vx;		hook.endy += hook.vy;	}	else if (hook.state == M_SHORT)	{		hook.endx -= hook.vx;		hook.endy -= hook.vy;		//如果縮短到原來(lái)的長(zhǎng)度,就停止縮短,判斷起點(diǎn)和末端的距離是否等于,長(zhǎng)度		if (distance(hook))		{			hook.state = M_NORMAL;		}	}}

接下來(lái)是我們的抓取函數(shù),也是比較簡(jiǎn)單

?void grap(){	//找到抓取的是哪個(gè)物品	for (int i = 0; i < MINE_NUM; i++)	{		if (mine[i].flag &&			hook.endx > mine[i].x && hook.endxmine[i].y && hook.endy < mine[i].y + mine[i].size)		{			hook.index = i;//保存抓到的物品的下標(biāo)			break;		}	}	if (hook.index != -1)	{		hook.state = M_SHORT;		mine[hook.index].x = hook.endx-mine[hook.index].size/2;		mine[hook.index].y = hook.endy- mine[hook.index].size / 2;		if (distance(hook))		{			hook.state = M_NORMAL;			mine[hook.index].flag = 0;			role.coin += mine[hook.index].gold;			hook.state = M_NORMAL;			hook.index = -1;		}	}}?

最后是我們的主函數(shù)

int main(){	initgraph(WIDTH,HEIGHT,1);	GameInit();	while (1)	{		printf("%lf,%lf vxy(%lf,%lf)/n", hook.endx, hook.endy,hook.vx,hook.vy);		hookRock();		Gamedraw();		keyControl();   		grap();	}	closegraph();	return 0;}

這就是我們《黃金礦工》的主要代碼了,有人會(huì)問(wèn)了,好像也不多呀,從代碼上看確實(shí)還好,但這個(gè)項(xiàng)目牽扯的東西有點(diǎn)多,包括數(shù)據(jù)庫(kù),考慮到有些同學(xué)看不懂我就不放在這里了,有興趣的同學(xué)可以進(jìn)去領(lǐng)取源碼之后自己學(xué)習(xí),最后想說(shuō)的是,寫(xiě)游戲項(xiàng)目其實(shí)還好,主要是理清初始化函數(shù)以及更新函數(shù),包裝起來(lái)就很好理解了,好啦,希望大家可以在這里得到自己想要的知識(shí)以及快樂(lè)吧,也希望大家可以給UP主一個(gè)關(guān)注,非常感謝大家了?。。?/span>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

?后續(xù)UP主還會(huì)發(fā)布更多的項(xiàng)目源碼以及學(xué)習(xí)資料,希望大家可以持續(xù)關(guān)注,有什么問(wèn)題可以回帖留言,我盡量回答。想要C/C++學(xué)習(xí)資料以及其他項(xiàng)目的源碼的可以加群【1083227756】了解。想要對(duì)程序員的未來(lái)發(fā)展有興趣的也可加群閑聊。也可以關(guān)注微信公眾號(hào):【狐貍的編碼時(shí)光】,希望和大家一起學(xué)習(xí)進(jìn)步?。?!


點(diǎn)擊下方鏈接進(jìn)群更快拿到學(xué)習(xí)資料以及項(xiàng)目素材?


進(jìn)群領(lǐng)取學(xué)習(xí)資料以及項(xiàng)目源碼素材包https://jq.qq.com/?_wv=1027&k=sttR3REF

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/123068.html

相關(guān)文章

  • 你所不知道 ? Blockchain

    前言 未來(lái)的公司形態(tài)會(huì)不斷地演化,去中心化,分布式,強(qiáng)化合作,適應(yīng)變化,直到徹底地被網(wǎng)絡(luò)化。終極公司的形式將會(huì)變得與生物體相同,無(wú)縫地集成到生態(tài)圈中,成為其中的一個(gè)環(huán)節(jié)?!?凱文·凱利《失控》 小劇場(chǎng) 小二: 糖糖,我愛(ài)你哦~ 糖糖: 你騙人!男人的話能信母豬能上樹(shù)。 小二: 我可以向全世界證明,我說(shuō)的是真的~ 糖糖: 那你怎么證明啊~ 小二: 我可以用 區(qū)塊鏈 寫(xiě)下 糖糖我愛(ài)你哦~...

    Tecode 評(píng)論0 收藏0
  • 深入了解 CKB 經(jīng)濟(jì)模型中的創(chuàng)新點(diǎn)之一:Nervos DAO

    摘要:在上一節(jié)秘猿科技小課堂中,我們已經(jīng)提到了加密經(jīng)濟(jì)網(wǎng)絡(luò)中底層公鏈經(jīng)濟(jì)模型中的創(chuàng)新點(diǎn)和二級(jí)發(fā)行政策。長(zhǎng)期持幣者這部分持幣者會(huì)把當(dāng)作類似比特幣一樣的資產(chǎn)來(lái)看待。我們都知道擁有一個(gè)比特幣,代表著擁有兩千一百萬(wàn)分之一的比特幣稀缺性。 在上一節(jié)秘猿科技小課堂中,我們已經(jīng)提到了Nervos 加密經(jīng)濟(jì)網(wǎng)絡(luò)中底層公鏈 CKB 經(jīng)濟(jì)模型中的創(chuàng)新點(diǎn):Nervos DAO 和 二級(jí)發(fā)行政策。在本文中,我們深入...

    Yangyang 評(píng)論0 收藏0
  • 從經(jīng)濟(jì)模型角度看比特幣和以太坊存在的問(wèn)題

    摘要:比特幣和以太坊像兩座最早出現(xiàn)的虛擬城市。下面我們先來(lái)分析比特幣和以太坊這兩個(gè)最大加密經(jīng)濟(jì)體的經(jīng)濟(jì)模型,我們經(jīng)過(guò)研究發(fā)現(xiàn)它們?cè)诳沙掷m(xù)性上都存在各自的問(wèn)題。狀態(tài)爆炸比特幣與智能合約平臺(tái),都 公鏈的競(jìng)爭(zhēng)是慘烈的,這個(gè)戰(zhàn)場(chǎng)里的玩家要想生存下來(lái),既要有絕活,還得沒(méi)短板。在構(gòu)建加密經(jīng)濟(jì)網(wǎng)絡(luò)上,在技術(shù)實(shí)現(xiàn)和共識(shí)協(xié)議部分,我們?yōu)榇蠹曳窒砹薈KB 的絕活,即: 與時(shí)俱進(jìn)的 Cell 模型 用 RIS...

    thekingisalwaysluc 評(píng)論0 收藏0
  • 區(qū)塊鏈概念 That You Must Know 第四期(1)

    摘要:挖礦是什么挖礦是將一段時(shí)間內(nèi)比特幣系統(tǒng)中發(fā)生的交易進(jìn)行確認(rèn),并記錄在區(qū)塊鏈上形成新區(qū)塊的過(guò)程。而成功搶到記賬權(quán)的礦工,會(huì)獲得系統(tǒng)新生的比特幣獎(jiǎng)勵(lì)。礦機(jī)只執(zhí)行單一的計(jì)算程序,實(shí)際是礦工之間比拼算力,擁有較多算力的礦工挖到比特幣的概率更大。 第四期 有關(guān)挖礦和獲取比特幣(1) 卡酷少Wechat:13260325501 了解了這么多,大家是否想獲取一些屬于自己的比特幣呢?之前我們?cè)诘谝?..

    evin2016 評(píng)論0 收藏0
  • 【Filecoin源碼倉(cāng)庫(kù)全解析】第七章:了解PoRep與PoSt并參與復(fù)制證明游戲

    摘要:如上圖,驗(yàn)證過(guò)程可以表述為驗(yàn)證者會(huì)按照一定的規(guī)則向礦工提起挑戰(zhàn),挑戰(zhàn)是隨機(jī)生成的,礦工不能提前獲知。三時(shí)空證明如圖所示,可以理解為礦工一定時(shí)間內(nèi)持續(xù)地生成復(fù)制證明和接受挑戰(zhàn)和驗(yàn)證的過(guò)程,并通過(guò)這個(gè)過(guò)程,更新全網(wǎng)存儲(chǔ)算力。 歡迎大家來(lái)到第七章,經(jīng)過(guò)前章《【Filecoin源碼倉(cāng)庫(kù)全解析】第六章:如何單機(jī)部署多節(jié)點(diǎn)集群及礦池設(shè)計(jì)思路》的介紹,我們分享了如何在單機(jī)部署多節(jié)點(diǎn)集群的知識(shí)以及礦池...

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

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

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<