编程求解机械迷城第11关中类青蛙过河的问题
在玩机械迷城游戏的时候,第11关遇到一个类似青蛙过河的游戏http://jingyan.baidu.com/article/e73e26c014903024adb6a7a4.html,下图是三张地图的攻略,可以略现其玩法。绿点为起点,红点为障碍,灰点是可走的路径。起点可以是任意一个非红点的位置。游戏开始后,点击任意灰点(想象成青蛙踏在上面),其会变成绿点,同时绿点周围的四个格子如果不是红色的,则有黄色的上下左右的箭头显示。然后,点击其中一个箭头(表示青蛙往箭头方向前进),于是,箭头方向的连续的灰格会被标记成黄色(青蛙一旦选择了方向,不遇到边界或者红格,将一直跳下去,不会转向),遇到红色格子或者边界后,会提示下一个可以移动方向(青蛙转向)。如果没有可以移动的方向,那么游戏终止,判别游戏失败与否:若地图上有任意一个灰格存在,那么,判定失败,否则,判定成功。
这不是一个地图遍历的问题么?!于是想通过程序的形式实现求解。下面直接贴代码啦:
#-------------------------------------------------------------------------------
# Name: fill_map.py
# Purpose: This program is used to help solve a map in the game Machinarium
#
#
# Author: stonecome11
#
# Created: 24/06/2017
# Copyright: (c) 2017
# Licence: <your licence>
#-------------------------------------------------------------------------------
# Input:a map
# Output: the start point and directions which can fill the map
# Define the map and the marks
ROW_MAX=7
DARK=5 # Mark the broard
GREY=0 # Mark the position that can be stepped on
GREEN=1 # Mark the start position
RED=3 # Mark the position that can not be stepped on
YELLOW=4 # Mark the position that is visited before
the_map=[[5 for i in range(ROW_MAX)] for i in range(ROW_MAX)]
def setMap(a_map):
for i in range(1, ROW_MAX-1):
for j in range(1, ROW_MAX-1):
a_map[i][j]=GREY
# a_map[1][5]=RED
# a_map[3][4]=RED
# a_map[4][1]=RED
# a_map[5][3]=RED
a_map[1][3]=RED
a_map[1][4]=RED
a_map[1][5]=RED
a_map[5][1]=RED
a_map[5][2]=RED
# print a_map # Debug
# Define directions
UP=0
DOWN=1
RIGHT=2
LEFT=3
dirs_list=[]
def isDead(a_map, start_pt):
#If start_pt[0]=0
row=start_pt[0]
col=start_pt[1]
if a_map[row+1][col] != GREY and a_map[row-1][col] != GREY and \
a_map[row][col+1] != GREY and a_map[row][col-1] != GREY:
return True
return False
def work(a_map, start_pt):
# If the place around the start_pt is not dark, exit with false
if isDead(a_map, start_pt):
for i in range(1,6):
for j in range(1,6):
if a_map[i][j] == GREY:
return False
print a_map
return True
# Mark as start point
if a_map[start_pt[0]][start_pt[1]] != RED:
a_map[start_pt[0]][start_pt[1]] = GREEN
# Right
if a_map[start_pt[0]][start_pt[1]+1] == GREY:
new_map = [[0 for i in range(ROW_MAX)] for i in range(ROW_MAX)]
for i in range(ROW_MAX):
for j in range(ROW_MAX):
new_map[i][j] = a_map[i][j]
# If Right is OK
row = start_pt[0]
for j in range(start_pt[1]+1, 7):
col = j
if a_map[row][col] != GREY :
if work(new_map, [row,col-1]):
dirs_list.insert(0, "right")
return True
else:
break
else:
new_map[row][col]=YELLOW
# Left
if a_map[start_pt[0]][start_pt[1]-1] == GREY:
new_map=[[0 for i in range(ROW_MAX)] for i in range(ROW_MAX)]
for i in range(ROW_MAX):
for j in range(ROW_MAX):
new_map[i][j]=a_map[i][j]
# If Right is OK
row = start_pt[0]
for j in range(1, start_pt[1]+1):
col = start_pt[1] - j
if a_map[row][col] != GREY :
if work(new_map, [row,col+1]):
dirs_list.insert(0, "left")
return True
else:
break
else:
new_map[row][col]=YELLOW
# Up
if a_map[start_pt[0]-1][start_pt[1]] == GREY:
new_map=[[0 for i in range(ROW_MAX)] for i in range(ROW_MAX)]
for i in range(ROW_MAX):
for j in range(ROW_MAX):
new_map[i][j]=a_map[i][j]
# If up is OK
col = start_pt[1]
for i in range(1, start_pt[0]+1):
row = start_pt[0] - i
if a_map[row][col] == GREY :
new_map[row][col]=YELLOW
else:
if work(new_map, [row+1,col]):
dirs_list.insert(0, "up")
return True
else:
break
# Down
if a_map[start_pt[0]+1][start_pt[1]] == GREY:
new_map=[[0 for i in range(ROW_MAX)] for i in range(ROW_MAX)]
for i in range(ROW_MAX):
for j in range(ROW_MAX):
new_map[i][j]=a_map[i][j]
# If down is OK
col = start_pt[1]
for i in range(start_pt[0]+1, 7):
row = i
if a_map[row][col] != GREY :
if work(new_map, [row-1,col]):
dirs_list.insert(0, "down")
return True
else:
break
else:
new_map[row][col]=YELLOW
return False
def solver(a_map):
for i in range(1,6):
for j in range(1,6):
setMap(a_map)
# If the state of the point is RED, exit with false
if a_map[i][j] == RED:
continue
if work(a_map, [i,j])==True:
print [i, j], dirs_list
del dirs_list[:]
def main():
solver(the_map)
pass
if __name__ == '__main__':
main()
编程求解机械迷城第11关中类青蛙过河的问题相关推荐
- 经典冒险游戏——机械迷城(Machinarium) 免安装简体中文版下载
经典冒险游戏--机械迷城(Machinarium) 免安装简体中文版下载 机械迷城(Machinarium)--这是一个同事极力推荐的一个游戏,一玩之下,爱不释手啊!果然名付其实,很经典,很漂亮,非常 ...
- 蒸汽朋克与游戏的结合————《机械迷城》
不说别的,先上图 <机械迷城(Machinarium)>是由捷克独立开发小组Amanita Design开发的一款冒险游戏,于2009年10月16日发行.本游戏在2009年独立游戏节上获得 ...
- 机器人迷城手机版_机械迷城免费版完整版下载_机械迷城手机游戏无需付费版下载 安卓版 V4.1.1 - 罐头手游网...
机械迷城免费完整版是一款非常好玩的冒险解谜游戏,游戏画面精美,玩法内容丰富,玩家在游戏中需要对付一个作恶多端的黑帽帮,你还需要从他们的手中解救出你的女朋友,玩起来趣味十足,感兴趣的玩家不妨来游戏罐头下 ...
- 机械迷城MAC下载及攻略
点击下载 无意间在verycd上看到这个游戏,很好玩的一个游戏. 画风非常可爱,有点复古风. 这里是 机械迷城 的专题频道 http://pc.pcgames.com.cn/pczq/jxmc/ 转载 ...
- 机器人迷城手机版_机械迷城手机免费版完整版下载
机械迷城手机免费版完整版下载手游是一款拥有十分独特的铅笔画风制作的冒险解密手机游戏.游戏讲述了一个需要不断对付各种黑帽黑帮的小机器的故事.这里的许多角色都是机器人设计的,所以你需要拯救你的女朋友.与此 ...
- 机器人迷城手机版_机械迷城安卓版|机械迷城下载v2.0.21-乐游网安卓下载
获得多项PC独立游戏奖项的经典解谜冒险游戏'机械迷城'也移植安卓平台了,唯美而富有童话色彩的背景框架是游戏的最大特色,在谜题的设计和难度也和游戏的故事背景融合得很到位,是一款非常不错的解谜游戏,喜欢此 ...
- 朋克风机器人超清图片_《机械迷城》:朋克风机器人的巅峰
机械迷城截图 这款游戏,应该是一件可以收藏至数字博物馆里的艺术珍品.一般在画面水平上能够到达如此境界的游戏,很容易陷入内容空洞的怪圈.就像哥前段时间看的电影<木星上行>,看完以后当场就想 ...
- 机器人迷城手机版_机械迷城手机版
机械迷城手机版是奇幻风格的解谜游戏.游戏画面采用彩色铅笔画的机器人世界.腐蚀老旧的样子看起来让人感受到亲切感.快来和机器人一起探索这个世界吧! 游戏介绍 陈旧锈蚀却又格外亲切的城市 游戏中的解谜要素在 ...
- 机器人迷城手机版_机械迷城安卓版
机械迷城是一款非常经典的冒险解谜类游戏,游戏中并没有多余的对白,游戏情节和线索皆靠细腻的动画来表现.细腻的手绘风格打造后现代机械场景画面,让玩家置身在这部充满后现代机械情调的游戏中时,俨然彷佛随着主人 ...
最新文章
- 培养组学对已分离人类细菌和古菌物种库的贡献
- python期末知识点总结_期末考试必备复习提纲丨9年级数学上册知识点总结归纳(人教版)...
- CodeForces Goodbye 2017
- 8 list切片_Python中14个切片操作,你常用哪几个?
- iOS混淆 -- 生成define 替换名
- Css3系列-新属性新布局
- linux命令面试题大全,Linux系统命令面试题大全
- PayPal全球报告:逾三分之一中国网购消费者在海淘
- 2011年课外书 杂书总结感想
- 公有云、私有云、私有化_私有云的未来是什么?
- 【转载】Red Hat Enterprise Linux ISO 45678版本镜像下载【网盘资源】
- 【电源设计】06正激式开关电源
- 前端动态数据实现问卷调查
- PHP --方法调用
- (二)zynq芯片是什么
- 便携设备:小终端激起大变局
- SQL由出生日期求年龄
- linux挂载实验箱闹钟,Linux/Ubuntu命令行下打造一个音乐闹钟
- 浏览器服务器三层系统结构,Browser/Server系统的三层体系结构
- 考虑人机协同的智能工厂多AGV物流调度仿真研究