每天一个C语言小项目,提升你的编程能力!

《吃豆游戏》是一款休闲小游戏,和贪吃蛇,球球大作战吃食物都是有差不多的游戏逻辑。

效果展示:

这个游戏本身很简单,一共3关,吃掉画面上全部小豆子就过关,被敌人碰到就over。吃大豆子可以让敌人暂时能被你吃,但是后面关卡,敌人恢复时间很短,敌人速度也很快。

当然现在你用代码自己开发的话,设置多少关卡,什么样的难度都看你自己咯!

游戏中使用了图片【https://codebus.cn/f/a/0/0/135/boxman.zip】

本项目编译环境:Visual Studio 2019/2022,EasyX插件

代码展示:

#include <stdio.h.h>
#include <graphics.h>
#include <time.h>
#include <conio.h>#define M 640                       //开屏大小
#define N 480
#define rank 1                      //游戏等级                  int  g_sum   = 0;                   //统计吃豆的个数
int  g_score = 0;                   //分数统计
bool g_win   = true;                //成败的标志
IMAGE image[5];                     //装载图片
enum {LEFT=1, RIGHT, UP, DOWN};     //方向的控制
struct figure                       //人物属性
{int x;                //人物图纸坐标      int y;int x1;                //人物方向移动int y1;int x2;                   //人物物理坐标int y2;
}you,enemy[5];          /*0豆子,1可以移动地方,2墙壁,3自己,4敌人*/
int a[15][20]= {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,1,0,0,0,0,1,0,1,0,0,0,1,1,1,1,1,1,0,2, 2,1,2,2,2,1,1,2,1,1,0,0,0,1,1,4,1,1,0,2, 2,1,1,0,2,1,1,2,0,1,1,2,2,2,2,2,0,0,0,2, 2,4,1,0,2,1,1,2,1,1,1,0,1,1,1,1,0,1,1,2, 2,1,2,1,2,1,1,2,1,3,2,2,1,1,1,1,2,2,1,2, 2,1,2,1,2,1,1,1,1,1,1,1,1,0,0,0,1,1,1,2, 2,1,2,1,0,1,1,1,1,2,1,0,1,2,2,2,1,1,1,2, 2,1,0,1,0,1,2,1,1,2,1,0,1,2,1,1,4,1,1,2, 2,1,0,2,0,1,2,1,1,2,1,0,1,2,1,1,1,1,1,2, 2,1,0,2,1,1,2,1,1,2,1,0,2,2,1,0,0,0,1,2, 2,1,1,2,1,1,2,1,1,2,1,0,2,1,1,2,2,1,1,2, 2,1,2,2,1,2,2,1,1,1,1,0,1,4,1,2,0,0,1,2, 2,1,0,0,0,0,0,4,0,1,1,0,1,1,1,1,0,0,1,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2};/*数组就是地图*/ int b[15][20]= {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,1,0,0,0,0,1,0,1,0,0,0,1,1,1,1,1,1,0,2, 2,1,2,2,2,1,1,2,1,1,0,0,0,1,1,4,1,1,0,2, 2,1,1,0,2,1,1,2,0,1,1,2,2,2,2,2,0,0,0,2, 2,4,1,0,2,1,1,2,1,1,1,0,1,1,1,1,0,1,1,2, 2,1,2,1,2,1,1,2,1,3,2,2,1,1,1,1,2,2,1,2, 2,1,2,1,2,1,1,1,1,1,1,1,1,0,0,0,1,1,1,2, 2,1,2,1,0,1,1,1,1,2,1,0,1,2,2,2,1,1,1,2, 2,1,0,1,0,1,2,1,1,2,1,0,1,2,1,1,4,1,1,2, 2,1,0,2,0,1,2,1,1,2,1,0,1,2,1,1,1,1,1,2, 2,1,0,2,1,1,2,1,1,2,1,0,2,2,1,0,0,0,1,2, 2,1,1,2,1,1,2,1,1,2,1,0,2,1,1,2,2,1,1,2, 2,1,2,2,1,2,2,1,1,1,1,0,1,4,1,2,0,0,1,2, 2,1,0,0,0,0,0,4,0,1,1,0,1,1,1,1,0,0,1,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2};/*数组就是地图*/ 函数声明/
void Init_begin();                                  //初始化开始界面
void Initia();                                      //初始化界面
void Init_score();                                  //记分板
void Init_loss();                                   //失败的界面
void Init_win();                                    //成功的界面
void Init_leave();                                  //离开的界面
void Init_copy();                                   //图形复制
void enemymove();                                   //敌人运动
void randdire(struct figure *sth);                  //使方向随即改变
bool judgemeet();                                   //相遇判断
void youmove(int k ,int speed) ;                    //对自己进行移动
void mobile();                                      //自己移动
void eatbean();                                     //判断是否吃小黄点
void play();                                        //开始游戏
int  sjs(int a,int b);                              //产生a,b之间的数
void enemymeetroad(int i);                          //敌人与路
void enemymeetbean(int i) ;                         //敌人遇豆子
void load_image();                                  //加载图片
void Game_levels();                                 //游戏等级设定                   /void Init_begin()                                   //初始化开始界面
{setbkcolor(BLACK);char init[20] = "吃豆子游戏";int x = M/2 - 250,y = 100;setcolor(CYAN);setfont(100, 0,"楷体",0,0,FW_DEMIBOLD,false,false,false);outtextxy(x,y,init);Sleep(400);RECT r = {x + 50, 250, 540, 460};setfont(24, 0, "宋体");setcolor(BROWN);outtextxy(x + 50, 250,"吃豆子游戏规则:");setfont(18, 0, "宋体");drawtext("\n\n1:游戏中,操作者可以通过方向键(上、下、左、右)或字母键(‘w’、‘s’、‘a’、‘d’)来调整方向      \n2:游戏中途可以按‘空格键’来暂停游戏        \n3:按‘ESC’推出游戏",&r, DT_WORDBREAK);setfont(24, 0,"楷体");setcolor(DARKGRAY);outtextxy(M/2 - 107,y + 300, "按");setcolor(RED);outtextxy(M/2 - 80, y + 300, "回车键");setcolor(DARKGRAY);outtextxy(M/2 , y + 300, "开始游戏");char put ;put = getch();while(put != 13)put = getch();
}/*0豆子,1可以移动地方,2墙壁,3自己,4敌人*/
void Initia()                                       //初始化界面
{cleardevice();setbkcolor(RGB(72,12,12));for( int i = 0;i < 15;i++)                      for(int j = 0;j < 20;j++)putimage(100+j*20,100+i*20,&image[a[i][j]]);you.x=9;            you.y=5;                  //敌人和自己的初始图纸坐标 enemy[0].x=15; enemy[0].y=2; enemy[1].x=1;  enemy[1].y=4; enemy[2].x=16; enemy[2].y=8; enemy[3].x=13; enemy[3].y=12; enemy[4].x=7;  enemy[4].y=13; you.x2 = you.x * 20 + 100;                        //图纸坐标转化为屏幕坐标you.y2 = you.y * 20 + 100;for(i=0;i<5;i++){enemy[i].x2 = enemy[i].x * 20 + 100;        enemy[i].y2 = enemy[i].y * 20 + 100;enemy[i].x1 = 0;   enemy[i].y1 = 1;}Init_score();
}void load_image()                                  //加载图片
{loadimage(&image[0],"IMAGE", "0.jpg");loadimage(&image[1],"IMAGE", "1.jpg");loadimage(&image[2],"IMAGE", "2.jpg");loadimage(&image[3],"IMAGE", "3.jpg");loadimage(&image[4],"IMAGE", "4.jpg");
}void Init_score()                                 //记分板
{setbkcolor(RGB(72,12,12));char infor[10];itoa(g_score,infor,10);setcolor(CYAN);setfont(28,0,"Arial");outtextxy(M - 140,90,"当前分数为");setfillstyle(RGB(72,12,12));bar(M - 40,140,M - 20,170);outtextxy(M - 80,140,infor);
}int sjs(int a,int b)                               //产生a,b之间的数
{return a+rand()%(b-a+1);
}void Init_copy()                                   //图形复制
{ for(int i = 0;i < 15;i++)for(int j = 0;j < 20;j++)a[i][j] = b[i][j];
}void enemymeetbean(int i)                            //敌人遇豆子
{int x = enemy[i].x2  ;int y = enemy[i].y2  ;for(int j = 0;j<20;j++){putimage(x,y,&image[0]);enemy[i].x2 += enemy[i].x1;enemy[i].y2 += enemy[i].y1;putimage(enemy[i].x2,enemy[i].y2,&image[4]);}
}void enemymeetroad(int i)                        //敌人遇路
{int x = enemy[i].x2 ;int y = enemy[i].y2  ;for(  int j = 0;j < 20;j++){putimage(x,y,&image[1]);enemy[i].x2 += enemy[i].x1;enemy[i].y2 += enemy[i].y1;putimage(enemy[i].x2,enemy[i].y2,&image[4]);}
}void enemymove()                                //敌人运动
{ Game_levels();for(int i = 0;i < 5;i++)                     //判断是否与墙壁相遇,如果相遇,随即改变方向{if(a[enemy[i].y+enemy[i].y1][enemy[i].x+enemy[i].x1] == 2  ||  abs(enemy[i].y1) == abs(enemy[i].x1)) randdire(&enemy[i]);}for(i = 0;i < 5;i++){if(a[enemy[i].y ][enemy[i].x] == 0)enemymeetbean(i);else  enemymeetroad(i);enemy[i].x+=enemy[i].x1;enemy[i].y+=enemy[i].y1;if(judgemeet()) break;}Sleep(180);
}void Game_levels()                                  //游戏等级设定
{if( sjs (1,rank) == 1){int t = rand() % 5;enemy[t].x1 = enemy[t].x - you.x > 0 ? -1 : 1;  enemy[t].y1 = enemy[t].y - you.y > 0 ? -1 : 1;}for(int i = 0;i < 5;i++){if(enemy[i].x == you.x && enemy[i].y + 1 == you.y){enemy[i].x1 = 0 ;     enemy[i].y1 = 1;}if(enemy[i].x == you.x && enemy[i].y - 1 == you.y){enemy[i].x1 = 0 ;     enemy[i].y1 = -1;}if(enemy[i].x + 1 == you.x && enemy[i].y == you.y){enemy[i].x1 = 1 ;     enemy[i].y1 = 0;}if(enemy[i].x - 1 == you.x && enemy[i].y == you.y){enemy[i].x1 = -1 ;    enemy[i].y1 = 1;}}
}void randdire( struct figure *sth)            //使方向随即改变
{int b=1;int x,y;while(b){x =sjs(-1,1);y=sjs(-1,1);if(a[sth->y + y][sth->x + x] != 2 && abs(y) != abs(x)){b = 0;sth->x1 = x;sth->y1 = y;}else b = 1;}
}bool judgemeet ()                            //相遇判断
{for(int i = 0;i < 5;i++){if(enemy[i].x == you.x && enemy[i].y == you.y ){g_win  = false;Init_loss();return true;break;}}return false;
}void eatbean()                                 //判断是否吃小黄点
{if(a[you.y][you.x] == 0){a[you.y][you.x] = 1;g_sum++;g_score += 10;Init_score();a[you.y][you.x] = 1;}
}void youmove(int k)                        //对自己进行移动
{switch(k){case LEFT:you.x1 = -1;you.y1 = 0;break;case RIGHT:you.x1 = 1;you.y1 = 0;break;case DOWN:you.x1 = 0;you.y1 = 1;break;case UP:you.x1 = 0;you.y1 = -1;break;}if(a[you.y + you.y1][you.x + you.x1] != 2){int x = you.x2 ;int y = you.y2 ;for(int j = 0 ;j < 10;j++){putimage(x,y,&image[1]);you.x2 += you.x1 * 2;you.y2 += you.y1 * 2;putimage(you.x2,you.y2,&image[3]);}you.x += you.x1;you.y += you.y1;eatbean();}}void Init_loss()                            //失败的界面
{cleardevice();char str[] = "挑战失败,还需继续努力呀!";LOGFONT f;getfont(&f);f.lfHeight = 48;strcpy(f.lfFaceName , "楷体");f.lfQuality = ANTIALIASED_QUALITY;f.lfWeight = FW_NORMAL;setcolor(LIGHTGREEN);setfont(&f);outtextxy(20,200,str);char tryagain[] = "是否想继续挑战?(Y/N)";f.lfHeight = 28;setfont(&f);setcolor(BROWN);outtextxy(90,300,tryagain);char yesorno ;int keep = 1 ;while(keep){yesorno = getch();if(yesorno == 'Y' || yesorno == 'y' || yesorno == 'N' || yesorno == 'n')keep = 0;}if(yesorno == 'Y'|| yesorno == 'y'){g_win   = true;g_score = 0;g_sum   = 0;cleardevice();Init_copy();Initia();}else  Init_leave();
}void Init_leave()
{cleardevice();char str[] = "下次继续努力吧!";LOGFONT f;getfont(&f);f.lfHeight = 48;strcpy(f.lfFaceName , "楷体");f.lfQuality = ANTIALIASED_QUALITY;f.lfWeight = FW_NORMAL;setcolor(LIGHTGREEN);setfont(&f);outtextxy(150,200,str);Sleep(2000);exit(0);
}void Init_win()                             //成功的界面
{cleardevice();char str[] = "恭喜你通过了游戏!!!";LOGFONT f;getfont(&f);f.lfHeight = 48;strcpy(f.lfFaceName , "楷体");f.lfQuality = ANTIALIASED_QUALITY;f.lfWeight = FW_NORMAL;setcolor(LIGHTGREEN);setfont(&f);outtextxy(50,200,str);Sleep(4000);char tryagain[] = "是否想再次挑战?(Y/N)";f.lfHeight = 28;setfont(&f);setcolor(BROWN);outtextxy(70,300,tryagain);char yesorno ;yesorno = getch();if(yesorno == 'y' || yesorno == 'Y'){g_win   = true;g_score = 0;g_sum   = 0;cleardevice();Init_copy();Initia();                             }else  exit(0);
}void stop()                                 //游戏暂停
{char key = 'a';char stop[] = "游戏暂停中";setcolor(RED);setfont(28,0,"楷体");outtextxy(230,50,stop);Sleep(100);while(key != ' ')key = getch();setcolor(RGB(72,12,12));outtextxy(230,50,stop);
}void play()
{setbkcolor(RGB(72,12,12));char key;             //获取字母int t;                //记录方向while(g_win){enemymove();judgemeet();while(kbhit()){key = getch();switch(key){case 'a':case  75:          t = LEFT;    youmove(t );          break;case 'd':case  77:      t = RIGHT;  ;  youmove(t );        break;case 's':case  80:       t = DOWN;      youmove(t );           break;case 'w':case  72:      t = UP;        youmove(t );        break;case  27:     Init_leave();   break;case  32:     stop();         break;default :                       break;}}if(g_sum == 50)        Init_win();}
}void main()
{initgraph(M,N);load_image();Init_begin();setbkcolor(RGB(72,12,12));srand((unsigned)time(NULL));Initia(); play();closegraph();
}

大家赶紧去动手试试吧!

此外,我也给大家分享我收集的其他资源,从最零基础开始的教程到C语言C++项目案例,帮助大家在学习C语言的道路上披荆斩棘!

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)最重要的是你可以在群里面交流提问编程问题哦!

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!(↓↓↓↓↓↓)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. c#百度排名点击器编写 及webser 填表.
  2. MNIST数据集实现手写数字识别(基于tensorflow)
  3. android 之 使用显示意图和隐式意图完成Activity的跳转
  4. 经典的cnn model
  5. java前后端数据交互_前后端数据交互(示例代码)
  6. 解除单个文件的与svn服务器的关联
  7. Leetcode 每日算法一题*****#495. 提莫攻击
  8. python小白从哪来开始-国外大牛解析:小白如何从零基础开始学习python编程语言...
  9. Kettle资源库-元数据
  10. 计算机办公软件应用操作,基于计算机Word办公软件的使用及操作流程
  11. Android 使用gson完成Json转map,json转单个对象,json转数组
  12. 联想计算机型号吧,lenovo全系列联想笔记本电脑型号对照表
  13. css3 呼吸的莲花_心肾呼吸法—莲花能量冥想*
  14. 华为HCIE证书含金量
  15. 简单的PHP登陆页面和登陆成功页面代码
  16. 读书笔记--项亮《推荐系统实践》第四章
  17. dvt高危患者的护理措施_DVT的预防措施
  18. auto.js教程:找图函数,图片内随机点击
  19. html做app代码模板,App单页面html5模板
  20. Maven创建第一个java项目(官方教程)

热门文章

  1. 神经网络过拟合什么意思,神经网络过拟合现象
  2. 郝逸洋:大型语言模型(LLM)时代下的代码生成
  3. 【热门电脑主题§轻音少女同人win7主题§下载】
  4. 【go学习笔记】理解Go语言的nil 【转】
  5. scoop mysql_windows下安装scoop
  6. 信息加密----现在给定一个字符串,对其进行加密处理
  7. 「读书」搞定 戴维.艾伦
  8. 【第七周:Python(二)】7周成为数据分析师
  9. mac配置双网卡 mac同时使用内网和外网
  10. 无线营销的“变”和“不变”