序
时间在流去,我们在长大
嗨,这里是狐狸~~
今天是2022年1月11日,今天突然发现好久没有给你们更新项目了,今天来教大家一个新的项目,一个游戏项目——球球大作战。
球球大作战在宇宙深处一片遍布着荆棘之花的神秘星云中,生活着一群名叫“波拉哩”(译名“球球”)的奇特生物。他们外表萌萌,却有着勇敢的心。他们是天生的战斗种族,为战斗而生,为战斗而亡。
传说中,这群波拉哩的共同祖先是一只叫“塔坦”的超级波拉哩,塔坦的职责就是守护宇宙瑰宝“荆棘之花”,它拥有强大的能量,会分出分身,变化万物,唯一的弱点就是贪吃。
一天,塔坦终于禁不住诱惑,偷食了“荆棘之花”,结果身体爆裂,成为了数以亿计的小波拉哩。从此,波拉哩的族群就受到了贪食的诅咒,只能在这片星云中无休止的战斗,如果停止战斗,生命便会流失,消亡在茫茫的星空之中。在漫漫的历史长河里,只有最强大的波拉哩才能冲过这片黑暗星云,打破命运的枷锁,去寻找那传说中的光明与和平。
为了那甜蜜的希望,波拉哩们战斗着。他们必须奋力奔跑,让自己变大变大再变大,才能对抗比自己更强的存在。哪怕经历无数失败也必须重新凝聚力量,直到成为最强壮的那个。
项目代码
直接进入代码阶段吧,大家认真观看。
1、结构体
1
2
3
4
5
6
7
8
9
10
11
12
|
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、初始化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
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、绘制函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
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、玩家控制函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
void keyControl( int speed) { //获取键盘消息,按得是哪一个键 _getch(); GetAsyncKeyState() windows系统函数 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、吃食物函数
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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、电脑移动函数
1
2
3
4
5
6
7
8
9
10
11
|
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、主函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
int main( int argc, char *agv[]) { initgraph(WIDTH, HEIGHT); GameInit(); while (1) { keyControl(1); GameDraw(); eatFood(); aiMove(); } getchar (); return 0; } |
总结
OK,简单总结一下下,距离上次给大家分享项目好像已经过去很久了,今天的这个项目希望大家可以认真的去试试,难度不大,这个项目暂时是个单机版的,大家可以增加玩家联机对战也是可以的,画风也比较简单,这些都是可以自己去优化的,好叭,今天就到这里了哈。后续我还会发布更多的项目源或者学习资料,希望大家可以持续关注。
视频讲解
今天没有效果展示,emmmm,有很大原因是因为那个录制有点麻烦,有兴趣的同学可以去看视频讲解,上面有详细的代码讲解,大家可以认真观看
https://www.bilibili.com/video/BV1Yu41127E4/
到此这篇关于C语言游戏项目球球大作战实现流程的文章就介绍到这了,更多相关C语言 球球大作战内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/weixin_45713725/article/details/122418218