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++项目源码——球球大作战相关推荐

  1. 用C/C++编程实现挖金子游戏「含项目源码」

    C++挖金子游戏,这个游戏还是小时候玩过.源码比较完整,在VC++ 6.0中可以顺利编译运行,本挖金子游戏界面效果如演示截图所示. 项目结构展示: 部分源码展示: 玩家通过键盘的按键控制矿工抓取金块, ...

  2. 贪吃蛇大作战JavaFx版完整源码

    贪吃蛇大作战 Java版 项目源码:https://github.com/silence1772/JavaFX-GreedySnake (记得点star啊,收藏一个项目最好的方式是star而不是for ...

  3. unity3d游戏3d局域网联机吃球游戏完整项目源码分享

    unity3d游戏3d局域网联机吃球游戏完整项目源码分享 免费下载地址: 链接:https://pan.baidu.com/s/1APlOCmoK9aUfiVJD48dBQA 提取码:p5nl 复制这 ...

  4. UE4官方滚球项目源码笔记

    UE4官方滚球项目源码笔记 我的项目名称:test_0511,读者请根据自己的项目名称自行查找(YourProgramNameBall.h/YourProgramNameBall.cpp) 笔者是UE ...

  5. c语言循环写回合制小游戏_【资源】60个C语言项目源码免费领取!

    序言 今天的资源特意是为大三.大四的童鞋准备的, 整理了一波有关于C语言开发的游戏.系统.效果.小项目的源码!!源码!!源码!! 小编之前发过一波毕业项目的资源, 还没有获取的伙伴,直接申请进群就能获 ...

  6. 两个大整数相乘 C++ 版本 源码

    看到了这个题目,就突然要写了,完全徒手写的, itoa_m 数字转换成字符串 是拷贝过来的,也是我积累的源码. 这个大整数 主要思想就是按照我们小学学习的 乘法 笔算方法,先单个 乘积,再相加,具体不 ...

  7. 薛之谦明星人物介绍html源码 html期末大作业 课程设计

    薛之谦明星人物介绍html源码 html期末大作业 课程设计 开发语言:html 布局方式:div 页面数量:7页 项目页面截图 :

  8. 【520表白】C语言开发《浪漫流星雨》表白程序,源码来了!

    今天是520告白节,特意为大家准备了我去年用C语言表白成功的浪漫表白流星雨项目源码,把这个发给你喜欢的女生,你还害怕520找不到对象,要一个人过吗? 话不多说,直接上效果: 开发环境:Visual S ...

  9. 2020大数据学习资料,全套源码无加密网盘下载

    点击上方蓝字"优派编程"选择"加为星标",第一时间关注原创干货 前言--–2020最新大数据完整版,全套源码无加密网盘下载 java大数据: 大数据(big d ...

最新文章

  1. shell编程基础之基本文本工具集合
  2. 经典C语言程序100例之十五
  3. 『设计模式』写代码偷懒小技巧,程序开发大智慧--享元模式
  4. 【渝粤教育】电大中专电商运营实操 (15)作业 题库
  5. B-TREE、B+TREE、数据库索引
  6. Effective Java~3. 私有Constructor 或Enum 强化单例
  7. SQL必知必会-事物处理
  8. 2021年了,Redis复制原理你应该理解!
  9. 解决类似 /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found 的问题
  10. php控制打印机打印文档,word预览正常打印不全怎么解决?
  11. CH341A编程器驱动下载地址及P751dm2模具设置方法截图
  12. java 避免gc_减少JAVA GC
  13. 南挚seo:参加白杨seo师徒群培训后两个月感悟总结!
  14. 真Unity3d_梦幻西游无双的引擎是?
  15. jquery mobile_jQuery Mobile课程1
  16. Excel 创建多级列表
  17. bas64图片加密解密
  18. 树莓派安装Linux操作系统
  19. eMule 的使用场景及初始化任务描述级eMule相关代码分析(仅涉及ed2k)
  20. 思维导图之丰田生产的14个原则

热门文章

  1. go语言如何调用java接口_Go语言实现的Java Stream API
  2. R语言使用pbern函数生成伯努利分布(0-1分布)累积分布函数数据、使用plot函数可视化伯努利分布累积分布函数数据( Bernoulli distribution)
  3. 亲测:如何将Sat Mar 14 2020 00:00:00 GMT+0800 (中国标准时间)转换成正常格式yy-MM-dd。字符串日期的比较compareTo方法。
  4. 硝烟中的 Scrum 和 XP(三)
  5. 6 知识表示与逻辑推理(11.16)
  6. 2008年中国BDO(1,4-丁二醇)行业市场分析研究报告
  7. 洛谷P4839 P哥的桶 线段树+线性基
  8. 发布移动App应用,Android应用市场发布渠道
  9. 一个 Web 项目的创建及配置(完整版)
  10. 字符串匹配算法---BF及KMP