C语言推箱子(带回退,撤回,返回上一步功能)
学校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语言推箱子(带回退,撤回,返回上一步功能)相关推荐
- c语言推箱子文字说明,c语言 推箱子(C language Sokoban).doc
c语言 推箱子(C language Sokoban) c语言 推箱子(C language Sokoban) 推箱子游戏/ * * / #包括<< DOS." #包括< ...
- c语言推箱子游戏实习报告,用C语言编写推箱子游戏
本文实例为大家分享了C语言推箱子游戏的具体实现代码,供大家参考,具体内容如下 #include #include #include #include //行和列 #define ROW 10 #def ...
- c 语言推箱子vs,C语言推箱子小游戏教程
作者GitHub-Pages个人主页 本教程GitHub-Pages链接 本教程百度云下载地址 本教程编写于2016/11/22 Dawson Lee edited this page on Beij ...
- C语言 推箱子游戏 简单 详细 (控制台)
使用C语言实现超简单的推箱子游戏! 感谢您打开了这篇文章,下面我将讲述一下推箱子是如何实现的. 如果您喜欢我的文章可以点赞支持一下. 如果您对我的程序有什么意见和建议欢迎在评论区发表评论. 另外附赠适 ...
- c语言语音控制游戏文献,C语言课程设计-基于C语言推箱子游戏设计-毕业论文文献.doc...
gd工程职业技术学院毕业论文 基于C语言的推箱子游戏设计 Design of the push box Based on Combined Language 作者姓名: 学科专业: 应用电子技术 学院 ...
- c语言推箱子代码_C语言烂大街的东西都学不会!C语言多关卡推箱子制作教程
C语言多关卡推箱子,兄台了解一下?没错,C语言完整简单项目实战 很高兴你能光临小编寒舍 首先感谢百忙之中你能从万千文章中点小编得专属页面.这不是娱乐篇,这是学习道场.开始前,小编就做一个简单得自我介绍 ...
- c 语言推箱子vs,基于C语言实现推箱子游戏
本文实例为大家分享了C语言实现推箱子游戏的具体代码,供大家参考,具体内容如下 代码在vs2013上测试运行. 思想: 1):地图用二维数组实现,箱子.墙壁.人等事物用不同的数字表示,遍历二维数组,遇到 ...
- C语言正反比例函数代码格式,c语言推箱子代码.doc
#include void map1(); void map2(); void map3(); void show(); void move(); void main(int argc,char*ar ...
- C++推箱子游戏(可以撤回)
C++推箱子小游戏制作 期末了,需要交一个C++大作业,就准备了一下写了一个推箱子小游戏,内容借鉴于网友, 不过进行了一些修改添加了一些新的内容,下面放出源码和效果. 一共有五个关卡,具体内容在下面代 ...
最新文章
- 这届架构师成功的理由,它排第一……
- [AGC018 B] Sports Festival 解题报告
- 如何在 Cypress 测试代码中屏蔽(Suppress)来自应用代码报出的错误消息
- css3实现旋转的立方体
- 高低频磨皮(商业磨皮一种)
- 王巧乐菇凉的360图书馆--记录大量web日志分析的内容,非常好
- windows x86和x64的区别
- CCF中学生计算机程序设计入门篇练习2.4.1(NOI1001 温度转换) pascal
- JavaScript - 自定义属性 -
- 问答社区常见三维问题整理
- 《富爸爸穷爸爸》读书笔记
- 手机软件测试wifi需要注意哪些问题,WiFi工作原理、测试及生产注意事项
- 给本地图片添加水印(图片,文字)
- Python Plt颜色配色一览(热力图)
- ubuntu 黑体_Ubuntu 黑体解决方案
- 体脂秤方案开发脂肪秤方案设计
- OKR目标与关键结果法
- ffmpeg源码分析 (二)
- 关于使用Restlet的升级
- 中国版权保护中心账号注册不了怎么解决