经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C 语言 » 查看文章
C语言游戏项目球球大作战实现流程
来源:jb51  时间:2022/1/24 10:09:31  对本文有异议

时间在流去,我们在长大

嗨,这里是狐狸~~

         今天是2022年1月11日,今天突然发现好久没有给你们更新项目了,今天来教大家一个新的项目,一个游戏项目——球球大作战。

         球球大作战在宇宙深处一片遍布着荆棘之花的神秘星云中,生活着一群名叫“波拉哩”(译名“球球”)的奇特生物。他们外表萌萌,却有着勇敢的心。他们是天生的战斗种族,为战斗而生,为战斗而亡。

         传说中,这群波拉哩的共同祖先是一只叫“塔坦”的超级波拉哩,塔坦的职责就是守护宇宙瑰宝“荆棘之花”,它拥有强大的能量,会分出分身,变化万物,唯一的弱点就是贪吃。

         一天,塔坦终于禁不住诱惑,偷食了“荆棘之花”,结果身体爆裂,成为了数以亿计的小波拉哩。从此,波拉哩的族群就受到了贪食的诅咒,只能在这片星云中无休止的战斗,如果停止战斗,生命便会流失,消亡在茫茫的星空之中。在漫漫的历史长河里,只有最强大的波拉哩才能冲过这片黑暗星云,打破命运的枷锁,去寻找那传说中的光明与和平。

         为了那甜蜜的希望,波拉哩们战斗着。他们必须奋力奔跑,让自己变大变大再变大,才能对抗比自己更强的存在。哪怕经历无数失败也必须重新凝聚力量,直到成为最强壮的那个。

球球大作战

项目代码 

 直接进入代码阶段吧,大家认真观看。

1、结构体

  1. struct Ball //小球结构,玩家,食物,人工智障
  2. {
  3. int x;
  4. int y;
  5. int r;//半径
  6. DWORD color;//颜色
  7. bool flag;//是否存在
  8. };
  9. int score = 0;//分数
  10. struct Ball food[FOOD_NUM];
  11. struct Ball player;//玩家
  12. struct Ball ai[AI_NUM];

2、初始化

  1. void GameInit()
  2. {
  3. //播放背景音乐
  4. mciSendString("open ./BallBGM.mp3 alias BGM", 0, 0, 0);
  5. //mciSendString("play BGM repeat", 0, 0, 0);
  6. //设置随机数种子 时间是在不断的变化的
  7. srand((unsigned)time(NULL));
  8. //找到每一个元素
  9. for (int i = 0; i < FOOD_NUM; i++)
  10. {
  11. food[i].x = rand() % WIDTH;
  12. food[i].y = rand() % HEIGHT;
  13. food[i].flag = true;//刚开始食物是存在的,没有被吃掉
  14. food[i].r = rand() % 6 + 1;
  15. food[i].color = RGB(rand() % 256, rand() % 256, rand() % 256);
  16. }
  17. //初始化玩家数据
  18. player.x = rand() % WIDTH;
  19. player.y = rand() % HEIGHT;
  20. player.r = 18;//只要比最大的食物大就可以了
  21. player.flag = true;
  22. player.color= RGB(rand() % 256, rand() % 256, rand() % 256);
  23. //初始化ai
  24. for (int i = 0; i < AI_NUM; i++)
  25. {
  26. ai[i].x = rand() % WIDTH;
  27. ai[i].y = rand() % HEIGHT;
  28. ai[i].r = rand() % 10 + 5;
  29. ai[i].flag = true;
  30. ai[i].color = RGB(rand() % 256, rand() % 256, rand() % 256);
  31. }
  32. }

3、绘制函数 

  1. void GameDraw()
  2. {
  3. //防止闪屏
  4. BeginBatchDraw();
  5. setbkcolor(WHITE);
  6. cleardevice();//清屏
  7. for (int i = 0; i < FOOD_NUM; i++)
  8. {
  9. if (food[i].flag)
  10. {
  11. setfillcolor(food[i].color);//设置填充颜色
  12. solidcircle(food[i].x, food[i].y, food[i].r);//画一个填充圆
  13. }
  14. else
  15. {
  16. food[i].x = rand() % WIDTH;
  17. food[i].y = rand() % HEIGHT;
  18. food[i].flag = true;//刚开始食物是存在的,没有被吃掉
  19. food[i].r = rand() % 6 + 1;
  20. food[i].color = RGB(rand() % 256, rand() % 256, rand() % 256);
  21. }
  22. }
  23. //绘制玩家
  24. setfillcolor(player.color);//设置填充颜色
  25. solidcircle(player.x, player.y, player.r);
  26. settextcolor(GREEN);
  27. settextstyle(30, 0, "黑体");
  28. setbkmode(0);//设置文字背景透明
  29. outtextxy(player.x-50, player.y, "我是最亮的崽");
  30. //输出分数
  31. settextcolor(BLACK);
  32. char str[20];
  33. sprintf(str,"分数:%d",score);//格式化字符串
  34. outtextxy(20, 20, str);
  35. //绘制ai
  36. for (int i = 0; i < AI_NUM; i++)
  37. {
  38. if (ai[i].flag)
  39. {
  40. setfillcolor(ai[i].color);//设置填充颜色
  41. solidcircle(ai[i].x, ai[i].y, ai[i].r);//画一个填充圆
  42. }
  43. }
  44. EndBatchDraw();
  45. }

4、玩家控制函数 

  1. void keyControl(int speed)
  2. {
  3. //获取键盘消息,按得是哪一个键 _getch(); GetAsyncKeyState() windows系统函数
  4. if ((GetAsyncKeyState('W') || GetAsyncKeyState(VK_UP)) && player.y >= 0)//按了上键 y不能小于0
  5. {
  6. player.y -= speed;
  7. }
  8. if ((GetAsyncKeyState('S') || GetAsyncKeyState(VK_DOWN)) && player.y <= HEIGHT)//按了下键
  9. {
  10. player.y += speed;
  11. }
  12. if ((GetAsyncKeyState('A') || GetAsyncKeyState(VK_LEFT)) && player.x >= 0)//按了左键
  13. {
  14. player.x -= speed;
  15. }
  16. if ((GetAsyncKeyState('D') || GetAsyncKeyState(VK_RIGHT)) && player.x <= WIDTH)//按了右键
  17. {
  18. player.x += speed;
  19. }
  20. }

5、吃食物函数

  1. void eatFood()
  2. {
  3. for (int i = 0; i < FOOD_NUM; i++)
  4. {
  5. if (food[i].flag && distance(food[i], player) <= player.r)
  6. {
  7. food[i].flag = false;
  8. player.r += food[i].r / 4;
  9. score++;//加分
  10. }
  11. }
  12. }

6、电脑移动函数

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

7、主函数

  1. int main(int argc,char *agv[])
  2. {
  3. initgraph(WIDTH, HEIGHT);
  4. GameInit();
  5. while (1)
  6. {
  7. keyControl(1);
  8. GameDraw();
  9. eatFood();
  10. aiMove();
  11. }
  12. getchar();
  13. return 0;
  14. }

总结

        OK,简单总结一下下,距离上次给大家分享项目好像已经过去很久了,今天的这个项目希望大家可以认真的去试试,难度不大,这个项目暂时是个单机版的,大家可以增加玩家联机对战也是可以的,画风也比较简单,这些都是可以自己去优化的,好叭,今天就到这里了哈。后续我还会发布更多的项目源或者学习资料,希望大家可以持续关注。

视频讲解

      今天没有效果展示,emmmm,有很大原因是因为那个录制有点麻烦,有兴趣的同学可以去看视频讲解,上面有详细的代码讲解,大家可以认真观看

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

到此这篇关于C语言游戏项目球球大作战实现流程的文章就介绍到这了,更多相关C语言 球球大作战内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号