学校c语言设计的作业可以私信找我 我还是把完整版代码贴出来了,如果想完全省事,可以私信找我学校只让用codeblocks的别私信了…()

推箱子这个游戏都很熟悉了,代码也熟悉了。正好我们下半学期学了栈,就尝试用栈做一个推箱子回退的功能。

返回上一步部分代码如下:

if (Pop(S, x) == 1){//若上一步是向上 if (x == 'W' || x == 'w'){count--;if (x == 'W'){a[i + 1][j] += 5;a[i][j] -= 5;}else{a[i - 1][j] -= 4;a[i + 1][j] += 5;a[i][j] -= 1;}}

其它方向的撤回类似。

另外我的主页博客里面有添加了easyx库的推箱子,希望可以帮助大家。

简易版推箱子全部代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<conio.h >
#define maxlevel 3
/*墙1目的地3 箱子4人5目的地上的箱子7站在目的地的人8*/          //所有地图
int a1[maxlevel][13][13] = {{{0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,1,1,1,1,1,0,0,0,0,0,0},{0,0,1,0,0,0,1,0,0,0,0,0,0},{0,0,1,0,4,0,1,0,1,1,1,0,0},{0,0,1,0,4,0,1,0,1,3,1,0,0},{0,0,1,1,1,5,1,1,1,3,1,0,0},{0,0,0,1,1,4,0,0,0,3,1,0,0},{0,0,0,1,0,0,0,1,0,0,1,0,0},{0,0,0,1,0,0,0,1,1,1,1,0,0},{0,0,0,1,1,1,1,1,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0},},{{0,0,0,1,1,1,1,1,1,1,0,0,0},{1,1,1,1,0,0,0,0,0,1,0,0,0},{1,0,0,0,3,1,1,1,0,1,0,0,0},{1,0,1,0,1,0,0,0,0,1,1,0,0},{1,0,1,0,4,0,4,1,3,0,1,0,0},{1,0,1,0,0,7,0,0,1,0,1,0,0},{1,0,3,1,4,0,4,0,1,0,1,0,0},{1,1,0,0,0,0,1,0,1,0,1,1,1},{0,1,0,1,1,1,3,0,0,0,0,5,1},{0,1,0,0,0,0,0,1,1,0,0,0,1},{0,1,1,1,1,1,1,1,1,1,1,1,1},{0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0},},{{0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,1,1,1,1,1,1,1,0,0},{0,0,0,1,1,0,0,1,0,0,1,0,0},{0,0,0,1,0,0,0,1,0,5,1,0,0},{0,0,0,1,4,0,4,0,4,0,1,0,0},{0,0,0,1,0,4,1,1,0,0,1,0,0},{0,1,1,1,0,4,0,1,0,1,1,0,0},{0,1,3,3,3,3,3,0,0,1,0,0,0},{0,1,1,1,1,1,1,1,1,1,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0},}};
int a[13][13];//当前地图//栈的操作,实现撤回功能
typedef struct
{char str[1000];//最多支持1000步回退int top;
} Stack;
//判断栈是否为空
int IsEmpty(Stack& S)
{return (S.top == -1 ? 1 : 0);
}
//进栈
void Push(Stack& S, char ch)
{S.top++;S.str[S.top] = ch;
}
//出栈
int Pop(Stack& S, char& x)
{if (IsEmpty(S) == 1)return 0;x = S.str[S.top];S.top--;return 1;
}
//以上是栈的操作//目的地的坐标
typedef struct node
{int x, y;
}Date;
typedef struct
{Date d[10];//最多十个目的地。 int num;//个数。
}Destination;
//以上是目的地坐标的结构体Destination D;//找目的地
void des(int a[13][13])
{int i, j, k = 0;D.num = 0;for (i = 0; i < 13; i++)for (j = 0; j < 13; j++)if (a[i][j] == 3){D.num++;D.d[k].x = i;D.d[k++].y = j;}
}
//以上找目的地坐标//制造地图
void ditu(int a[13][13])
{int i, j;for (i = 0; i < 13; i++){for (j = 0; j < 13; j++){switch (a[i][j]){case 0:printf("  "); break;case 1:printf("■"); break;case 3:printf("△"); break;case 4:printf("○"); break;case 5:printf("♀"); break;case 7:printf("●");break;case 8:printf("♀");break;}}printf("\n");}
}//动作制造
int action(int a[13][13], Stack& S)
{char ch, x;/*找出人5或者8()的位置*/int i, j;for (i = 0; i < 13; i++){for (j = 0; j < 13; j++){if (a[i][j] == 5 || a[i][j] == 8)break;}if (a[i][j] == 5 || a[i][j] == 8)break;}ch = getch();switch (ch){//撤回前一步case 'R':if (Pop(S, x) == 1){//若上一步是向上 if (x == 'W' || x == 'w'){if (x == 'W'){a[i + 1][j] += 5;a[i][j] -= 5;}else{a[i - 1][j] -= 4;a[i + 1][j] += 5;a[i][j] -= 1;}}//若上一步是向下 if (x == 'S' || x == 's'){if (x == 'S'){a[i - 1][j] += 5;a[i][j] -= 5;}else{a[i + 1][j] -= 4;a[i - 1][j] += 5;a[i][j] -= 1;}}//若上一步是向左 if (x == 'A' || x == 'a'){if (x == 'A'){a[i][j + 1] += 5;a[i][j] -= 5;}else{a[i][j - 1] -= 4;a[i][j + 1] += 5;a[i][j] -= 1;}}//若上一步是向右if (x == 'D' || x == 'd'){if (x == 'D'){a[i][j - 1] += 5;a[i][j] -= 5;}else{a[i][j + 1] -= 4;a[i][j - 1] += 5;a[i][j] -= 1;}}}break;//以上是撤回功能 /*向前走*/case 'W'://人走if (a[i - 1][j] == 0 || a[i - 1][j] == 3){a[i - 1][j] += 5;a[i][j] -= 5;Push(S, 'W');}//人推箱子走 if ( (a[i - 1][j] == 4 || a[i - 1][j] == 7) && (a[i - 2][j] == 0 || a[i - 2][j] == 3)){//if (a[i - 2][j] == 0 || a[i - 2][j] == 3)//{a[i - 2][j] += 4;a[i - 1][j] += 1;a[i][j] -= 5;Push(S, 'w');//}} break;/*向下走*/case 'S'://人走if (a[i + 1][j] == 0 || a[i + 1][j] == 3){a[i + 1][j] += 5;a[i][j] -= 5;Push(S, 'S');}//人推箱子走 if (a[i + 1][j] == 4 || a[i + 1][j] == 7){if (a[i + 2][j] == 0 || a[i + 2][j] == 3){a[i + 2][j] += 4;a[i + 1][j] += 1;a[i][j] -= 5;Push(S, 's');}} break;/*向左走*/case 'A'://人走if (a[i][j - 1] == 0 || a[i][j - 1] == 3){a[i][j - 1] += 5;a[i][j] -= 5;Push(S, 'A');}//人推箱子走 if (a[i][j - 1] == 4 || a[i][j - 1] == 7){if (a[i][j - 2] == 0 || a[i][j - 2] == 3){a[i][j - 2] += 4;a[i][j - 1] += 1;a[i][j] -= 5;Push(S, 'a');}} break;/*向右走*/case 'D'://人走if (a[i][j + 1] == 0 || a[i][j + 1] == 3){a[i][j + 1] += 5;a[i][j] -= 5;Push(S, 'D');}//人推箱子走 if (a[i][j + 1] == 4 || a[i][j + 1] == 7){if (a[i][j + 2] == 0 || a[i][j + 2] == 3){a[i][j + 2] += 4;a[i][j + 1] += 1;a[i][j] -= 5;Push(S, 'd');}} break;}//检测是否完成游戏for (i = 0; i < D.num; i++){if (a[D.d[i].x][D.d[i].y] != 7)return 0;}return 1;
}//开始菜单
void startmenu()
{printf("    欢迎来到董宏浩开发的推箱子小游戏       \n");printf("             更多新关卡正在开发主中...        \n");printf("                  按回车开始游戏               \n");getchar();system("cls");
}//普通模式
void putong()
{int level = 0;//普通模式while (level < maxlevel){//重置栈Stack S = { {0},0 };//给当前地图赋值for (int i = 0; i < 13; i++)for (int j = 0; j < 13; j++)a[i][j] = a1[level][i][j];//寻找目的地des(a);while (1){    ditu(a);if (action(a, S))break;system("cls");}system("cls");printf("恭喜通过次关,太厉害了,继续请按回车!!");getchar();system("cls");level++;}printf("恭喜你通过了所有关卡,真是太厉害了,作者都做不到!!");getchar();system("cls");
}//主函数
int main()
{//主菜单提示startmenu();putong();
}

C语言推箱子(带回退,撤回,返回上一步功能)相关推荐

  1. c语言推箱子文字说明,c语言 推箱子(C language Sokoban).doc

    c语言 推箱子(C language Sokoban) c语言 推箱子(C language Sokoban) 推箱子游戏/ * * / #包括<< DOS." #包括< ...

  2. c语言推箱子游戏实习报告,用C语言编写推箱子游戏

    本文实例为大家分享了C语言推箱子游戏的具体实现代码,供大家参考,具体内容如下 #include #include #include #include //行和列 #define ROW 10 #def ...

  3. c 语言推箱子vs,C语言推箱子小游戏教程

    作者GitHub-Pages个人主页 本教程GitHub-Pages链接 本教程百度云下载地址 本教程编写于2016/11/22 Dawson Lee edited this page on Beij ...

  4. C语言 推箱子游戏 简单 详细 (控制台)

    使用C语言实现超简单的推箱子游戏! 感谢您打开了这篇文章,下面我将讲述一下推箱子是如何实现的. 如果您喜欢我的文章可以点赞支持一下. 如果您对我的程序有什么意见和建议欢迎在评论区发表评论. 另外附赠适 ...

  5. c语言语音控制游戏文献,C语言课程设计-基于C语言推箱子游戏设计-毕业论文文献.doc...

    gd工程职业技术学院毕业论文 基于C语言的推箱子游戏设计 Design of the push box Based on Combined Language 作者姓名: 学科专业: 应用电子技术 学院 ...

  6. c语言推箱子代码_C语言烂大街的东西都学不会!C语言多关卡推箱子制作教程

    C语言多关卡推箱子,兄台了解一下?没错,C语言完整简单项目实战 很高兴你能光临小编寒舍 首先感谢百忙之中你能从万千文章中点小编得专属页面.这不是娱乐篇,这是学习道场.开始前,小编就做一个简单得自我介绍 ...

  7. c 语言推箱子vs,基于C语言实现推箱子游戏

    本文实例为大家分享了C语言实现推箱子游戏的具体代码,供大家参考,具体内容如下 代码在vs2013上测试运行. 思想: 1):地图用二维数组实现,箱子.墙壁.人等事物用不同的数字表示,遍历二维数组,遇到 ...

  8. C语言正反比例函数代码格式,c语言推箱子代码.doc

    #include void map1(); void map2(); void map3(); void show(); void move(); void main(int argc,char*ar ...

  9. C++推箱子游戏(可以撤回)

    C++推箱子小游戏制作 期末了,需要交一个C++大作业,就准备了一下写了一个推箱子小游戏,内容借鉴于网友, 不过进行了一些修改添加了一些新的内容,下面放出源码和效果. 一共有五个关卡,具体内容在下面代 ...

最新文章

  1. 这届架构师成功的理由,它排第一……
  2. [AGC018 B] Sports Festival 解题报告
  3. 如何在 Cypress 测试代码中屏蔽(Suppress)来自应用代码报出的错误消息
  4. css3实现旋转的立方体
  5. 高低频磨皮(商业磨皮一种)
  6. 王巧乐菇凉的360图书馆--记录大量web日志分析的内容,非常好
  7. windows x86和x64的区别
  8. CCF中学生计算机程序设计入门篇练习2.4.1(NOI1001 温度转换) pascal
  9. JavaScript - 自定义属性 -
  10. 问答社区常见三维问题整理
  11. 《富爸爸穷爸爸》读书笔记
  12. 手机软件测试wifi需要注意哪些问题,WiFi工作原理、测试及生产注意事项
  13. 给本地图片添加水印(图片,文字)
  14. Python Plt颜色配色一览(热力图)
  15. ubuntu 黑体_Ubuntu 黑体解决方案
  16. 体脂秤方案开发脂肪秤方案设计
  17. OKR目标与关键结果法
  18. ffmpeg源码分析 (二)
  19. 关于使用Restlet的升级
  20. 中国版权保护中心账号注册不了怎么解决

热门文章

  1. 深度学习在羚珑中的探索 -- 模板风格分类识别
  2. 邮箱大师添加邮箱的服务器,网易邮箱大师添加邮箱imap账号教程-网易邮箱大师怎么添加邮箱imap账号 - Iefans...
  3. 记一次变异CC攻击解析
  4. 如何查看手机上chrome浏览器的console日志打印
  5. 美团App用户界面分析
  6. 端游开发中用什么技术可以让用户更短时间内体验游戏?端游分发
  7. js和es6高频面试题总结
  8. 美术 2.7 Metallic与Speculer流程
  9. 微信小程序——引入第三方图标、图标组件
  10. Kaiming He 何恺明