tft每日頭條

 > 科技

 > c語言小遊戲活動效果分析表

c語言小遊戲活動效果分析表

科技 更新时间:2024-08-22 22:22:39

這篇文章主要為大家詳細介紹了C語言實現——《球球大作戰項目》,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小夥伴們可以參考一下!在室友面前秀一下豈不是美滋滋!

c語言小遊戲活動效果分析表(球球大作戰零基礎項目)1

遊戲介紹:

這是一個大球吃小球的世界,玩家的目标是要努力吃成最大的球球。在遊戲一開始,玩家出現在地圖上随機位置,地圖裡灑滿了小彩豆,玩家吃掉小彩豆體積就會增大,當增大到比别人的球大時,就可以吃别人的球啦,當然也得躲避更大的球。小球速度快,大球速度慢。球球到達一定重量後,可以分身,一個球變成等大的兩個球,可以再次分身,但是最多可以擁有16個分身。

本期就是帶着大家用C語言去開發一款自己寫的簡易版球球大作戰,一定要自己動手來寫喲~

本項目編譯環境:VS2019/VS2013;

插件:圖形庫插件easyX,涉及圖片素材可以自行百度找也可以關注文末領取;

效果圖展示

c語言小遊戲活動效果分析表(球球大作戰零基礎項目)2

配套講解教程:「鍊接」

源代碼示例:

#include<stdio.h> #include<stdlib.h> #include<time.h> #include<graphics.h> #include<math.h> #include<mmsystem.h> #pragma comment(lib,"winmm.lib") #define WIN_WIDTH 1024 //宏定義窗口寬和高 #define WIN_HEIGHT 640 #define MAP_WIDTH (WIN_WIDTH*5) #define MAP_HEIGHT (WIN_HEIGHT*5) #define FOOD_NUM 1000//食物數量 #define AI_NUM 500 //人工智障數量 //玩家,用圓表示,用變量表示玩家的坐标 struct Ball //定義小球的結構,玩家,ai,食物 { int x; int y; int r; bool flag;//是否存在标志 DWORD color;//小球顔色 }player,food[FOOD_NUM],ai[AI_NUM];//定義變量 //int a; 圖片 IMAGE map; IMAGE map(MAP_WIDTH, MAP_HEIGHT); POINT cameraPos;//攝像機位置 void CameraUpdate() { //以人物為中心,計算攝像機的位置 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; } //初始化數據 void GameInit() { mciSendString("open ./BallBGM.mp3 alias BGM", 0, 0, 0); mciSendString("play BGM repeat", 0, 0, 0); //設置随機數種子 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); //初始化食物數據 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); } //初始化ai for (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(); //設置工作區 SetWorkingImage(&map); //設置背景顔色 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();//恢複默認工作區 CameraUpdate(); //putimage(cameraPos.x, cameraPos.y, &map); putimage(0, 0, WIN_WIDTH, WIN_HEIGHT, &map, cameraPos.x, cameraPos.y); EndBatchDraw();//結束雙緩沖繪圖 } //控制玩家 void PlayerContrl(int speed) { //往上移動,什麼發生改變?y坐标減 if (GetAsyncKeyState(VK_UP) && player.y-player.r >= 0) { player.y -= speed; } if (GetAsyncKeyState(VK_DOWN) && player.y player.r<MAP_HEIGHT) { player.y = speed; } if (GetAsyncKeyState(VK_LEFT) && player.x - player.r >= 0) { player.x -= speed; } if (GetAsyncKeyState(VK_RIGHT) && player.x player.r <MAP_WIDTH) { player.x = speed; } } //求兩點之間的距離 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])<player.r) { 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() { //創建窗口 initgraph(WIN_WIDTH, WIN_HEIGHT); GameInit(); //需要不斷地處理繪圖,以及獲取鍵盤消息...循環 while (1) { aiMove(); GameDraw(); EatFood(); PlayerContrl(10); } getchar(); return 0; }

寫在最後:對于準備學習C/C 編程的小夥伴,如果你想更好的提升你的編程核心能力(内功)不妨從現在開始!

編程學習書籍分享:

c語言小遊戲活動效果分析表(球球大作戰零基礎項目)3

編程學習視頻分享:

c語言小遊戲活動效果分析表(球球大作戰零基礎項目)4

整理分享(多年學習的源碼、項目實戰視頻、項目筆記,基礎入門教程)

歡迎轉行和學習編程的夥伴,利用更多的資料學習成長比自己琢磨更快哦!

對于C/C 感興趣可以關注小編在後台私信我:【編程交流】一起來學習哦!可以領取一些C/C 的項目學習視頻資料哦!已經設置好了關鍵詞自動回複!

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved