最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言游戲項(xiàng)目球球大作戰(zhàn)實(shí)現(xiàn)流程

 更新時(shí)間:2022年01月23日 16:48:17   作者:MAX在碼字  
這篇文章主要為大家詳細(xì)介紹了如何用C語(yǔ)言實(shí)現(xiàn)流行游戲球球大作戰(zhàn),文中示例代碼介紹的非常詳細(xì),如果過(guò)程中有問(wèn)題在文末還有視頻講解,感興趣的小伙伴們可以參考一下

時(shí)間在流去,我們?cè)陂L(zhǎng)大

嗨,這里是狐貍~~

         今天是2022年1月11日,今天突然發(fā)現(xiàn)好久沒(méi)有給你們更新項(xiàng)目了,今天來(lái)教大家一個(gè)新的項(xiàng)目,一個(gè)游戲項(xiàng)目——球球大作戰(zhàn)。

         球球大作戰(zhàn)在宇宙深處一片遍布著荊棘之花的神秘星云中,生活著一群名叫“波拉哩”(譯名“球球”)的奇特生物。他們外表萌萌,卻有著勇敢的心。他們是天生的戰(zhàn)斗種族,為戰(zhàn)斗而生,為戰(zhàn)斗而亡。

         傳說(shuō)中,這群波拉哩的共同祖先是一只叫“塔坦”的超級(jí)波拉哩,塔坦的職責(zé)就是守護(hù)宇宙瑰寶“荊棘之花”,它擁有強(qiáng)大的能量,會(huì)分出分身,變化萬(wàn)物,唯一的弱點(diǎn)就是貪吃。

         一天,塔坦終于禁不住誘惑,偷食了“荊棘之花”,結(jié)果身體爆裂,成為了數(shù)以億計(jì)的小波拉哩。從此,波拉哩的族群就受到了貪食的詛咒,只能在這片星云中無(wú)休止的戰(zhàn)斗,如果停止戰(zhàn)斗,生命便會(huì)流失,消亡在茫茫的星空之中。在漫漫的歷史長(zhǎng)河里,只有最強(qiáng)大的波拉哩才能沖過(guò)這片黑暗星云,打破命運(yùn)的枷鎖,去尋找那傳說(shuō)中的光明與和平。

         為了那甜蜜的希望,波拉哩們戰(zhàn)斗著。他們必須奮力奔跑,讓自己變大變大再變大,才能對(duì)抗比自己更強(qiáng)的存在。哪怕經(jīng)歷無(wú)數(shù)失敗也必須重新凝聚力量,直到成為最強(qiáng)壯的那個(gè)。

球球大作戰(zhàn)

項(xiàng)目代碼 

 直接進(jìn)入代碼階段吧,大家認(rèn)真觀看。

1、結(jié)構(gòu)體

struct Ball //小球結(jié)構(gòu),玩家,食物,人工智障
{
	int x;
	int y;
	int r;//半徑
	DWORD color;//顏色
	bool flag;//是否存在 
};
int score = 0;//分?jǐn)?shù)
struct Ball food[FOOD_NUM];
struct Ball player;//玩家
struct Ball ai[AI_NUM];

2、初始化

void GameInit()
{
	//播放背景音樂(lè)
	mciSendString("open ./BallBGM.mp3 alias BGM", 0, 0, 0);
	//mciSendString("play BGM repeat", 0, 0, 0);
	//設(shè)置隨機(jī)數(shù)種子 時(shí)間是在不斷的變化的
	srand((unsigned)time(NULL));
	//找到每一個(gè)元素
	for (int i = 0; i < FOOD_NUM; i++)
	{
		food[i].x = rand() % WIDTH;
		food[i].y = rand() % HEIGHT;
		food[i].flag = true;//剛開(kāi)始食物是存在的,沒(méi)有被吃掉
		food[i].r = rand() % 6 + 1;
		food[i].color = RGB(rand() % 256, rand() % 256, rand() % 256);
	}
	//初始化玩家數(shù)據(jù)
	player.x = rand() % WIDTH;
	player.y = rand() % HEIGHT;
	player.r = 18;//只要比最大的食物大就可以了
	player.flag = true;
	player.color= RGB(rand() % 256, rand() % 256, rand() % 256);
	//初始化ai
	for (int i = 0; i < AI_NUM; i++)
	{
		ai[i].x = rand() % WIDTH;
		ai[i].y = rand() % HEIGHT;
		ai[i].r = rand() % 10 + 5;
		ai[i].flag = true;
		ai[i].color = RGB(rand() % 256, rand() % 256, rand() % 256);
	}
}

3、繪制函數(shù) 

void GameDraw()
{
	//防止閃屏
	BeginBatchDraw();
	setbkcolor(WHITE);
	cleardevice();//清屏
	for (int i = 0; i < FOOD_NUM; i++)
	{
		if (food[i].flag)
		{
			setfillcolor(food[i].color);//設(shè)置填充顏色
			solidcircle(food[i].x, food[i].y, food[i].r);//畫(huà)一個(gè)填充圓
		}
		else
		{
			food[i].x = rand() % WIDTH;
			food[i].y = rand() % HEIGHT;
			food[i].flag = true;//剛開(kāi)始食物是存在的,沒(méi)有被吃掉
			food[i].r = rand() % 6 + 1;
			food[i].color = RGB(rand() % 256, rand() % 256, rand() % 256);
		}
	}
	//繪制玩家
	setfillcolor(player.color);//設(shè)置填充顏色
	solidcircle(player.x, player.y, player.r);
	settextcolor(GREEN);
	settextstyle(30, 0, "黑體");
	setbkmode(0);//設(shè)置文字背景透明
	outtextxy(player.x-50, player.y, "我是最亮的崽");
	//輸出分?jǐn)?shù)
	settextcolor(BLACK);
	char str[20];
	sprintf(str,"分?jǐn)?shù):%d",score);//格式化字符串
	outtextxy(20, 20, str);
	//繪制ai
	for (int i = 0; i < AI_NUM; i++)
	{
		if (ai[i].flag)
		{
			setfillcolor(ai[i].color);//設(shè)置填充顏色
			solidcircle(ai[i].x, ai[i].y, ai[i].r);//畫(huà)一個(gè)填充圓
		}
	}
	EndBatchDraw();
}

4、玩家控制函數(shù) 

void keyControl(int speed)
{
	//獲取鍵盤(pán)消息,按得是哪一個(gè)鍵  _getch();    GetAsyncKeyState() windows系統(tǒng)函數(shù)
	if ((GetAsyncKeyState('W') || GetAsyncKeyState(VK_UP)) && player.y >= 0)//按了上鍵 y不能小于0
	{
		player.y -= speed;
	}
	if ((GetAsyncKeyState('S') || GetAsyncKeyState(VK_DOWN)) && player.y <= HEIGHT)//按了下鍵
	{
		player.y += speed;
	}
	if ((GetAsyncKeyState('A') || GetAsyncKeyState(VK_LEFT)) && player.x >= 0)//按了左鍵
	{
		player.x -= speed;
	}
	if ((GetAsyncKeyState('D') || GetAsyncKeyState(VK_RIGHT)) && player.x <= WIDTH)//按了右鍵
	{
		player.x += speed;
	}
}

5、吃食物函數(shù)

void eatFood()
{
	for (int i = 0; i < FOOD_NUM; i++)
	{
		if (food[i].flag && distance(food[i], player) <= player.r)
		{
 
			food[i].flag = false;
			player.r += food[i].r / 4;
			score++;//加分
		}
	}
}

6、電腦移動(dòng)函數(shù)

void aiMove()
{
	for (int i = 0; i < AI_NUM; i++)
	{
		if (ai[i].flag)
		{
			ai[i].x += rand() % 5-2;// ?%5={0,1,2,3,4}-2=={-2,-1,0,1,2}
			ai[i].y += rand() % 5 - 2;//0 
		}
	}
}

7、主函數(shù)

int main(int argc,char *agv[])
{
	initgraph(WIDTH, HEIGHT);
	GameInit();
	while (1)
	{
		keyControl(1);
		GameDraw();
		eatFood();
		aiMove();
	}
 
	getchar();
	return 0;
}

總結(jié)

        OK,簡(jiǎn)單總結(jié)一下下,距離上次給大家分享項(xiàng)目好像已經(jīng)過(guò)去很久了,今天的這個(gè)項(xiàng)目希望大家可以認(rèn)真的去試試,難度不大,這個(gè)項(xiàng)目暫時(shí)是個(gè)單機(jī)版的,大家可以增加玩家聯(lián)機(jī)對(duì)戰(zhàn)也是可以的,畫(huà)風(fēng)也比較簡(jiǎn)單,這些都是可以自己去優(yōu)化的,好叭,今天就到這里了哈。后續(xù)我還會(huì)發(fā)布更多的項(xiàng)目源或者學(xué)習(xí)資料,希望大家可以持續(xù)關(guān)注。

視頻講解

      今天沒(méi)有效果展示,emmmm,有很大原因是因?yàn)槟莻€(gè)錄制有點(diǎn)麻煩,有興趣的同學(xué)可以去看視頻講解,上面有詳細(xì)的代碼講解,大家可以認(rèn)真觀看

https://www.bilibili.com/video/BV1Yu41127E4/

到此這篇關(guān)于C語(yǔ)言游戲項(xiàng)目球球大作戰(zhàn)實(shí)現(xiàn)流程的文章就介紹到這了,更多相關(guān)C語(yǔ)言 球球大作戰(zhàn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入解析C++和JAVA的字符串

    深入解析C++和JAVA的字符串

    這篇文章主要介紹了C++和JAVA的字符串,JAVA 中String 和StringBuffer的區(qū)別,需要的朋友可以參考下
    2015-07-07
  • C語(yǔ)言版學(xué)生信息管理系統(tǒng)

    C語(yǔ)言版學(xué)生信息管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言版學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C++中成員函數(shù)和友元函數(shù)的使用及區(qū)別詳解

    C++中成員函數(shù)和友元函數(shù)的使用及區(qū)別詳解

    大家好,本篇文章主要講的是C++中成員函數(shù)和友元函數(shù)的使用及區(qū)別詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • c語(yǔ)言執(zhí)行Hello?World背后經(jīng)歷的步驟

    c語(yǔ)言執(zhí)行Hello?World背后經(jīng)歷的步驟

    這篇文章介紹了c語(yǔ)言執(zhí)行Hello?World背后經(jīng)歷的步驟,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • C語(yǔ)言常用的編輯器你知道幾個(gè)

    C語(yǔ)言常用的編輯器你知道幾個(gè)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言常用的編輯器,中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • C語(yǔ)言實(shí)現(xiàn)選票統(tǒng)計(jì)

    C語(yǔ)言實(shí)現(xiàn)選票統(tǒng)計(jì)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)選票統(tǒng)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C語(yǔ)言實(shí)現(xiàn)通用數(shù)據(jù)結(jié)構(gòu)之通用映射(HashMap)

    C語(yǔ)言實(shí)現(xiàn)通用數(shù)據(jù)結(jié)構(gòu)之通用映射(HashMap)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)通用數(shù)據(jù)結(jié)構(gòu)之通用映射,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • c++統(tǒng)計(jì)文件中字符個(gè)數(shù)代碼匯總

    c++統(tǒng)計(jì)文件中字符個(gè)數(shù)代碼匯總

    本文給大家匯總介紹了3種使用C++實(shí)現(xiàn)統(tǒng)計(jì)文件中的字符個(gè)數(shù)的方法,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。
    2015-09-09
  • C語(yǔ)言判斷大小端的兩種方法

    C語(yǔ)言判斷大小端的兩種方法

    大小端的問(wèn)題在很多面試筆試中都會(huì)遇到,本文主要介紹了C語(yǔ)言判斷大小端的兩種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • 淺談C語(yǔ)言的字節(jié)對(duì)齊 #pragma pack(n)2

    淺談C語(yǔ)言的字節(jié)對(duì)齊 #pragma pack(n)2

    下面小編就為大家?guī)?lái)一篇淺談C語(yǔ)言的字節(jié)對(duì)齊 #pragma pack(n)2。小編覺(jué)得挺不錯(cuò)的現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01

最新評(píng)論

攀枝花市| 株洲市| 丰原市| 灵丘县| 崇左市| 仲巴县| 江安县| 梨树县| 方城县| 阜康市| 祁阳县| 高要市| 双鸭山市| 德格县| 靖州| 雅江县| 广元市| 莲花县| 盐亭县| 合阳县| 潢川县| 五河县| 宁明县| 宁国市| 临泉县| 镇雄县| 平江县| 万盛区| 荔浦县| 平利县| 遵化市| 抚宁县| 宝兴县| 浙江省| 林芝县| 泰兴市| 泾川县| 石门县| 大城县| 上犹县| 静宁县|