简易参考这个视频:听一遍就懂:
https://www.bilibili.com/video/BV1SB4y1u7gp?t=1185
需要用到easyx库,文档:
https://docs.easyx.cn/zh-cn/intro

大致能实现:生成豆子,躲避敌人,计分(有一点问题)

我自己加上了豆子和吃豆子的部分:
豆子很简单,随机生成就行,吃豆子要看边界条件

代码比较长,没有分流到其他头文件

环境:visual studio 2019
注意看 项目 -> 属性:有几个地方要调:注意平台是win32
1.使用多字节字符集

2.C/C++里面 SDL检查设置为否
应该就这些了,其他没问题
图片自己找

写了更详细的文档,有需要的私信

#include <stdio.h>
#include <easyx.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include <graphics.h>/*****************************定义*********************************************/
//定义数据
#define WIDTH  960
#define HEIGHT 630     //初始化窗口
#define ENEMY_NUM 4    //敌人数量
#define BEAN_NUM 15    //豆子数量
#define R 10int price = 0;   //初始化得分
int end=2;       //结束方式:0成功,1失败, 2正常 IMAGE mapImg; //定义背景图片
unsigned long tt1, tt2;//定义玩家
struct Player
{int x, y;int dirx, diry; //玩家的方向IMAGE player_photo; //玩家图片unsigned long t1, t2, dt; //dt=t2-t1
};
//玩家
Player player;//定义怪兽
Player enemy[ENEMY_NUM];//定义豆子
struct bean
{int x,y,r;bool exist;  //豆子是否存在
};bean beans[BEAN_NUM];  //定义豆子数量/********************************初始化数据界面******************************************/void GameInit()
{srand(time(0));//初始化游戏窗口:宽度和高度initgraph(WIDTH, HEIGHT);//初始化游戏界面,欢迎界面while (!_kbhit()){settextcolor(RED);settextstyle(50, 30, _T("宋体"));outtextxy(130, 50, "欢迎来到吃豆人小游戏!");settextstyle(40, 20, _T("楷体"));outtextxy(400, 130, "游戏规则");settextcolor(GREEN);settextstyle(40, 20, _T("楷体"));outtextxy(300, 200, "1.请吃完所有的豆子");outtextxy(300, 270, "2.请躲避红色的敌人");outtextxy(260, 340, "3.上下左右键控制吃豆人移动");outtextxy(300, 410, "4.按空格键暂停游戏");int a = 255;while (!_kbhit()){settextstyle(30, 15, _T("宋体"));settextcolor(RGB(a, 0, 255));outtextxy(270, 500, "请按除空格外的任意键开始游戏");Sleep(41);a -= 5;if (a == 0)a = 255;}}//初始化背景图片loadimage(&mapImg, "map.jpg");putimage(0, 0, &mapImg);//初始化玩家player.x=400;   //初始化玩家的位置player.y=300;player.dirx=1;player.diry=0;loadimage(&player.player_photo,"man.PNG",40,40);putimage(0, 0, &player.player_photo);player.t1 = GetTickCount() ; //获取系统时间player.dt = 5;//控制速度//初始化敌人for (int i = 0; i < ENEMY_NUM; i++){//方向随机int n = rand() % 4;  //四个方向if (n == 0) enemy[i].dirx = 1, enemy[i].diry = 0;else if(n==1) enemy[i].dirx = -1, enemy[i].diry = 0;else if (n == 2) enemy[i].dirx = 0, enemy[i].diry = 1;else if (n == 3) enemy[i].dirx = 0, enemy[i].diry = -1;while (1)  //位置随机{enemy[i].x = rand() % (WIDTH/30)*30;enemy[i].y = rand() & (HEIGHT/30)*30;if (getpixel(enemy[i].x +40, enemy[i].y+40) != BLACK)continue;elsebreak;}enemy[i].t1 = GetTickCount();//获取系统时间enemy[i].dt = 5;  //单位是ms}tt1 = GetTickCount();  //初始化tt1//初始化豆子for (int i = 0; i < BEAN_NUM; i++){beans[i].exist = true;    //初始条件该豆子存在beans[i].r = 10;          //生成半径为10的豆子,半径不变//随机生成x,y坐标beans[i].x = rand() % (WIDTH/10)*10;beans[i].y = rand() % (HEIGHT/10)*10;}//使豆子不重叠for (int i = 0; i < BEAN_NUM; i++){for (int j = i + 1; j < BEAN_NUM; j++){if ((beans[i].x >= beans[j].x - R) && (beans[i].x <= beans[j].x + R) &&(beans[i].y >= beans[j].y - R) && (beans[i].y <= beans[j].y + R)){beans[i].x = rand() % WIDTH;beans[i].y = rand() % HEIGHT;}}}}
//生成迷宫/***************************显示绘制程序********************************/
void GameDraw()
{//开始绘制BeginBatchDraw();//绘制背景图片putimage(0, 0, &mapImg);//绘制玩家putimage(player.x, player.y, &player.player_photo);//绘制敌人for (int i = 0; i < ENEMY_NUM; i++){setfillcolor(RED);fillrectangle(enemy[i].x, enemy[i].y, enemy[i].x + 40, enemy[i].y + 40);  //敌人长宽为40}//绘制豆子for (int i = 0; i < BEAN_NUM; i++){if (beans[i].exist == true){setfillcolor(YELLOW);solidcircle(beans[i].x, beans[i].y, beans[i].r);}}//结束绘制EndBatchDraw();
}/*******************************数据更新变化*************************************/
void GameUpdate()
{//玩家数据变化_手动char key;if (_kbhit())//如果有按键动作{key = _getch();switch (key)   //分别是上下左右{case 72:   //向上loadimage(&player.player_photo, "man3.PNG", 40, 40);putimage(0, 0, &player.player_photo);player.dirx = 0, player.diry = -1;break;case 80: loadimage(&player.player_photo, "man4.PNG", 40, 40);putimage(0, 0, &player.player_photo);player.dirx = 0, player.diry = 1;break;case 75: loadimage(&player.player_photo, "man2.PNG", 40, 40);putimage(0, 0, &player.player_photo);player.dirx = -1, player.diry = 0;break; case 77: loadimage(&player.player_photo, "man.PNG", 40, 40);putimage(0, 0, &player.player_photo);player.dirx = 1, player.diry = 0;break; case 32: //空格暂停player.dirx = 0,player.diry = 0;for (int i = 0; i < ENEMY_NUM; i++){enemy[i].dirx = 0, enemy[i].diry = 0;}system("pause");break;}}//玩家数据变化_自动//移动player.t2 = GetTickCount();if (player.t2 - player.t1 >= player.dt)  //每隔5ms移动一次{player.x += 2 * player.dirx;player.y += 2 * player.diry;player.t1 = player.t2;   //重置时间}//撞墙,方向相反if ((player.x)+40 >= 960 || player.x <= 0){player.dirx = -player.dirx;}else if (player.y <= 0 || (player.y)+40 >= 630){player.diry = -player.diry;}//敌人数据变化 for (int i = 0; i < ENEMY_NUM; i++){enemy[i].t2 = GetTickCount();if (enemy[i].t2 - enemy[i].t1 >= enemy[i].dt)  //每隔5ms移动一次{enemy[i].x += 2 * enemy[i].dirx;enemy[i].y += 2 * enemy[i].diry;enemy[i].t1 = enemy[i].t2;}//撞墙if ((enemy[i].x +40)>= WIDTH || enemy[i].x <= 0){enemy[i].dirx = -enemy[i].dirx;}if (enemy[i].y <= 0 || (enemy[i].y+40) >= HEIGHT){enemy[i].diry = -enemy[i].diry;}}tt2 = GetTickCount();if (tt2 - tt1 > 1000)  //时间大于1.5秒,重新随机生成敌人方向{for (int i = 0; i < ENEMY_NUM; i++){int n = rand() % 4;  //四个方向if (n == 0) enemy[i].dirx = 1, enemy[i].diry = 0;else if (n == 1) enemy[i].dirx = -1, enemy[i].diry = 0;else if (n == 2) enemy[i].dirx = 0, enemy[i].diry = 1;else if (n == 3) enemy[i].dirx = 0, enemy[i].diry = -1;}tt1 = tt2;}//判断敌人是否与玩家相碰for (int i = 0; i < ENEMY_NUM; i++){if ((enemy[i].x +40 >= player.x ) && (enemy[i].x<= player.x + 40) &&(enemy[i].y +40 >= player.y ) && (enemy[i].y <= player.y + 40)){player.dirx = 0, player.diry = 0;for (int i = 0; i < ENEMY_NUM; i++){enemy[i].dirx = 0, enemy[i].diry = 0;}end = 1;  //失败结束}}//豆子数据变化,判断豆子与玩家碰撞                 for (int i = 0; i < BEAN_NUM; i++){if ((player.x + 40 >= beans[i].x - 10) && (player.x <= beans[i].x + 10) &&(player.y + 40 >= beans[i].y - 10) && (player.y <= beans[i].y + 10)){beans[i].exist = false;price += 1;}}//判断豆子是否全被吃完int sign = 0;  //标志符号for (int i = 0; i < BEAN_NUM; i++)  //遍历所有的豆子{if (beans[i].exist == true){sign = 0;break;}else if (beans[i].exist == false){sign = 1;continue;}}if (sign == 1){end = 0;   //成功结束}
}
/***********************************主函数**************************************/
int main()
{   GameInit();        //初始化窗口while (1){GameDraw();    //绘制界面GameUpdate();  //更新数据if (end == 2){continue;}else if (end == 1)  //失败{cleardevice();settextcolor(RED);settextstyle(60, 40, _T("宋体"));outtextxy(330, 260, "游戏失败!");settextcolor(GREEN);settextstyle(40, 20, _T("Arial"));outtextxy(50, 260, "最终分数:");//输出分数******************************//char s[10];//sprintf_s(s,"%d", price);//outtextxy(50, 300, s);//break;}else if (end == 0)   //成功{cleardevice();settextcolor(RED);settextstyle(60, 40, _T("宋体"));outtextxy(330, 260, "通关成功!");break;}}_getch();system("pause");return 0;}

最后上一下完成图:

游戏过程图:

C语言_写简易吃豆人小游戏相关推荐

  1. 前端实现简易吃豆人小游戏

    1.首先先将html文件里的初始代码设置完毕 2.规定范围 规定人物的活动范围,豆子的起始位置,人物的大小,并且逐次进行样式的编写 技术范围:css.html. 难点:需要在脑海中构思下一步的操作. ...

  2. C语言实现吃豆人小游戏(转载)

    c语言实现吃豆人小游戏(转载) 游戏内还有一些bug,凑活着来玩一玩吧! #include <stdio.h> #include <iostream> #include < ...

  3. JS实现简单的吃豆人小游戏

    吃豆人小游戏 今天练习了一下JS,写了一个吃豆人的小demo Html以及CSS部分 首先定义一个div,用来存放吃豆人的一些元素,我们给他加一个id="game",然后我们在这d ...

  4. 基于C++控制台(Windows平台)的一个吃豆人小游戏

    PacManX --南京大学2019秋季学期 "高级程序设计 "课程设计一 基于C++控制台(Windows平台)的一个吃豆人小游戏 已实现的目标: 地图支持自定义编辑(可编辑地图 ...

  5. 整活~使用webAI做一个网页AR吃豆人小游戏

    一个好习惯,先给结论 使用网页端深度学习框架识别人脸,做一个AR吃豆人小游戏.吃豆人会随着人脸在镜头内的移动而移动,吃完全部豆子即为获胜. 在线体验地址:点我预览 代码地址:点我github 本文首发 ...

  6. 可怜的博主跟小豆人杠起来啦!Python制作的吃豆人小游戏,快来围观!!

    相关文件 关注小编,私信小编领取哟! 当然别忘了一件三连哟~~ 对了大家可以关注小编的公众号哟~~ Python日志 开发环境 Python版本:3.6.4 相关模块: pygame模块: 以及一些P ...

  7. 用JAVA实现吃豆人小游戏

    用JAVA实现吃豆人小游戏 游戏运行效果 Model.java Pacman.java 完整的游戏代码及资源文件 游戏运行效果 Model.java package pacman;import jav ...

  8. python 吃豆人_pacman 人工智能编程 吃豆人小游戏 可实现智能寻路 吃豆 通关 - 下载 - 搜珍网...

    Berkeley人工智能吃豆人作业-Python/ Berkeley人工智能吃豆人作业-Python/再附带一份完整工程源码吧/ Berkeley人工智能吃豆人作业-Python/再附带一份完整工程源 ...

  9. Dev-C++5.11游戏创作之吃豆人小游戏(转载)

    Hi!大家好,我是你们的编程小王子!今天为大家转载了一个小游戏, 蒟蒻一枚https://blog.csdn.net/yueyuedog原创 代码我不过多解释,还是比较"简单"的 ...

  10. C语言零基础项目:吃豆人小游戏!详细思路+源码分享

    每天一个C语言小项目,提升你的编程能力! <吃豆游戏>是一款休闲小游戏,和贪吃蛇,球球大作战吃食物都是有差不多的游戏逻辑. 效果展示: 这个游戏本身很简单,一共3关,吃掉画面上全部小豆子就 ...

最新文章

  1. 面试官:能不能手写一个 Promise?
  2. 使用sqlserver搭建高可用双机热备的Quartz集群部署【附源码】
  3. python网络编程项目_Python网络编程攻略
  4. Oracle Golden Gate - 概念和机制
  5. Kubernetes入门——k8s概念和架构
  6. 管理感悟:承认错误,善于总结
  7. 网页设计html5实训心得,网页设计实习心得
  8. SpringBoot 中如何使用JSP页面开发?
  9. 故宫元宵灯会票务系统崩溃背后:年游客达1700万人
  10. Python数据处理041:数据分析之时间序列
  11. python做软件二次开发好吗_利用Python二次开发Creo
  12. PTA 7-6 sdut-oop-5 计算长方体和四棱锥的表面积和体积(类的继承) (10 分) JAVA
  13. 类和对象8:数值方法
  14. php5.5.12 yar,[原]PHP-yar拓展源码解读五-server篇
  15. Win10跳过开机登录界面
  16. 【2021-07-15】JS逆向之网易云音乐(私信、关注、点赞)
  17. git删除分支时究竟会删掉哪些东西
  18. 在线文字生成音频工具
  19. docker内运行的grafana重置登录密码
  20. VB虚拟机中ubuntu Linux系统安装使用MCNP5

热门文章

  1. bin 文件分析(转)
  2. django基础知识总结
  3. 《数字电子技术基础》5.1 触发器概述、5.2 SR锁存器
  4. 访谈,智能座舱开发中的人机交互与人机工程布置
  5. ubuntu16.04修改鼠标按键功能
  6. 计算机程序员目标分析,计算机程序员实习目的
  7. 【控制系统的数学模型——传递函数】
  8. 存储系列篇之IDE、SATA、SCSI、SAS、FC、SSD等概念介绍
  9. 实战 用Python放一场浪漫的烟花秀
  10. win7美化_Windows桌面美化记(二)这可能是你看过最详细的美化教程