1共有5个关卡

2两个箱子和箱子碰墙不动

3按空格初始化该关卡

4撤销上一步

5正确路提示

6关卡编辑器

7关卡存在文件里

8可以读取文件里的地图

9关卡选择

10制作了个很丑的界面

对应之法:

功能一:选择关卡,通过按键1,2,3,4,5选择相应的关卡;

功能二:通过空格重置关卡;

功能三:按z建实现撤回,只可测绘一步;

功能四:在未进行任何步数情况下,按c键,人物可自动向正确方向移动,一直按c键可以直接成功;

功能五:点击非墙区域,区域变墙,点击墙区域,墙变空白;

功能六:按p键,编辑后的地图自动保存到代码定义的文本文件里;

功能七:按o键,自动读取文本文件的地图,且不改变代码里原本的地图信息。

功能八:通过相应的函数,来控制角色和箱子的引动。

#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<iostream>
#define b_size 60//像素格的尺寸
#define b_num 8//列数
#define LEVEL_TOTALNUM 5//关卡数
int bs=0;
char s[100];char levels[LEVEL_TOTALNUM][b_num][b_num + 1] =
{ { "wwwwwwww","wwwtbeew","weeeeeew","weeeeeew","weeeeeew" ,"weepaeew","weeewwww","wwwwwwww" }
,{"wwwwwwww","wwweewww","wpetbwww","weeebeww","wewteeww","weeeeeww","weepwwww","wwwwwwww"},{"wwwwwwww","wwpeewww","weeweeww","webabeww","weeteeww","wwetewww","wwwwwwww","wwwwwwww"} ,{"wwwwwwww","wwwwwwww","weeeewww","weeettew","webbbpew","weewetww","wwwwwwww","wwwwwwww"},{"wwwwwwww","wwwwwwww","wwteewww","weewebpw","weewewew","weaeebtw","weeeewww","wwwwwwww"} };//地图内部数据
char hc[b_num][b_num + 1]= { "wwwwwwww","wwwtbeew","weeeeeew","weeeeeew","weeeeeew" ,"weepaeew","weeewwww","wwwwwwww" };
char mj[5][60] = { "wwwddwa","wwddwaawwdsswaaasdassddwwddsa","sassdwsdddwwasaddsawasaawdsddwwwaassasd",
"waaaassdwawwdddsdssawdwawaaassdddwdsawwaasddaaassdwawdd","adssaasaawsddwasaawwwdwddsswwaasasssddwddaasaawdwwsssddwa"};
struct player{int i;int j;
}player;//用户的结构体
int currentlevelnum = 0;//关卡数减1
char level[b_num][b_num + 1];//当前关卡的数据
int targetNum, achieveNum;//目标数,达成目标数
int pi = 0, pj = 0;
void jm() {cleardevice();//initgraph(b_num * b_size, b_num * b_size);setbkcolor(RGB(150, 150, 150));setfillcolor(RGB(200, 0, 0));fillrectangle(50, 50, 450,100);fillrectangle(50,100,450,150);fillrectangle(50,150,450,200);fillrectangle(50,200,450,250);fillrectangle(50,250,450,300);outtextxy(50, 50, _T("进入第一关按1"));outtextxy(50,100, _T("进入第二关按2"));outtextxy(50,150, _T("进入第三关按3"));outtextxy(50, 200, _T("进入第四关按4"));outtextxy(50,250, _T("进入第五关按5"));FlushBatchDraw();
}
void startup() {initgraph(b_num * b_size, b_num * b_size);setbkcolor(RGB(150, 150, 150));int i, j;bs = 0;for (i = 0; i < b_num; i++) {for (j = 0; j < b_num; j++) {level[i][j] = levels[currentlevelnum][i][j];}}targetNum = 0, achieveNum = 0;for (i = 0; i < b_num; i++) {for (j = 0; j < b_num; j++) {if (level[i][j] == 'p') {player.i = i;player.j = j;level[i][j] = 'e';}else if (level[i][j] == 't' || level[i][j] == 'a') {targetNum++;}}}BeginBatchDraw();
}void show() {int i, j;cleardevice();for (i = 0; i < b_num; i++) {for (j = 0; j < b_num; j++) {if (level[i][j] == 'e') {setfillcolor(RGB(150, 150, 150));setlinecolor(RGB(150, 150, 150));fillrectangle(b_size  * j, b_size  * i, b_size * (j+1), b_size * (i+1));}else if (level[i][j] == 'w') {setfillcolor(RGB(150, 0, 0));setlinecolor(RGB(150, 150, 150));fillrectangle(b_size * j, b_size * i, b_size  * (j+1), b_size *(i+1));}else if (level[i][j] == 'b') {setfillcolor(RGB(255, 255, 0));setlinecolor(RGB(150, 150, 150));fillrectangle(b_size * j, b_size * i, b_size * (j+1), b_size *(i+1));}else if (level[i][j] == 't') {setfillcolor(RGB(255, 255, 255));setlinecolor(RGB(150, 150, 150));fillrectangle(b_size * (j + 0.3), b_size * (i + 0.3), b_size  * (j + 0.7), b_size  * (i + 0.7));}else if (level[i][j] == 'a') {setfillcolor(RGB(255, 255, 0));setlinecolor(RGB(150, 150, 150));fillrectangle(b_size * j, b_size * i, b_size  *(j+1),b_size * (i+1));setfillcolor(RGB(255, 255, 255));fillrectangle(b_size * (j+0.3), b_size * (i+0.3), b_size  * (j+0.7), b_size  *( i+0.7));}}}j = player.j;i = player.i;setfillcolor(RGB(255, 0, 0));setlinecolor(RGB(80, 80, 75));fillcircle((j + 0.5) * b_size, (i + 0.5) * b_size, 0.4 * b_size);setfillcolor(RGB(80, 80, 80));fillcircle((j + 0.3) * b_size, (i + 0.45) * b_size, 0.08 * b_size);fillcircle((j + 0.7) * b_size, (i + 0.45) * b_size, 0.08 * b_size);setlinestyle(PS_SOLID, 3);line((j + 0.35) * b_size, (i + 0.7) * b_size, (j + 0.65) * b_size, (i + 0.7) * b_size);setlinestyle(PS_SOLID, 1);if (achieveNum == targetNum) {setbkmode(TRANSPARENT);settextcolor(RGB(0, 255, 255));TCHAR s[20];if (currentlevelnum < LEVEL_TOTALNUM - 1) {settextstyle(50, 0, _T("宋体"));_stprintf(s, _T("开始第%d关"), currentlevelnum + 2);//开始第%d关outtextxy(120, 160, s);outtextxy(10, 250, _T("按空格重玩当前关"));}else {settextstyle(80, 0, _T("宋体"));;outtextxy(80, 200, _T("游戏胜利"));}FlushBatchDraw();Sleep(2600);}FlushBatchDraw();
}
void mouse() {MOUSEMSG m;if (MouseHit()) {m = GetMouseMsg();if (m.uMsg == WM_LBUTTONDOWN) {int gi = (int)m.y / 60;int gj = (int)m.x / 60;if (level[gi][gj] != 'w')level[gi][gj] = 'w';else if (level[gi][gj] == 'w')level[gi][gj] = 'e';show();}}
}
void pc() {int i = 0, j = 0;FILE* fp = fopen("C:\\c++测试\\推箱子关卡编辑器.txt", "w");for (i = 0; i < b_num; i++) {for (j = 0; j < b_num; j++) {s[i *8 + j] = level[i][j];}}fputs(s, fp);fclose(fp);
}
void read() {int i = 0, j = 0;FILE* fp = fopen("C:\\c++测试\\推箱子关卡编辑器.txt", "r");while (!feof(fp)) {fgets(s, 80, fp);}fclose(fp);for (i = 0; i < b_num; i++) {for (j = 0; j < b_num; j++) {level[i][j] = s[i * 8 + j];}}show();
}
void update() {mouse();int i = 0, j = 0;if (kbhit() && (achieveNum < targetNum)) {char input = _getch();if (input != 'z') {for (i = 0; i < b_num; i++) {for (j = 0; j < b_num; j++) {hc[i][j] = level[i][j];}}pi = player.i;pj = player.j;if (input == 'c') {input = mj[currentlevelnum][bs];bs++;}if (input == 'p') {pc();}if (input == 'o') {read();}if (input == ' ') {startup();}else if (input == '1') {currentlevelnum = 0;startup();}else if (input == '2') {currentlevelnum = 1;startup();}else if (input == 'q') {jm();_getch();}else if (input == '3') {currentlevelnum = 2;startup();}else if (input == '4') {currentlevelnum = 3;startup();}else if (input == '5') {currentlevelnum = 4;startup();}if (input == 'a' || input == 's' || input == 'd' || input == 'w') {int goal_i = player.i, goal_j = player.j;int goalnext_i = goal_i, goalnext_j = goal_j;if (input == 'a') {goal_j = goal_j - 1;goalnext_j = goal_j - 1;}else if (input == 'd') {goal_j = goal_j + 1;goalnext_j = goal_j + 1;}else if (input == 's') {goal_i = goal_i + 1;goalnext_i = goal_i + 1;}else if (input == 'w') {goal_i = goal_i - 1;goalnext_i = goal_i - 1;}if (level[goal_i][goal_j] == 'e' || level[goal_i][goal_j] == 't') {player.i = goal_i;player.j = goal_j;}else if (level[goal_i][goal_j] == 'b' && level[goalnext_i][goalnext_j] == 'e') {player.i = goal_i;player.j = goal_j;level[goal_i][goal_j] = 'e';level[goalnext_i][goalnext_j] = 'b';}else if (level[goal_i][goal_j] == 'b' && level[goalnext_i][goalnext_j] == 't') {player.i = goal_i;player.j = goal_j;level[goal_i][goal_j] = 'e';level[goalnext_i][goalnext_j] = 'a';}else if (level[goal_i][goal_j] == 'a' && level[goalnext_i][goalnext_j] == 'e') {player.i = goal_i;player.j = goal_j;level[goal_i][goal_j] = 't';level[goalnext_i][goalnext_j] = 'b';}else if (level[goal_i][goal_j] == 'a' && level[goalnext_i][goalnext_j] == 't') {player.i = goal_i;player.j = goal_j;level[goal_i][goal_j] = 't';level[goalnext_i][goalnext_j] = 'a';}elsereturn;}achieveNum = 0;int i, j;for (i = 0; i < b_num; i++) {for (j = 0; j < b_num; j++) {if (level[i][j] == 'a') {achieveNum++;}}}if (achieveNum == targetNum) {show();if (currentlevelnum < LEVEL_TOTALNUM - 1) {currentlevelnum++;startup();}}}else if(input=='z') {for (i = 0; i < b_num; i++) {for (j = 0; j < b_num+1; j++) {level[i][j] = hc[i][j];}bs--;player.i = pi;player.j = pj;}//show();}}
}
int main() {startup();show();jm();_getch();while (1) {show();update();  }return 0;
}

第五关

经典推箱子游戏无敌版相关推荐

  1. 游戏制作-推箱子游戏html5版(可以在线预览)

    用 html 做了一款推箱子的小游戏(只做了一个关卡),屏幕触控和键盘方向键控制小人推箱子.重新开始.上一步及通关等功能,直接上图: 预览地址 效果链接(只看看不如亲自体验一下,因为写了键盘监听的缘故 ...

  2. 推箱子游戏(C语言版)

    [C语言经典算法100道实战题]点击链接即可在线学习: https://edu.csdn.net/course/detail/37564 一.推箱子游戏C语言版[运行效果如下]** 二.安装图形库 我 ...

  3. 推箱子游戏的90个经典关卡

     推箱子游戏的90个经典关卡 认为智商不低的可以试一下,将各个文件下载到本地,用游戏软件打开即可. screen.1 screen.1 source screen.2 screen.2 source ...

  4. 一款C/C++经典的益智3D卡通推箱子游戏(提供源码下载)

    这一次先来看一个经典的推箱子游戏,相信大家也都知道这款游戏,推箱子游戏最早源于日本,是一款极其锻炼逻辑思考能力的游戏,箱子只能推不能拉,玩家必须在一个有限的空间里,将所有的箱子归位,如下图所示. C+ ...

  5. C语言开发《推箱子游戏》,亲自手把手教会大家

    [C语言经典算法100道实战题]适合具备C语言基础语法的同学学习,提高编写程序的逻辑思维能力和算法设计能力专门精心设计.100个经典的算法供大家练习及配套对应的录播视频.为我们今后学习其它的编程语言和 ...

  6. C/C++游戏开发:用C++打造曾经风靡的推箱子游戏,这个真有意思!

    推箱子小游戏,作为一款经典的益智类游戏,曾经在 PC 机,移动端风行一时(现在有的老年机上还自带有此游戏).如果你不知道我说的是哪款游戏,请看下面的这张图片: 尝试用C++代码编写一个推箱子游戏,界面 ...

  7. 推箱子游戏解法的数学分析与代码实现(Leetcode1263等未完)

    推箱子游戏是将箱子推到目标点,是一个经典的游戏,这个问题存在一个最优解,即最短走法,这里通过分析一个箱子与多个箱子,探讨问题的解法. 一个箱子问题链接:leetcode推箱子 这个问题是一个阉割版,不 ...

  8. 推箱子java下载_Java实现简单推箱子游戏

    本文实例为大家分享了Java实现简单推箱子游戏的具体代码,供大家参考,具体内容如下 *编写一个简易的推箱子游戏,使用10*8的二维字符数据表示游戏画面,H表示墙壁; &表示玩家角色: o表示箱 ...

  9. c语言基于easyX樱花特效,C++基于easyx图形库实现推箱子游戏

    本文实例为大家分享了C++实现推箱子游戏的具体代码,供大家参考,具体内容如下 头文件: #include #include //#include #include #include #include ...

最新文章

  1. mysql学习总结一:mysql的安装,介绍,基本命令操作
  2. logback无法生成日志文件之谜
  3. Nginx为什么比Apache Httpd高效
  4. vc下禁止按钮连续点击的方法
  5. 工具解析:杀毒引擎惨遭打脸,黑帽大会爆惊天免杀工具
  6. wps2019计算机里的云盘,WPS2019云文档如何使用?
  7. wifi 性能 测试 android,WiFi性能测试
  8. 产品经理的小白面试~
  9. [转载]Geronimo 叛逆者: 使用 Spring 框架轻松解决数据访问和配置问题
  10. 遥感图像场景分类方法
  11. Python编程--个人信息修改小程序
  12. 数字调制系列:IQ调制基本理论
  13. 深度细节 | Go 的 panic 秘密都在这
  14. android 中文开发文档
  15. 傲梅分区助手看不到linux,傲梅分区助手命令行与注意事项
  16. 监管的重拳出击下,电子烟何去何从?
  17. 如何做好开始游戏选择英雄界面[不是标题党]
  18. 陶泓达:3.30晚间美盘最新走势分析及操作思路!
  19. Python全栈工程师(32:Dom)
  20. bugku#点login咋没反应-writeup

热门文章

  1. Anaconda入门
  2. 平心静气,去火,去火 之二
  3. java中什么是构造函数_java中构造函数是什么
  4. 3D视觉:为工业机器人配备一双“火眼金睛”
  5. GP61-4-A比例电磁铁配套放大器RT-PSDM2
  6. Chrome浏览器无法开启声音,并且音量合成器中没有选项
  7. 802.1x身份验证
  8. 碳排放zc汇总、碳排放权交易、省级碳排放效率、环保数据集(2007-2022年)
  9. 基于FPGA的幅频均衡带通滤波器的设计
  10. Python实现LR分析