这篇文章主要为大家详细介绍了C语言实现——《球球大作战项目》,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下!在室友面前秀一下岂不是美滋滋!
游戏介绍:
这是一个大球吃小球的世界,玩家的目标是要努力吃成最大的球球。在游戏一开始,玩家出现在地图上随机位置,地图里洒满了小彩豆,玩家吃掉小彩豆体积就会增大,当增大到比别人的球大时,就可以吃别人的球啦,当然也得躲避更大的球。小球速度快,大球速度慢。球球到达一定重量后,可以分身,一个球变成等大的两个球,可以再次分身,但是最多可以拥有16个分身。
本期就是带着大家用C语言去开发一款自己写的简易版球球大作战,一定要自己动手来写哟~
本项目编译环境:VS2019/VS2013;
插件:图形库插件easyX,涉及图片素材可以自行百度找也可以关注文末领取;
配套讲解教程:球球大作战游戏教程——哔哩哔哩
源代码示例:
//玩家,用圆表示,用变量表示玩家的坐标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);}//初始化aifor (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;}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
C语言
+关注
关注
183文章
7649浏览量
146401 -
代码
+关注
关注
30文章
4983浏览量
74534
原文标题:C语言项目实战:《球球大作战》零基础项目!185 行源代码示例
文章出处:【微信号:cyuyanxuexi,微信公众号:C语言编程学习基地】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
热点推荐
BGA 共面度不良导致焊球接触失效、短路桥连,白光干涉仪检测
引言 BGA球栅阵列封装凭借高密度互连、优异散热及小型化集成优势,广泛应用于车载电子、智能终端及工业控制等高精密芯片领域。在芯片封装与SMT贴片回流焊接制程中,焊球阵列共面度是决定焊接品质与器件工作
开源项目带轨迹球的分体式人体工学键盘总体介绍
今天小编给大家带来一款——分体式人体工学键盘,专为长时间电脑使用者打造,集成高性能轨迹球,让右手无需在键盘与鼠标间频繁切换,适配 Cherry MX 热插拔、支持 Vial 固件自定义改键。
DSP717HF Wafer植球锡膏重磅推荐
在先进封装工艺不断升级的背景下,植球材料的稳定性、精度与洁净度,正成为影响良率的关键因素。东莞市大为新材料技术有限公司推出高性能Wafer植球锡膏——DSP717HF,为高端封装提供可靠国产化
汇诚仪器与安徽晓球新材料达成合作,DSC助力材料研发升级
近日,南京汇诚仪器仪表有限公司与安徽晓球新材料科技有限公司正式达成合作,向其交付差示扫描量热仪DSC-600C,为晓球新材料在锂电池极耳、软包装膜等产品的研发与质控工作提供核心热分析支持。此次合作
从手工到自动:焊球剪切测试的技术演进与科学原理
到了剪切力值在0.13-3.3mm/s速率范围内不受影响的重要特性。
首台精密键合焊球-剪切测试仪简图
现代测试技术的突破
与早期设备相比,现代焊球剪切测试仪实现了多项重要突破:
l 自动化水平提升
发表于 12-31 09:12
BGA植球中助焊剂的应用工序及核心要求
BGA植球中,助焊剂是保障焊球定位与焊接质量的核心辅料,仅在焊球放置前的焊盘预处理后集中涂覆,兼具粘结固定焊球、清除氧化层、防二次氧化的作用。其性能要求精准:常温粘度5000-1500
紫宸激光锡球焊锡机:点亮芯片0.07mm激光植球新征程
随着半导体行业向高性能、微型化方向加速演进,#芯片封装技术面临前所未有的精度与可靠性挑战。尤其在人工智能、#5G通信、物联网等领域,芯片焊点密度和互联精度需求持续攀升。以下将通过芯片植球行业背景
激光焊接技术在焊接钛球工艺中的应用
钛球作为高端阀门、航空航天轴承及人工关节的核心构件,其焊接质量直接决定密封性能与服役寿命。面对钛材高温易氧化、球体曲面熔深一致性控制等严峻挑战,激光焊接技术凭借其非接触加工与精准热输入特性,成为实现
激光焊接技术在焊接浮球工艺中的应用
浮球作为液位控制、阀门启闭及压力调节等装置中的关键部件,其密封性、耐腐蚀性及结构完整性直接关系到整个系统的可靠性与寿命。激光焊接技术因其独特的加工优势,在浮球的制造与封装工艺中扮演着越来越重要的角色
求助,关于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
瑞盟马达驱动在安防球机监控上的应用
在安防监控摄像机硬件应用上,往往应用多颗马达驱动集成电路,如安防球机监控头:摄像头上下旋转、水平360旋转、镜头聚焦、IR_CUT红外滤光截止片与全透光谱滤光片切换等。瑞盟在安防球机监控摄像细分
PLC液压成球机数据采集物联网解决方案
压球机,又名球压机或压球设备,属于工业机械范畴,其主要功能是将各类颗粒状、粉末状物料,借助高压挤压工艺,制成球形或其他预设形状的固体。该设备在冶金、矿山、煤炭、建材、耐火材料、化工等多个行业得到
如何用C语言实现球球大作战项目
评论