C/C++--球球大作战项目(简单版)


在bilibili上扒了个C++的小游戏项目的视频,自己看了几遍,跟着老师学习了这个项目。

项目名称:C/C++--球球大作战项目(简单版)

项目简介:模拟球球大作战小游戏,实现了自己可以控制并且变大的玩家,以及随机创建被吃的食物,在背景音乐下,有AI玩家会追随。

开发环境:Visual Studio 2012     (给编译器加入  EasyX图形库)

项目实现:先用easyx库实现图形化界面,然后绘制玩家形状,颜色,大小等,实现控制玩家模块,创建地图以及食物,实现玩家吃食物功能,然后实现摄像头追随玩家以及越界情况,最后创建的AI玩家追逐玩家的功能。

项目难点:在实现outtextxy(player.x,player.y,"劫中甜");时,也就是显示玩家名称时,需要设置VS:点击项目->属性->常规->字符集->使用多字节字符集。在实现绘制玩家时,注意顺序,先绘制食物,再绘制AI玩家,最后绘制玩家自己,否则玩家覆盖不了食物。因为需要不断的处理绘制图,以及获取键盘消息,主函数中需要使用循环。

项目未开发的功能:
1.AI玩家吃AI玩家
2.AI玩家吃食物
3.玩家吃AI玩家
4.AI玩家吃玩家
5.分裂,合并

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <graphics.h>
#include <time.h>
#include <math.h>
#include <mmsystem.h>
#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 //AI玩家数量
//球球大作战  esayx图形库//用变量表示玩家的坐标
struct Ball
{int x;int y;int r;int 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 ./微微.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);}}//绘制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);}}//绘制玩家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(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< MAP_HEIGHT){player.y += speed;}if(GetAsyncKeyState(VK_LEFT) && player.x - player.r >= 0 ){player.x -= speed;}if(GetAsyncKeyState(VK_RIGHT) && player.y + player.r< MAP_WIDTH){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]) < player.r){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/C++--球球大作战项目(简单版)相关推荐

  1. java实现蛇蛇大作战_蛇蛇大作战3D旋涡版

    蛇蛇大作战3D旋涡版是一款趣味的手机游戏,在这里用户需要做的就是不断的寻找各种的游戏的亮点.这个过程是十分有趣的,喜欢的用户能在这里控制着你的蛇在游戏中不断的吞噬各种的小球,这里的每一个小球都是十分有 ...

  2. 贪吃蛇 c语言 不死模式,贪吃蛇大作战不死版v1.0安卓手机版

    游戏标签 贪吃蛇大作战 贪吃蛇大作战是一款原生态ios平台移植到安卓平台超好玩的休闲竞技小型游戏,今天艾艾给你带来的是贪吃蛇大作战不死版,言一之说就是不管你怎么撞都不会死,你有无数条生命,让你玩到刷新 ...

  3. windows游戏编程:球球大作战吃鸡版(C语言游戏开发)

    球球大作战: 前言: 本游戏用到了图形界面库graphics.h,图形界面库下载安装:https://blog.csdn.net/alzzw/article/details/100043681 下方有 ...

  4. 球球大作战测试服android版,球球大作战10.0体验服

    在球球大作战10.0体验服中,2019球球们将迎来全新的冒险,多重外观,更加的绚丽夺目,探索新的地图,与不同的对手较量一番,无限吞噬,热血竞技,灵活的走位,搭配强力道具,热血赛事开启,荣耀联盟互动,感 ...

  5. 球球大作战测试服android版,球球大作战6.0

    <球球大作战6.0测试版>是大型的一款特色的趣味类型的经典休闲手游,这款的游戏的玩法就是大家喜爱的类似大鱼吃小鱼类型的,这款游戏日前正式上线更新为全新的6.0全新版,全新的内容,全新的玩法 ...

  6. 球球大作战手游怎么在电脑上玩?球球大作战安卓模拟器版使用教程

    球球大作战 电脑版怎么操作?球球大作战是一款休闲手游,受到很多玩家特别是年轻玩家的喜爱,是休息期间放松娱乐一款不错得小游戏.今天来教一下大家怎么在电脑上玩这款手游. 1.百度搜索"tcgam ...

  7. 球球大作战测试服android版,球球大作战测试服

    球球大作战测试服是一款超好玩,超萌酷,超有挑战性,可与全球玩家实时对战的休闲竞技游戏,游戏中让您让小球变大,一根手指打遍天下无敌手,游戏中的玩法很丰富有趣,大球吃小球,努力生存下来就是唯一目标,感兴趣 ...

  8. 2014.7.11 松鼠大作战项目被叫停了

    2019独角兽企业重金招聘Python工程师标准>>> 驾校的科目三过了,但是胖子觉得松鼠大作战难度太大  叫停了松鼠大作战. 哎都换了几次项目了. 不能再换了.哎. 有点烦啊. 真 ...

  9. 2022-01-19 微信小程序-萌宠大作战项目(一) 项目思路和效果,map组件的介绍和使用,视图容器cover-image,首页的制作

    文章目录 一.准备 1.技术栈 前端 微信小程序 wxss wxml js 以及自带的ui组件 还有外部npm包的ui组件 后端 mongodb express 2.用到的数据库 3.项目思路和最终效 ...

最新文章

  1. Android 关于::app:clean :app:preBuild UP-TO-DATE :app:preDebugBuild UP-TO-DATE,引用jar冲突问题...
  2. 让asp.net程序在修改web.config后不重启
  3. 2.Lucene3.6.2包介绍,第一个Lucene案例介绍,查看索引信息的工具lukeall介绍,Luke查看的索引库内容,索引查找过程
  4. (*长期更新)软考网络工程师学习笔记——Section 10 网络安全
  5. [NewLife.XCode]数据层缓存(网站性能翻10倍)
  6. ubuntu 升级python3.5到python3.7,并升级pip3
  7. struts2中一些常用的写法 记录
  8. 华为荣耀v20是android10,荣耀V20和荣耀V10买哪个好
  9. 氮化镓 服务器电源管理系统报价,基于氮化镓的电源解决方案总体拥有成本评估...
  10. 虚电路网络和数据报网络
  11. Python+Opencv图像处理新手入门教程(一):介绍,安装与起步
  12. CNN vs RNN vs ANN——3 种神经网络分析模型,你 Pick 谁?
  13. C++11 移动语义与右值引用
  14. 为何python不好找工作-为何python不好找工作,seo行业不好转行了
  15. 【转】flex中的labelFunction(combox和dataGrid)
  16. 文件浏览器一定要有个向上级按钮
  17. biopython安装_python下如何安装biopython
  18. 硬盘出现“文件或目录损坏且无法读取”的故障,怎么解决?
  19. 解决RuntimeError: stack expects a non-empty Tensorlist问题
  20. 软件架构设计(一)——软件架构风格

热门文章

  1. 天龙八部TLBB从0到1搭建教程-可能会遇见的问题
  2. 集众家之所长,手把手教你如何在Ubuntu18.04上安装CUDA10.0+CUDNN7.5+Torch7(非Pytorch)(保姆级教学)
  3. 2022速卖通做什么产品好,母婴玩具选品建议
  4. C语言常用运算符与函数汇总
  5. python调用google提供的的客户端方式进行翻译
  6. Docker学习,从hello-word到Dockerfile创建镜像
  7. 数据增强 - AutoAugment 系列论文(1)
  8. R语言淮河流域水库水质数据相关性分析、地理可视化、广义相加模型GAM调查报告...
  9. 微信小程序 springboot在线考试系统Android hbuilderx App毕业设计
  10. jsp中c标签的引入