一个好玩的小游戏破解。
游戏介绍:
这个游戏和推箱子类似,就是给你有限的操作数,每次操作只能把箱子左移或右移,然后箱子会掉落,最后把3个以上连续相连的相同的箱子消去,如果在规定的操作数内你能让所有的箱子全部消去则通过游戏。
游戏连接地址:http://www.gamereclaim.com/2008/10/hdos-databank-request-01/
游戏截图如下:
游戏总结:
刚开始的几关比较好过,到后面就越来越难,因为人的记忆空间有限(人脑的潜力还未被完全挖掘出来),所有很难考虑很多次操作的状态,后面受智佳(校队队友)提醒发现这个图只有7*6,操作数最大为4,果断可以用程序“爆”之,于是就可以YY的敲代码了,经过3个小时的辛勤劳动之后,果断得到了游戏的答案,中途调了一个Bug,但是发现在算第24关的答案的时候出错了,后面由于太晚了就先回宿舍了,后来回宿舍睡觉的时候发现是我在模拟箱子下落的过程对于某些情况是有错的,隔天早早到实验室果断改了一下代码(其实就是忘了更新原来位置箱子的状态,但最上层即一层有箱子时就会出错),最后我神奇的用程序通关了。(*^__^*) 嘻嘻……
暴力求解代码如下:
/*Author: ACb0yDate: 2010年12月3日13:19:14Result: find the all ans of all levels. */ #include <iostream> #include <algorithm> #include <string> #include <vector> #include <queue> #include <set> using namespace std;//操作 struct operation {//在图中的那个格子进行操作int x;int y;//操作的类型int op_type;//构造函数operation(int a, int b, int c) {x = a;y = b;op_type = c;} };//每个状态 struct state {//图的状态char g[8][7];//从初始状态达到当前状态///需要的操作序列vector<operation> v; };//状态判重 set<string> s;//操作(1是右移,-1是左移) int dy[] = {1, -1};//初始化图 char g[8][7];//模拟单个箱子的掉落过程 void down_alone(int x, int y, char g[8][7]) {for (int i = x + 1; i <= 7; ++i) {if (g[i][y] == '0') {char t = g[x][y];g[x][y] = g[i][y];g[i][y] = t;x++;} else {break;}} }//模拟整列箱子的掉落一格的过程 void down(int x, int y, char g[8][7]) {for (int i = x - 1; i >= 1; --i) {g[i + 1][y] = g[i][y];g[i][y] = '0';} }//模拟消去三个以上连续的相同格子的过程 int Delete(char g[8][7]) {int i, j, k, l;int flag = 0;//横找for (i = 1; i <= 7; ++i) {for (j = 1; j <= 6; ++j) {if (g[i][j] != '0' && j <= 4) {//查找连续相同的箱子,用len来保持连续相连//的相同的格子的个数int len = 0;for (k = j; k <= 6; ++k) {if (g[i][k] != g[i][j]) {break;} else {len++;}}//连续相同的格子有三个以上则模拟消去格子的过程if (len >= 3) {//自己消失for (k = j; k <= j + len - 1; ++k) {g[i][k] = 0;}//上层的所有格子掉落一层,(就是改了这里的代码)for (k = i - 1; k >= 0; --k) {for (l = j; l <= j + len - 1; ++l) {g[k + 1][l] = g[k][l];//还有这里的代码也改了,箱子掉落之后//原来的位置要为空。g[k][l] = '0';}}flag = 1;}}}}//竖找for (i = 1; i <= 7; ++i) {for (j = 1; j <= 6; ++j) {if (g[i][j] != '0' && i <= 5) {int len = 0;for (k = i; k <= 7; ++k) {if (g[i][j] != g[k][j]) {break;} else {len++;}}if (len >= 3) {for (k = i; k <= i + len - 1; ++k) {g[k][j] = '0';}for (k = i - 1; k >= 1; --k) {g[k + len][j] = g[k][j];g[k][j] = '0';}flag = 1;}}}}return flag; }//消去所有可以消去的格子 void delete_all(char g[8][7]) {while (Delete(g)); }//根据图的状态生产字符串,用来判重 string get_str(char g[8][7]) {string str = "";for (int i = 1; i <= 7; ++i) {for (int j = 1; j <= 6; ++j) {str = str + g[i][j];}}return str; }//判断是否找到一组解 int if_end(char g[8][7]) {int count = 0;for (int i = 1; i <= 7; ++i) {for (int j = 1; j <= 6; ++j) {if (g[i][j] != '0') {count++;}}}return count == 0 ? 1 : 0; }//广度优先遍历找最优解 void find_ans_bfs() {int i, j, k, l;state node;memcpy(node.g, g, sizeof(g));//广度优先遍历使用的队列queue<state> q;q.push(node);while (!q.empty()) {state current;current = q.front();q.pop();//扩展一层节点for (i = 1; i <= 7; ++i) {for (j = 1; j <= 6; ++j) {if (current.g[i][j] != '0') {//扩展节点for (k = 0; k < 2; ++k) {int newy = j + dy[k];if (newy >= 1 && newy <= 6 && current.g[i][j] != current.g[i][newy]) {state temp = current;char t = temp.g[i][j];temp.g[i][j] = temp.g[i][newy];temp.g[i][newy] = t;//模拟格子移动的过程down_alone(i, newy, temp.g);if (temp.g[i][j] == '0') {down(i, j, temp.g);}//消除可以消除的格子delete_all(temp.g);//生产状态字符串string str = get_str(temp.g);//集合判重if (s.find(str) == s.end()) {s.insert(str);//保持操作结果temp.v.push_back(operation(i, j, k));//如果找到一组解,输出结果并返回。if (if_end(temp.g)) {int len = temp.v.size();for (l = 0; l < len; ++l) {cout << "位置(" << temp.v[l].x << "," << temp.v[l].y << ")";if (temp.v[l].op_type == 0) {cout << "右移" << endl;} else {cout << "左移" << endl;}}return;}//入队列q.push(temp);}}}}}}} }int main() {int i, j;freopen("in.txt", "r", stdin);for (i = 1; i <= 7; ++i) {for (j = 1; j <= 6; ++j) {cin >> g[i][j];}}find_ans_bfs();return 0; }
程序使用方法,首先你要建立一个输入文件in.txt,然后把关卡里初始的图的状态用一个7*6的矩阵表示。
如最上面的那个图的矩阵表示为:
程序运行结果如下:
(5, 2)右移之后的结果如下:
(6, 3)右移后的结果:
中间下面的三个蓝色箱子消掉了。
其余的9个箱子一起消掉。
过关了,(*^__^*) 嘻嘻……
一个好玩的小游戏破解。相关推荐
- 推荐一个好玩的小游戏网站
439999小游戏是小游戏4399网站的经典游戏收集站,在2004年4399小游戏建立网站,网站推出后迅速的受到广大网友的欢迎,由于 网站中的游戏数量国语庞大所以给玩友搜索小游戏带来一定的困难,所以4 ...
- 继《羊了个羊》后又一个好玩的小游戏
最近很多人在玩这个开源的在线小游戏中国制霸生成器https://lab.magiconch.com/china-ex/ ,可以在简化的中国地图上用不同颜色标记居住.游玩.去过的地方,然后生成一张图片, ...
- 一个好玩的小游戏——麻神之战
题目: 一种新的麻将,只留下一种花色,并且除去了一些特殊和牌方式(例如七对子等).规则如下: 共有36张牌,每张牌是1~9.每个数字4张牌. 你手里有其中的14张牌,如果这14张牌满足如下条件,即算作 ...
- 好玩的小游戏网站推荐
向大家推荐一个好玩的小游戏网站 0054小游戏 http://www.0054.org 每天更新,天天都有新游戏
- c语言min函数_C语言探索之旅 | 第一部分第十课:第一个C语言小游戏
内容简介 前言 准备工作和建议 我的代码 改进方案 第一部分第十一课预告 1. 前言 上一课是 C语言探索之旅 | 第一部分第九课:循环语句 . 经过前面这么多课的努力,我们终于迎来了第一个比较正式的 ...
- 地图标识符号大全_【好玩微信小游戏大全】虫虫逃亡:烧脑游戏佳作!强烈推荐!...
沐沐带你发现好游戏! 只有你想不到, 没有我找不到的好游戏! 「良心好游戏推荐」 搜罗了好玩的微信小游戏大全, 模拟经营游戏.恐怖游戏.消除游戏.休闲游戏.益智游戏.解密游戏.烧脑游戏.解谜游戏大全. ...
- 微信小程序:智力考验看成语猜古诗句好玩解闷小游戏下载
这是一款猜诗句的一款小程序,特别考脑力 里面拥有低,中,高三种难度 用户通过猜所提供的成语,然后猜出是哪句古诗 当然啦下方也是会有小小提示的,比如古诗作者名字 或者古诗的名字,或者第一个字是什么等等 ...
- 【小程序源码】看成语猜古诗句好玩解闷小游戏
这是一款猜诗句的一款小程序,特别考脑力 里面拥有低,中,高三种难度 用户通过猜所提供的成语,然后猜出是哪句古诗 当然啦下方也是会有小小提示的,比如古诗作者名字 或者古诗的名字,或者第一个字是什么等等 ...
- 好玩的小游戏系列 (一)基于html+js 原生贪吃蛇
一朵花如果只被用来观赏那只呈现出它的外在意义只是它生命的一部分若是不能够将其内在更实质的美发挥出来充其量也不过就是一朵死的花而已. 目录 一.前言 二.代码介绍 三.效果显示 四.编码实现 index ...
最新文章
- silverlight 类似百度的图片浏览器,视频播放,附件下载功能,全部后台程序。...
- 鼠标事件在浏览器的差异
- 骚操作!有了这款神器,轻轻松松用Python写APP!(文末彩蛋)
- Linux中Buffer和Cache的区别
- 容器编排技术 -- 安装和设置kubectl
- JDBC学习笔记(1)
- [转]CG编程概念 ,及CG编译器与VC6.0集成方法
- 温习一下嵌入式老鸟 (火哥) 的面试指南
- 华为ensp静态路由配置
- Java位运算符:Java移位运算符、复合位赋值运算符及位逻辑运算符
- Unity基础案例讲解:创建小型太空射击游戏(二)
- 计算机分盘介质受写入保护,“介质受写入保护”的解决(适用于U盘或移动硬盘)...
- oracle 从后往前,oracle从后往前截取字符串 oracle截取字符串后三位
- Android 使用Calendar类获取系统时间
- 叠片过滤器安装维护注意事项
- 建议收藏!仓库规划与布局设计整体方案
- pythonocc安装_PythonOCC安装步骤与注意事项
- 微软再曝“丑闻”:在办公室看 VR 黄片,“HoloLens 之父”即将离职!
- 专家解读:顺丰和菜鸟开战核心是大数据
- (LeetCode)Java 求解正则表达式匹配