這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)——《球球大作戰(zhàn)項(xiàng)目》,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下!在室友面前秀一下豈不是美滋滋!
游戲介紹:
這是一個(gè)大球吃小球的世界,玩家的目標(biāo)是要努力吃成最大的球球。在游戲一開始,玩家出現(xiàn)在地圖上隨機(jī)位置,地圖里灑滿了小彩豆,玩家吃掉小彩豆體積就會增大,當(dāng)增大到比別人的球大時(shí),就可以吃別人的球啦,當(dāng)然也得躲避更大的球。小球速度快,大球速度慢。球球到達(dá)一定重量后,可以分身,一個(gè)球變成等大的兩個(gè)球,可以再次分身,但是最多可以擁有16個(gè)分身。
本期就是帶著大家用C語言去開發(fā)一款自己寫的簡易版球球大作戰(zhàn),一定要自己動(dòng)手來寫喲~
本項(xiàng)目編譯環(huán)境:VS2019/VS2013;
插件:圖形庫插件easyX,涉及圖片素材可以自行百度找也可以關(guān)注文末領(lǐng)??;
配套講解教程:球球大作戰(zhàn)游戲教程——嗶哩嗶哩
源代碼示例:
//玩家,用圓表示,用變量表示玩家的坐標(biāo)struct Ball //定義小球的結(jié)構(gòu),玩家,ai,食物{int x;int y;int r;bool flag;//是否存在標(biāo)志DWORD color;//小球顏色}player,food[FOOD_NUM],ai[AI_NUM];//定義變量//int a; 圖片 IMAGE map;IMAGE map(MAP_WIDTH, MAP_HEIGHT);POINT cameraPos;//攝像機(jī)位置void CameraUpdate(){//以人物為中心,計(jì)算攝像機(jī)的位置cameraPos.x = player.x - WIN_WIDTH / 2;cameraPos.y = player.y - WIN_HEIGHT / 2;if (cameraPos.x < 0) cameraPos.x = 0;if (cameraPos.y < 0) cameraPos.y = 0;if (cameraPos.x > MAP_WIDTH - WIN_WIDTH) cameraPos.x = MAP_WIDTH - WIN_WIDTH;if (cameraPos.y > MAP_HEIGHT - WIN_HEIGHT) cameraPos.y = MAP_HEIGHT - WIN_HEIGHT;}//初始化數(shù)據(jù)void GameInit(){mciSendString("open ./BallBGM.mp3 alias BGM", 0, 0, 0);mciSendString("play BGM repeat", 0, 0, 0);//設(shè)置隨機(jī)數(shù)種子srand((unsigned)time(NULL));player.x = rand() % MAP_WIDTH;player.y = rand() % MAP_HEIGHT;player.r = 15;player.flag = true;player.color = RGB(rand() % 256, rand() % 256, rand() % 256);//初始化食物數(shù)據(jù)for (int i = 0; i < FOOD_NUM; i++){food[i].x = rand() % MAP_WIDTH;food[i].y = rand() % MAP_HEIGHT;food[i].r = rand() % 5+1;food[i].flag = true;food[i].color = RGB(rand() % 256, rand() % 256, rand() % 256);}//初始化aifor (int i = 0; i < AI_NUM; i++){ai[i].x = rand() % MAP_WIDTH;ai[i].y = rand() % MAP_HEIGHT;ai[i].r = rand() % 15 + 1;ai[i].flag = true;ai[i].color = RGB(rand() % 256, rand() % 256, rand() % 256);}}void GameDraw(){//加上雙緩沖繪圖,防止閃屏BeginBatchDraw();//設(shè)置工作區(qū)SetWorkingImage(&map);//設(shè)置背景顏色setbkcolor(WHITE);//清屏cleardevice();//繪制食物for (int i = 0; i < FOOD_NUM; i++){if (food[i].flag){setfillcolor(food[i].color);solidcircle(food[i].x, food[i].y, food[i].r);}}//繪制智障for (int i = 0; i < AI_NUM; i++){if (ai[i].flag){setfillcolor(ai[i].color);solidcircle(ai[i].x, ai[i].y, ai[i].r);}}//繪制玩家if (player.flag){setfillcolor(player.color);solidcircle(player.x, player.y, player.r);settextcolor(BLACK);setbkmode(TRANSPARENT);outtextxy(player.x, player.y, "頑石老師");}SetWorkingImage();//恢復(fù)默認(rèn)工作區(qū)CameraUpdate();//putimage(cameraPos.x, cameraPos.y, &map);putimage(0, 0, WIN_WIDTH, WIN_HEIGHT, &map, cameraPos.x, cameraPos.y);EndBatchDraw();//結(jié)束雙緩沖繪圖}//控制玩家void PlayerContrl(int speed){//往上移動(dòng),什么發(fā)生改變?y坐標(biāo)減if (GetAsyncKeyState(VK_UP) && player.y-player.r >= 0){player.y -= speed;}if (GetAsyncKeyState(VK_DOWN) && player.y + player.r{player.y += speed;}if (GetAsyncKeyState(VK_LEFT) && player.x - player.r >= 0){player.x -= speed;}if (GetAsyncKeyState(VK_RIGHT) && player.x + player.r{player.x += speed;}}//求兩點(diǎn)之間的距離double DisTance(struct Ball b1,struct Ball b2){return sqrt((double)(b1.x - b2.x)*(b1.x - b2.x) + (b1.y - b2.y)*(b1.y - b2.y));}//玩家吃食物void EatFood(){for (int i = 0; i < FOOD_NUM; i++){if (food[i].flag && DisTance(player,food[i]){food[i].flag = false;player.r+=food[i].r/4;}}}//追逐算法void Chase(struct Ball *chase, struct Ball run){chase->x < run.x ? chase->x += 2 : chase->x -= 2;//x改變chase->y < run.y ? chase->y += 2 : chase->y -= 2;//y改變}void aiMove(){for (int i = 0; i < AI_NUM; i++){if (ai[i].flag){Chase(&ai[i], player);}}}int main(){//創(chuàng)建窗口initgraph(WIN_WIDTH, WIN_HEIGHT);GameInit();//需要不斷地處理繪圖,以及獲取鍵盤消息...循環(huán)while (1){aiMove();GameDraw();EatFood();PlayerContrl(10);}getchar();return 0;}
-
C語言
+關(guān)注
關(guān)注
183文章
7642瀏覽量
144516 -
代碼
+關(guān)注
關(guān)注
30文章
4940瀏覽量
73061
原文標(biāo)題:C語言項(xiàng)目實(shí)戰(zhàn):《球球大作戰(zhàn)》零基礎(chǔ)項(xiàng)目!185 行源代碼示例
文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
紫宸激光錫球焊錫機(jī):點(diǎn)亮芯片0.07mm激光植球新征程
激光焊接技術(shù)在焊接鈦球工藝中的應(yīng)用
激光焊接技術(shù)在焊接浮球工藝中的應(yīng)用
求助,關(guān)于K230部署yolov8時(shí)遇到問題求解
在k230上使用yolov5檢測圖像卡死,怎么解決?
PLC液壓成球機(jī)數(shù)據(jù)采集物聯(lián)網(wǎng)解決方案
光洋股份擬收購銀球科技
單片機(jī)C語言實(shí)例(350+例)
索尼FCB-CR8530與高速球解決方案:打造精準(zhǔn)監(jiān)控新標(biāo)桿
車載+戶外雙考驗(yàn)!YU系列USB Type-C連接器成高爾夫球車車載快充新選擇
BGA封裝焊球推力測試解析:評估焊點(diǎn)可靠性的原理與實(shí)操指南
深度解析激光錫焊中鉛與無鉛錫球的差異及大研智造解決方案
羅徹斯特電子針對BGA封裝的重新植球解決方案
深入解析:燈具球壓測試
詳解SMT工藝的五球原則

如何用C語言實(shí)現(xiàn)球球大作戰(zhàn)項(xiàng)目
評論