在玩机械迷城游戏的时候,第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关中类青蛙过河的问题相关推荐

  1. 经典冒险游戏——机械迷城(Machinarium) 免安装简体中文版下载

    经典冒险游戏--机械迷城(Machinarium) 免安装简体中文版下载 机械迷城(Machinarium)--这是一个同事极力推荐的一个游戏,一玩之下,爱不释手啊!果然名付其实,很经典,很漂亮,非常 ...

  2. 蒸汽朋克与游戏的结合————《机械迷城》

    不说别的,先上图 <机械迷城(Machinarium)>是由捷克独立开发小组Amanita Design开发的一款冒险游戏,于2009年10月16日发行.本游戏在2009年独立游戏节上获得 ...

  3. 机器人迷城手机版_机械迷城免费版完整版下载_机械迷城手机游戏无需付费版下载 安卓版 V4.1.1 - 罐头手游网...

    机械迷城免费完整版是一款非常好玩的冒险解谜游戏,游戏画面精美,玩法内容丰富,玩家在游戏中需要对付一个作恶多端的黑帽帮,你还需要从他们的手中解救出你的女朋友,玩起来趣味十足,感兴趣的玩家不妨来游戏罐头下 ...

  4. 机械迷城MAC下载及攻略

    点击下载 无意间在verycd上看到这个游戏,很好玩的一个游戏. 画风非常可爱,有点复古风. 这里是 机械迷城 的专题频道 http://pc.pcgames.com.cn/pczq/jxmc/ 转载 ...

  5. 机器人迷城手机版_机械迷城手机免费版完整版下载

    机械迷城手机免费版完整版下载手游是一款拥有十分独特的铅笔画风制作的冒险解密手机游戏.游戏讲述了一个需要不断对付各种黑帽黑帮的小机器的故事.这里的许多角色都是机器人设计的,所以你需要拯救你的女朋友.与此 ...

  6. 机器人迷城手机版_机械迷城安卓版|机械迷城下载v2.0.21-乐游网安卓下载

    获得多项PC独立游戏奖项的经典解谜冒险游戏'机械迷城'也移植安卓平台了,唯美而富有童话色彩的背景框架是游戏的最大特色,在谜题的设计和难度也和游戏的故事背景融合得很到位,是一款非常不错的解谜游戏,喜欢此 ...

  7. 朋克风机器人超清图片_《机械迷城》:朋克风机器人的巅峰

    机械迷城截图 这款游戏,应该是一件可以收藏至数字博物馆里的艺术珍品.一般在画面水平上能够到达如此境界的游戏,很容易陷入内容空洞的怪圈.就像哥前段时间看的电影<木星上行>,看完以后当场就想 ...

  8. 机器人迷城手机版_机械迷城手机版

    机械迷城手机版是奇幻风格的解谜游戏.游戏画面采用彩色铅笔画的机器人世界.腐蚀老旧的样子看起来让人感受到亲切感.快来和机器人一起探索这个世界吧! 游戏介绍 陈旧锈蚀却又格外亲切的城市 游戏中的解谜要素在 ...

  9. 机器人迷城手机版_机械迷城安卓版

    机械迷城是一款非常经典的冒险解谜类游戏,游戏中并没有多余的对白,游戏情节和线索皆靠细腻的动画来表现.细腻的手绘风格打造后现代机械场景画面,让玩家置身在这部充满后现代机械情调的游戏中时,俨然彷佛随着主人 ...

最新文章

  1. 培养组学对已分离人类细菌和古菌物种库的贡献
  2. python期末知识点总结_期末考试必备复习提纲丨9年级数学上册知识点总结归纳(人教版)...
  3. CodeForces Goodbye 2017
  4. 8 list切片_Python中14个切片操作,你常用哪几个?
  5. iOS混淆 -- 生成define 替换名
  6. Css3系列-新属性新布局
  7. linux命令面试题大全,Linux系统命令面试题大全
  8. PayPal全球报告:逾三分之一中国网购消费者在海淘
  9. 2011年课外书 杂书总结感想
  10. 公有云、私有云、私有化_私有云的未来是什么?
  11. 【转载】Red Hat Enterprise Linux ISO 45678版本镜像下载【网盘资源】
  12. 【电源设计】06正激式开关电源
  13. 前端动态数据实现问卷调查
  14. PHP --方法调用
  15. (二)zynq芯片是什么
  16. 便携设备:小终端激起大变局
  17. SQL由出生日期求年龄
  18. linux挂载实验箱闹钟,Linux/Ubuntu命令行下打造一个音乐闹钟
  19. 浏览器服务器三层系统结构,Browser/Server系统的三层体系结构
  20. 考虑人机协同的智能工厂多AGV物流调度仿真研究

热门文章

  1. CTF writeup:实验吧,天下武功唯快不破
  2. 微信公众号的二次开发(二 自定义菜单的创建)
  3. 微信公众号二次开发之消息回复
  4. AcMotion,底盘域控,无人驾驶线控底盘最优方案
  5. 基于 VPX 总线的工件台运动控制系统研究与开发-以光刻运动台为例(一)
  6. NOIP模拟试题2021/11/11
  7. MTK平台的LCM驱动移植
  8. MTK平台设置GPIO
  9. 运行窗口输入命令 点击确定后弹出“打开方式”对话框的处理方法
  10. 用场景法剖析需求问题