You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python文本冒险游戏中如何实现数组内元组坐标的递增移动?

问题分析与修复方案

你的代码存在几个关键问题导致坐标无法更新,下面逐个说明并修复:

1. 字符串方法调用错误

update_player_coordinates.lower 没有调用方法,只是引用了lower方法本身,永远不会等于字符串'east',必须加上括号:update_player_coordinates.lower()。

2. 元组不可变性错误

player_coordinates是从map_array里取出的元组(比如(3,3)),元组是不可变类型,无法直接用+=修改。需要直接创建新的元组来存储修改后的坐标。另外player_coordinates += [1][1]的写法完全错误,[1][1]会触发索引越界,正确的东方向应该是x坐标+1,即新坐标为(player_coordinates[0]+1, player_coordinates[1])。

3. 递归逻辑错误

你的explore函数在修改坐标后返回了新坐标,但递归调用时没有传递这个新坐标,导致每次递归都使用原始坐标。需要在递归时传入更新后的坐标。

4. 缺失其他方向处理与边界检查

原代码只处理了东方向,还需要补充南、北、西的逻辑,同时要检查坐标是否在地图范围内,防止玩家移出地图。


修正后的完整代码

map_array = [
    [(1, 5), (2, 5), (3, 5), (4, 5), (5, 5)],
    [(1, 4), (2, 4), (3, 4), (4, 4), (5, 4)],
    [(1, 3), (2, 3), (3, 3), (4, 3), (5, 3)],
    [(1, 2), (2, 2), (3, 2), (4, 2), (5, 2)],
    [(1, 1), (2, 1), (3, 1), (4, 1), (5, 1)]
]
# 提取地图的坐标范围,用于边界检查
max_x = max(coord[0] for row in map_array for coord in row)
max_y = max(coord[1] for row in map_array for coord in row)
min_x = min(coord[0] for row in map_array for coord in row)
min_y = min(coord[1] for row in map_array for coord in row)

starting_point = map_array[2][2]

def show_map():
    for row in map_array:
        print('\n' + str(row))

show_map()

def explore(player_coordinates):
    print(f"Current player coordinates are {player_coordinates}.")
    direction = input("Where do you go? ").strip().lower()
    
    new_coords = player_coordinates
    # 处理四个方向的坐标更新
    if direction == 'east':
        new_coords = (player_coordinates[0] + 1, player_coordinates[1])
    elif direction == 'west':
        new_coords = (player_coordinates[0] - 1, player_coordinates[1])
    elif direction == 'north':
        new_coords = (player_coordinates[0], player_coordinates[1] + 1)
    elif direction == 'south':
        new_coords = (player_coordinates[0], player_coordinates[1] - 1)
    else:
        print("Invalid direction! Please enter north, south, east, or west.")
        explore(player_coordinates)
        return
    
    # 边界检查,防止移出地图
    if min_x <= new_coords[0] <= max_x and min_y <= new_coords[1] <= max_y:
        explore(new_coords)
    else:
        print("You can't go that way! It's the edge of the map.")
        explore(player_coordinates)

explore(starting_point)

内容的提问来源于stack exchange,提问作者Anthony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 16:43:10