不废话,直接上代码:

#include<stdio.h>
#include<easyx.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
/*
项目内容:球球大作战
开发环境:vs2019+easyx
*/#define SCREEN_TICK_PER_FRAME (1000/60.0) //每一帧需要的毫秒数
#define FOODNUM 200 //食物数量
#define AINUM 10    //人机数量
#define distance(spr1,spr2) sqrt(((spr1)->x-(spr2)->x)*((spr1)->x-(spr2)->x)+((spr1)->y-(spr2)->y)*((spr1)->y-(spr2)->y))//创建球球结构体
struct Sprite//精灵
{double x;double y;double r;double speed;bool isdie=false;//是否godie了COLORREF color;//颜色int index;
};
//初始化精灵
void spr_init(Sprite* spr, int x, int y, int r, int speed)
{spr->x = x;spr->y = y;spr->r = r;spr->speed = speed;spr->color = RGB(rand()%256,rand()%256,rand()%256);        //随机生成颜色spr->isdie = false;spr->index = -1;   //人机食物坐标}
void spr_draw(Sprite* spr)
{if (!spr->isdie){//设置填充颜色setfillcolor(spr->color);//绘制一个圆solidcircle(spr->x, spr->y, spr->r);}
}void gamer_move(Sprite* spr)
{//获取键盘按键if (GetAsyncKeyState(VK_UP))                   //GetAsyncKeyState获取异步按键的状态(检测某个健是否按下){spr->y -= spr->speed;}if (GetAsyncKeyState(VK_DOWN))                    //GetAsyncKeyState获取异步按键的状态(检测某个健是否按下){spr->y += spr->speed;}if (GetAsyncKeyState(VK_LEFT))                   //GetAsyncKeyState获取异步按键的状态(检测某个健是否按下){spr->x -= spr->speed;}if (GetAsyncKeyState(VK_RIGHT))                   //GetAsyncKeyState获取异步按键的状态(检测某个健是否按下){spr->x += spr->speed;}
}void gamer_eatFood(Sprite* gamer, Sprite* foods)
{//遍历食物数组for (int i = 0; i < FOODNUM; i++) {//圆心距小于玩家的半径if (!foods[i].isdie&&distance(gamer, foods+i) < gamer->r){//玩家变大gamer->r += foods[i].r/8;//食物消失foods[i].isdie = true;}}}void ai_eatFood(Sprite* ais, Sprite* foods)
{for (int i = 0; i < AINUM; i++){if (ais[i].isdie)continue;for (int k = 0; k < FOODNUM; k++){if (!foods[k].isdie && distance(ais + i, foods + k) < ais[i].r){ais[i].r += foods[ais[i].index].r / 8;foods[k].isdie = true;}}}
}//定义全局变量
Sprite gamer;//玩家
Sprite food[FOODNUM]; //食物的数组
Sprite ai[AINUM];//人工智障 联机//追击方法
void chase(Sprite* chase, Sprite* run)
{if (chase->x > run->x){chase->x--;}else{chase->x++;}}void ai_move(Sprite* ais,Sprite* foods)
{int minDis = getwidth();//吃最近的食物int k;for (int i = 0; i < FOODNUM; i++) //食物{if (food[i].isdie)continue;for (k = 0; k < AINUM; k++){if (ais[k].isdie)continue;//开始判断double dis = distance(foods + i, ais + k);if (dis < minDis){minDis = dis;ais[k].index = k;}}}for (int i = 0; i < AINUM; i++){if (!foods[ais[i].index].isdie){//开始追击chase(ais + i, foods + ais[i].index);能吃了,圆心距小于我的半径//if (distance(ais + i, foods + ais[i].index) < ais[i].r)//{//  ais[i].r = foods[ais[i].index].r / 8;//    foods[ais[i].index].isdie = true;//}}}
}
void draw()
{spr_draw(&gamer);//绘制所有食物for (int i = 0; i < FOODNUM; i++){spr_draw(food + i);}for (int i = 0; i < AINUM; i++){spr_draw(ai + i);}
}//初始化所有数据
void init()
{srand(time(NULL));spr_init(&gamer, 1024 / 2, 640 / 2, 10, 3);//初始化所有的食物for (int i = 0; i < FOODNUM; i++){int r = rand() % 5 + 2;int x = rand() % (getwidth());int y = rand() % (getheight());spr_init(food + i, x, y, r, 0);}//初始化人机for (int i = 0; i < AINUM; i++){int r = rand() % 10 + 10;int x = rand() % (getwidth()-r);int y = rand() % (getheight()-r);spr_init(ai + i, x, y, r,3);}}int main()
{//创建窗口initgraph(1024, 640);//设置背景颜色setbkcolor(WHITE);cleardevice();init();while (true) {//获取一下时间int startTime = clock();//绘制太快,未完成的步骤都已经被看到,所以会闪屏BeginBatchDraw(); //开启双缓冲//在绘制前先清屏cleardevice();draw();gamer_move(&gamer);ai_move(ai,food);gamer_eatFood(&gamer, food);ai_eatFood(ai, food);EndBatchDraw();//结束双缓冲//控制游戏帧率int  frameTime = clock() - startTime;   //计算一帧用了多久//提前就执行完了当前帧了 frametime 10 16.6666if (frameTime < SCREEN_TICK_PER_FRAME){Sleep(SCREEN_TICK_PER_FRAME - frameTime);}}getchar();//防止闪退return 0;
}

球球大作战简易版代码(含简单人机)相关推荐

  1. python球球大作战简易版详解

    在玩很多游戏的时候,我们可以发现游戏里面的世界很大,但是整个窗口却最大不过我们屏幕大小,为了观察到整个世界,我们的视角窗口就会随着里面人物的移动不断的移动. 比如说游戏球球大作战,在玩这款游戏的时候我 ...

  2. 名字大作战小游戏代码(含注释)

    //创作人Allen //代码如下 #include <bits/stdc++.h> #include <windows.h> #include <conio.h> ...

  3. 球球大作战如何在电脑上玩 球球大作战电脑版教程

    <球球大作战>一款超好玩,超萌酷,超有挑战性的休闲手游,我们可与全球玩家实时对战的休闲游戏.在这个球球的世界里,每个人都化身为一颗独特的球球,大球吃小球,努力生存下来就是唯一目标!接下来, ...

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

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

  5. 贪吃蛇大作战撞墙不死c语言,贪吃蛇大作战无敌版

    贪吃蛇大作战无敌版是款好玩的休闲类的游戏,游戏中拥有十分简单的画风,玩法十分的简单,你在游戏中简直是无敌的存在,贪吃蛇大作战无敌版撞到别人身上不会死,还可以随意翻出去,让你从此横行霸道于群蛇之间.玩法 ...

  6. 300大作战怎么在电脑上玩 300大作战电脑版玩法教程

    <300大作战>是一款根据300英雄改编而成的二次元MOBA竞技类对战游戏,在英雄的设定上,所有的人物均来自于二次元世界中的诸多作品,游戏继承了端游中的完美品质,且在玩法和交互上面更胜一筹 ...

  7. 【图像处理】双三次插值(Bicubic interpolation)原理及matlab简易版代码

    先简单写下. 双线性插值:缩放后图像矩阵(简称TI)像素坐标映射到原图像矩阵(简称OI)中得坐标点P(x,y),P点临近四个坐标点像素值的线性加权求和即P点像素值. "双"指的图像 ...

  8. 原谅帽大作战网页版服务器连接失败,原谅帽大作战网页PC版

    当你在生活中遇到不如意,不妨来这款游戏中发泄一下,<原谅帽大作战网页版>又称绿帽大作战,十分生动形象的表现了最近网上火爆的这个梗,与其选择原谅她,给别人丢绿帽子当然爽的起飞了,游戏在线即玩 ...

  9. Java贪吃蛇360旋转,贪吃蛇大作战360版

    贪吃蛇大作战360客户端带你享受最轻松.最愉悦的休闲游戏,游戏中比拼的不仅是手速,还有技巧,更加考验你的策略!比赛刚开始时大家都是小蛇,这时候就要通过不断努力来把自己变成巨无霸,这样才能更加轻松的取得 ...

最新文章

  1. 分享一波 ZooKeeper 面试题
  2. php使用zeromq
  3. request内置对象
  4. Amazon Web Service 雲端運算平台攻略 【2】
  5. Nginx学习之八-惊群问题
  6. Android中GridView实现互相添加和删除
  7. 【图像跟踪】基于matlab GUI均值漂移图像跟踪【含Matlab源码 743期】
  8. ADS学习:谐波分析和参数扫描
  9. 工作量证明生态的现状与运行原理
  10. Subclipse安装
  11. 五个最佳媒体格式转换器
  12. 一文带你熟悉JAVA IO这个看似很神秘的菇凉
  13. 制造业信息化管理蓝图
  14. pandas之数据文件导入和导出(python读取.csv,.txt,excel文件(.xlsx)以及导出为.csv、excel文件)
  15. cadence allegro 之如何隐藏/显示单个DRC
  16. hdoj6441(勾股数)(模板 重要)
  17. proteus8单片机c语言仿真教程,入门学习Proteus 8仿真软件以及C51单片机的LED点亮(C语言)——实例...
  18. 三维计算机动画制作软件是,三维影视动画制作软件
  19. SRM 558 SurroundingGame
  20. 【Linux】USB驱动程序

热门文章

  1. 破解TP-Link路由-嗅探PPPoE拨号密码
  2. JAVA 类名.class是什么意思?
  3. 英雄之刃显示服务器断开怎么办,常见问题_07073英魂之刃网页游戏官网
  4. 假相当位温MATLAB绘图,关于假相当位温的精确计算
  5. Kali Linux 终端字体配色
  6. 何制作手机自适应网页
  7. MATLAB 脚本 判断一个数是否为素数
  8. VIEWGOOD(远古)P2P流媒体直播系统的设计与实现
  9. ipv4子网掩码是指的什么意思
  10. a 标签实现文件下载(解决打开的问题)