c语言编程球球大作战,C/C++项目源码——球球大作战
C/C++项目源码——球球大作战
这是一个球球大作战的小程序,能够运行,需要下载一个easyx库
初始产生一个小球,可以慢慢吃零食长大
游戏没有写完整,不能吃别的玩家(单机初始化产生的玩家)
有兴趣可以自己尝试写完。
欢迎大家交流
/*
开发环境:vs2013+easyx
课程内容:球球大作战
*/
#include
#include
#include //包含easyx图形库头文件,如果没有安装,是包含不了的
#include//多媒体设备接口头文件
#pragma comment(lib,"winmm.lib")
#define WIN_WIDTH 1024 //窗口的大小
#define WIN_HEIGHT 640
#define MAP_WIDTH (WIN_WIDTH*3)//地图的大小
#define MAP_HEIGHT (WIN_HEIGHT*3)
#define FOOD_NUM 1000
#define AI_NUM 200
//地图是一张图 int temp;
IMAGE map(MAP_WIDTH, MAP_HEIGHT);
//食物,玩家,ai有什么属性
struct Ball
{
int x;
int y;
int r;
DWORD color;//颜色
bool flag;//是否存在
};
struct Ball food[FOOD_NUM];
struct Ball player;
struct Ball ai[AI_NUM];
POINT g_CameraPos;//定义摄像机位置
void ChaseAlgortihm(struct Ball *chase, struct Ball run);
//求两个球之间的距离
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 updatePos()
{
g_CameraPos.x = player.x - WIN_WIDTH / 2;
g_CameraPos.y = player.y - WIN_HEIGHT / 2;
//防止越界
if (g_CameraPos.x < 0) g_CameraPos.x = 0;
if (g_CameraPos.y < 0) g_CameraPos.y = 0;
if (g_CameraPos.x> MAP_WIDTH - WIN_WIDTH)g_CameraPos.x = MAP_WIDTH - WIN_WIDTH;
if (g_CameraPos.y> MAP_HEIGHT - WIN_HEIGHT)g_CameraPos.y = MAP_HEIGHT - WIN_HEIGHT;
}
//初始化数据
void GameInit()
{
//设置随机数种子
srand(GetTickCount());
//初始化食物
for (int i = 0; i < FOOD_NUM; i++)
{
//rand() 随机生成一个整数
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);
}
//初始化玩家
player.x = rand() % MAP_WIDTH;
player.y = rand() % MAP_HEIGHT;
player.flag = true;
player.color = RGB(rand() % 256, rand() % 256, rand() % 256);
player.r = rand() % 10 + 10;
//初始化ai
for (int i = 0; i < AI_NUM; i++)
{
ai[i].x = rand() % MAP_WIDTH;
ai[i].y = rand() % MAP_HEIGHT;
ai[i].flag = true;
ai[i].r = rand() % 10 + 15;
ai[i].color = RGB(rand() % 256, rand() % 256, rand() % 256);
}
}
void GameDraw()
{
//播放背景音乐 repeat重复播放 alias 取别名
mciSendString("open ./BallBGM.mp3 alias BGM", 0, 0, 0);
mciSendString("play BGM repeat", 0, 0, 0);
//设置工作区
SetWorkingImage(&map);
setbkcolor(WHITE);//设置背景颜色
cleardevice();//初始化窗口
//绘制食物
for (int i = 0; i < FOOD_NUM; i++)
{
if (food[i].flag)
{
setfillcolor(food[i].color);
fillcircle(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);
}
}
//绘制玩家
setfillcolor(player.color);
solidcircle(player.x, player.y, player.r);
SetWorkingImage();
updatePos();//更新摄像机位置
//把自定义的图片绘制到窗口上
//putimage(0, 0, &map); 这样贴图不合适
//void putimage(int dstX, int dstY, int dstWidth, int dstHeight, const IMAGE *pSrcImg, int srcX, int srcY, DWORD dwRop = SRCCOPY);
putimage(0, 0, WIN_WIDTH, WIN_HEIGHT, &map, g_CameraPos.x, g_CameraPos.y);
}
//顽石老师移动起来了,飘起来了
void PlayerMove(int speed)
{
//获取键盘输入 _getch();
if (GetAsyncKeyState(VK_UP))
{
player.y -= speed;
}
if (GetAsyncKeyState(VK_DOWN))
{
player.y += speed;
}
if (GetAsyncKeyState(VK_LEFT))
{
player.x -= speed;
}
if (GetAsyncKeyState(VK_RIGHT))
{
player.x += speed;
}
//作弊测试
if (GetAsyncKeyState(VK_SPACE))
{
player.r ++;
}
if (GetAsyncKeyState('A'))
{
player.r --;
}
}
//吃零食
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;
}
}
}
//AI移动算法,追逐比自己半径小的球
void AiMove()
{
//找到每一个人工智障
for (int i = 0; i < AI_NUM; i++)
{
//设置搜索范围
int min_DISTANCE = MAP_WIDTH;
int index=-1;
if (ai[i].flag)
{
//每一个都和后面的比较一下
for (int k = i + 1; k < AI_NUM; k++)
{
if (ai[i].r>ai[k].r &&ai[k].flag && DisTance(ai[i], ai[k]) < min_DISTANCE)
{
min_DISTANCE = DisTance(ai[i], ai[k]);
index = k;
}
}
}
//去追吧
if (index != -1)
{
ChaseAlgortihm(&ai[i], ai[index]);
}
else
{
ChaseAlgortihm(&ai[i], food[rand()%FOOD_NUM]);
}
}
}
//玩家吃AI,AI吃玩家
void EatAI()
{
//1,首先遍历ai数组,然后判断能否被吃
}
//Ai吃食物,AI吃ai
void AiEatFood()
{
}
int main()
{
//1,创建一个图形窗口
initgraph(WIN_WIDTH, WIN_HEIGHT);
GameInit();
//游戏,要不断地去处理,所以说要循环
while (1)
{
GameDraw();
PlayerMove(5);
EatFood();
AiMove();
}
getchar();//防止程序闪退
return 0;
}
//追逐算法
void ChaseAlgortihm(struct Ball *chase, struct Ball run)
{
//已知逃跑者的坐标,那么,chase向run移动是不是就可以了?
if (rand() % 2 == 0)
{
if (chase->x < run.x)
{
chase->x += 2;
}
else
{
chase->x -= 2;
}
}
else
{
if (chase->y < run.y)
{
chase->y += 2;
}
else
{
chase->y -= 2;
}
}
}
c语言编程球球大作战,C/C++项目源码——球球大作战相关推荐
- 用C/C++编程实现挖金子游戏「含项目源码」
C++挖金子游戏,这个游戏还是小时候玩过.源码比较完整,在VC++ 6.0中可以顺利编译运行,本挖金子游戏界面效果如演示截图所示. 项目结构展示: 部分源码展示: 玩家通过键盘的按键控制矿工抓取金块, ...
- 贪吃蛇大作战JavaFx版完整源码
贪吃蛇大作战 Java版 项目源码:https://github.com/silence1772/JavaFX-GreedySnake (记得点star啊,收藏一个项目最好的方式是star而不是for ...
- unity3d游戏3d局域网联机吃球游戏完整项目源码分享
unity3d游戏3d局域网联机吃球游戏完整项目源码分享 免费下载地址: 链接:https://pan.baidu.com/s/1APlOCmoK9aUfiVJD48dBQA 提取码:p5nl 复制这 ...
- UE4官方滚球项目源码笔记
UE4官方滚球项目源码笔记 我的项目名称:test_0511,读者请根据自己的项目名称自行查找(YourProgramNameBall.h/YourProgramNameBall.cpp) 笔者是UE ...
- c语言循环写回合制小游戏_【资源】60个C语言项目源码免费领取!
序言 今天的资源特意是为大三.大四的童鞋准备的, 整理了一波有关于C语言开发的游戏.系统.效果.小项目的源码!!源码!!源码!! 小编之前发过一波毕业项目的资源, 还没有获取的伙伴,直接申请进群就能获 ...
- 两个大整数相乘 C++ 版本 源码
看到了这个题目,就突然要写了,完全徒手写的, itoa_m 数字转换成字符串 是拷贝过来的,也是我积累的源码. 这个大整数 主要思想就是按照我们小学学习的 乘法 笔算方法,先单个 乘积,再相加,具体不 ...
- 薛之谦明星人物介绍html源码 html期末大作业 课程设计
薛之谦明星人物介绍html源码 html期末大作业 课程设计 开发语言:html 布局方式:div 页面数量:7页 项目页面截图 :
- 【520表白】C语言开发《浪漫流星雨》表白程序,源码来了!
今天是520告白节,特意为大家准备了我去年用C语言表白成功的浪漫表白流星雨项目源码,把这个发给你喜欢的女生,你还害怕520找不到对象,要一个人过吗? 话不多说,直接上效果: 开发环境:Visual S ...
- 2020大数据学习资料,全套源码无加密网盘下载
点击上方蓝字"优派编程"选择"加为星标",第一时间关注原创干货 前言--–2020最新大数据完整版,全套源码无加密网盘下载 java大数据: 大数据(big d ...
最新文章
- shell编程基础之基本文本工具集合
- 经典C语言程序100例之十五
- 『设计模式』写代码偷懒小技巧,程序开发大智慧--享元模式
- 【渝粤教育】电大中专电商运营实操 (15)作业 题库
- B-TREE、B+TREE、数据库索引
- Effective Java~3. 私有Constructor 或Enum 强化单例
- SQL必知必会-事物处理
- 2021年了,Redis复制原理你应该理解!
- 解决类似 /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found 的问题
- php控制打印机打印文档,word预览正常打印不全怎么解决?
- CH341A编程器驱动下载地址及P751dm2模具设置方法截图
- java 避免gc_减少JAVA GC
- 南挚seo:参加白杨seo师徒群培训后两个月感悟总结!
- 真Unity3d_梦幻西游无双的引擎是?
- jquery mobile_jQuery Mobile课程1
- Excel 创建多级列表
- bas64图片加密解密
- 树莓派安装Linux操作系统
- eMule 的使用场景及初始化任务描述级eMule相关代码分析(仅涉及ed2k)
- 思维导图之丰田生产的14个原则
热门文章
- go语言如何调用java接口_Go语言实现的Java Stream API
- R语言使用pbern函数生成伯努利分布(0-1分布)累积分布函数数据、使用plot函数可视化伯努利分布累积分布函数数据( Bernoulli distribution)
- 亲测:如何将Sat Mar 14 2020 00:00:00 GMT+0800 (中国标准时间)转换成正常格式yy-MM-dd。字符串日期的比较compareTo方法。
- 硝烟中的 Scrum 和 XP(三)
- 6 知识表示与逻辑推理(11.16)
- 2008年中国BDO(1,4-丁二醇)行业市场分析研究报告
- 洛谷P4839 P哥的桶 线段树+线性基
- 发布移动App应用,Android应用市场发布渠道
- 一个 Web 项目的创建及配置(完整版)
- 字符串匹配算法---BF及KMP