0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何用C语言实现球球大作战项目

C语言编程学习基地 来源:C语言编程学习基地 作者:C语言编程学习基地 2021-11-21 16:36 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

这篇文章主要为大家详细介绍了C语言实现——《球球大作战项目》,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下!在室友面前秀一下岂不是美滋滋!

游戏介绍:

这是一个大球吃小球的世界,玩家的目标是要努力吃成最大的球球。在游戏一开始,玩家出现在地图上随机位置,地图里洒满了小彩豆,玩家吃掉小彩豆体积就会增大,当增大到比别人的球大时,就可以吃别人的球啦,当然也得躲避更大的球。小球速度快,大球速度慢。球球到达一定重量后,可以分身,一个球变成等大的两个球,可以再次分身,但是最多可以拥有16个分身。

本期就是带着大家用C语言去开发一款自己写的简易版球球大作战,一定要自己动手来写哟~

本项目编译环境:VS2019/VS2013;

插件:图形库插件easyX,涉及图片素材可以自行百度找也可以关注文末领取;

配套讲解教程:球球大作战游戏教程——哔哩哔哩

源代码示例:

#include#include#include#include#include#include#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  {    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;  }}//求两点之间的距离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(){  //创建窗口  initgraph(WIN_WIDTH, WIN_HEIGHT);  GameInit();  //需要不断地处理绘图,以及获取键盘消息...循环  while (1)  {    aiMove();    GameDraw();    EatFood();    PlayerContrl(10);  }    getchar();  return 0;}

责任编辑:haq
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    183

    文章

    7642

    浏览量

    144556
  • 代码
    +关注

    关注

    30

    文章

    4940

    浏览量

    73116

原文标题:C语言项目实战:《球球大作战》零基础项目!185 行源代码示例

文章出处:【微信号:cyuyanxuexi,微信公众号:C语言编程学习基地】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    紫宸激光锡球焊锡机:点亮芯片0.07mm激光植新征程

    随着半导体行业向高性能、微型化方向加速演进,#芯片封装技术面临前所未有的精度与可靠性挑战。尤其在人工智能、#5G通信、物联网等领域,芯片焊点密度和互联精度需求持续攀升。以下将通过芯片植行业背景
    的头像 发表于 11-19 16:26 353次阅读
    紫宸激光锡球焊锡机:点亮芯片0.07mm激光植<b class='flag-5'>球</b>新征程

    激光焊接技术在焊接钛工艺中的应用

    作为高端阀门、航空航天轴承及人工关节的核心构件,其焊接质量直接决定密封性能与服役寿命。面对钛材高温易氧化、球体曲面熔深一致性控制等严峻挑战,激光焊接技术凭借其非接触加工与精准热输入特性,成为实现
    的头像 发表于 10-23 16:31 90次阅读
    激光焊接技术在焊接钛<b class='flag-5'>球</b>工艺中的应用

    激光焊接技术在焊接浮工艺中的应用

    作为液位控制、阀门启闭及压力调节等装置中的关键部件,其密封性、耐腐蚀性及结构完整性直接关系到整个系统的可靠性与寿命。激光焊接技术因其独特的加工优势,在浮的制造与封装工艺中扮演着越来越重要的角色
    的头像 发表于 09-18 15:53 189次阅读
    激光焊接技术在焊接浮<b class='flag-5'>球</b>工艺中的应用

    求助,关于K230部署yolov8时遇到问题求解

    使用yolov8训练出来了一个十个类别的模型并且按照要求转换成了.kmodel模型,在部署到K230时 使用yolo大作战里面的代码提示我list out of range但是我看了我的.yaml
    发表于 08-12 07:26

    在k230上使用yolov5检测图像卡死,怎么解决?

    0.99以上 模型转换指令 再将该模型放到k230设备上使用yolo大作战中yolov5检测示例,检测就会卡死,打印出的检测结果会超过1。 目前无从下手,大佬们求救!
    发表于 08-11 07:41

    PLC液压成机数据采集物联网解决方案

    机,又名压机或压设备,属于工业机械范畴,其主要功能是将各类颗粒状、粉末状物料,借助高压挤压工艺,制成球形或其他预设形状的固体。该设备在冶金、矿山、煤炭、建材、耐火材料、化工等多个行业得到
    的头像 发表于 06-26 16:11 434次阅读
    PLC液压成<b class='flag-5'>球</b>机数据采集物联网解决方案

    光洋股份拟收购银科技

    近日,光洋股份发布公告,公司正在筹划发行股份及支付现金方式购买宁波银科技股份有限公司(以下简称“银科技”)100%股权,并募集配套资金。
    的头像 发表于 05-28 11:49 936次阅读

    单片机C语言实例(350+例)

    350+单片机C语言实例! 纯分享帖,需要者可点击附件免费获取完整资料~~~【免责声明】本文系网络转载,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请第一时间告知,删除内容!
    发表于 05-22 21:47

    索尼FCB-CR8530与高速解决方案:打造精准监控新标杆

    在安防监控领域,高速机因灵活的云台旋转与变焦能力成为核心设备,而索尼FCB-CR8530模组凭借其超高清画质与智能技术,为高速解决方案注入全新动能。通过两者的深度结合,可实现远距离目标捕捉、复杂
    的头像 发表于 05-13 17:42 456次阅读

    车载+户外双考验!YU系列USB Type-C连接器成高尔夫车车载快充新选择

    背景介绍随着高尔夫运动不再高冷,配置USB等充电接口的高尔夫车,正成为提升球场运营与体验的标配。凌科电气YU-USB&Type-C连接器,以稳定供电与严苛环境耐受性为核心,成为高尔夫车车
    的头像 发表于 04-30 18:20 501次阅读
    车载+户外双考验!YU系列USB Type-<b class='flag-5'>C</b>连接器成高尔夫<b class='flag-5'>球</b>车车载快充新选择

    BGA封装焊推力测试解析:评估焊点可靠性的原理与实操指南

    在电子封装领域,BGA(Ball Grid Array)封装因其高密度、高性能的特点,广泛应用于集成电路和芯片模块中。然而,BGA焊的机械强度直接影响到器件的可靠性和使用寿命,因此焊推力测试
    的头像 发表于 04-18 11:10 1399次阅读
    BGA封装焊<b class='flag-5'>球</b>推力测试解析:评估焊点可靠性的原理与实操指南

    深度解析激光锡焊中铅与无铅锡的差异及大研智造解决方案

    在激光锡焊这一精密焊接技术领域,锡作为关键的焊料,其特性直接关乎焊接质量与产品性能。在实际应用中,锡主要分为有铅锡和无铅锡,二者在成分、熔点、环保性能、机械性能以及成本等方面存
    的头像 发表于 03-27 10:19 1245次阅读

    罗彻斯特电子针对BGA封装的重新植解决方案

    BGA焊的更换及转换, 以实现全生命周期解决方案的支持 当BGA封装的元器件从含铅转变为符合RoHS标准的产品时,或者当已存储了15年的BGA产品在生产线上被发现存在焊损坏或焊接检验不合格的情况
    的头像 发表于 03-04 08:57 1916次阅读
    罗彻斯特电子针对BGA封装的重新植<b class='flag-5'>球</b>解决方案

    深入解析:灯具压测试

    非金属材料的耐热性能测试在电子产品的设计和制造过程中,非金属材料和绝缘材料的使用日益广泛。这些材料在高温条件下的性能变化对于产品的安全性和可靠性至关重要。IEC压测试是一种评估非金属材料和绝缘材料
    的头像 发表于 02-06 14:16 850次阅读
    深入解析:灯具<b class='flag-5'>球</b>压测试

    贴片材料焊推力测试:从设备校准到检测结果分析

    最近,有从事半导体行业的朋友,通过官网向小编咨询,贴片材料焊推力测试要用哪种设备进行检测。随着电子技术的飞速发展,电子设备的微型化和集成化要求对电子组件的组装工艺提出了更高的挑战。 贴片材料作为
    的头像 发表于 12-19 11:22 1165次阅读
    贴片材料焊<b class='flag-5'>球</b>推力测试:从设备校准到检测结果分析