C語言游戲項目球球大作戰(zhàn)實現流程
序
時間在流去,我們在長大
嗨,這里是狐貍~~![]()
今天是2022年1月11日,今天突然發(fā)現好久沒有給你們更新項目了,今天來教大家一個新的項目,一個游戲項目——球球大作戰(zhàn)。
球球大作戰(zhàn)在宇宙深處一片遍布著荊棘之花的神秘星云中,生活著一群名叫“波拉哩”(譯名“球球”)的奇特生物。他們外表萌萌,卻有著勇敢的心。他們是天生的戰(zhàn)斗種族,為戰(zhàn)斗而生,為戰(zhàn)斗而亡。
傳說中,這群波拉哩的共同祖先是一只叫“塔坦”的超級波拉哩,塔坦的職責就是守護宇宙瑰寶“荊棘之花”,它擁有強大的能量,會分出分身,變化萬物,唯一的弱點就是貪吃。
一天,塔坦終于禁不住誘惑,偷食了“荊棘之花”,結果身體爆裂,成為了數以億計的小波拉哩。從此,波拉哩的族群就受到了貪食的詛咒,只能在這片星云中無休止的戰(zhàn)斗,如果停止戰(zhàn)斗,生命便會流失,消亡在茫茫的星空之中。在漫漫的歷史長河里,只有最強大的波拉哩才能沖過這片黑暗星云,打破命運的枷鎖,去尋找那傳說中的光明與和平。
為了那甜蜜的希望,波拉哩們戰(zhàn)斗著。他們必須奮力奔跑,讓自己變大變大再變大,才能對抗比自己更強的存在。哪怕經歷無數失敗也必須重新凝聚力量,直到成為最強壯的那個。

項目代碼
直接進入代碼階段吧,大家認真觀看。
1、結構體
struct Ball //小球結構,玩家,食物,人工智障
{
int x;
int y;
int r;//半徑
DWORD color;//顏色
bool flag;//是否存在
};
int score = 0;//分數
struct Ball food[FOOD_NUM];
struct Ball player;//玩家
struct Ball ai[AI_NUM];2、初始化
void GameInit()
{
//播放背景音樂
mciSendString("open ./BallBGM.mp3 alias BGM", 0, 0, 0);
//mciSendString("play BGM repeat", 0, 0, 0);
//設置隨機數種子 時間是在不斷的變化的
srand((unsigned)time(NULL));
//找到每一個元素
for (int i = 0; i < FOOD_NUM; i++)
{
food[i].x = rand() % WIDTH;
food[i].y = rand() % HEIGHT;
food[i].flag = true;//剛開始食物是存在的,沒有被吃掉
food[i].r = rand() % 6 + 1;
food[i].color = RGB(rand() % 256, rand() % 256, rand() % 256);
}
//初始化玩家數據
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、繪制函數
void GameDraw()
{
//防止閃屏
BeginBatchDraw();
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);//畫一個填充圓
}
else
{
food[i].x = rand() % WIDTH;
food[i].y = rand() % HEIGHT;
food[i].flag = true;//剛開始食物是存在的,沒有被吃掉
food[i].r = rand() % 6 + 1;
food[i].color = RGB(rand() % 256, rand() % 256, rand() % 256);
}
}
//繪制玩家
setfillcolor(player.color);//設置填充顏色
solidcircle(player.x, player.y, player.r);
settextcolor(GREEN);
settextstyle(30, 0, "黑體");
setbkmode(0);//設置文字背景透明
outtextxy(player.x-50, player.y, "我是最亮的崽");
//輸出分數
settextcolor(BLACK);
char str[20];
sprintf(str,"分數:%d",score);//格式化字符串
outtextxy(20, 20, str);
//繪制ai
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);//畫一個填充圓
}
}
EndBatchDraw();
}4、玩家控制函數
void keyControl(int speed)
{
//獲取鍵盤消息,按得是哪一個鍵 _getch(); GetAsyncKeyState() windows系統(tǒng)函數
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、吃食物函數
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、電腦移動函數
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、主函數
int main(int argc,char *agv[])
{
initgraph(WIDTH, HEIGHT);
GameInit();
while (1)
{
keyControl(1);
GameDraw();
eatFood();
aiMove();
}
getchar();
return 0;
}總結
OK,簡單總結一下下,距離上次給大家分享項目好像已經過去很久了,今天的這個項目希望大家可以認真的去試試,難度不大,這個項目暫時是個單機版的,大家可以增加玩家聯(lián)機對戰(zhàn)也是可以的,畫風也比較簡單,這些都是可以自己去優(yōu)化的,好叭,今天就到這里了哈。后續(xù)我還會發(fā)布更多的項目源或者學習資料,希望大家可以持續(xù)關注。
視頻講解
今天沒有效果展示,emmmm,有很大原因是因為那個錄制有點麻煩,有興趣的同學可以去看視頻講解,上面有詳細的代碼講解,大家可以認真觀看
https://www.bilibili.com/video/BV1Yu41127E4/

到此這篇關于C語言游戲項目球球大作戰(zhàn)實現流程的文章就介紹到這了,更多相關C語言 球球大作戰(zhàn)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
淺談C語言的字節(jié)對齊 #pragma pack(n)2
下面小編就為大家?guī)硪黄獪\談C語言的字節(jié)對齊 #pragma pack(n)2。小編覺得挺不錯的現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01

