Skip to main content
 首页 » 编程设计

Python之索引错误 : string index out of range (Beginner)

2025年05月04日17zhwl

<分区>

首先,很抱歉,如果这个问题已经得到回答,我已经查看了过去的问题,但没有运气。

我的问题是:我已经在 Roguebasin 上完成了 Python+libtcod 教程一次并在进行自己的修改时再做一次。

我正在尝试制作硬编码 map 而不是随机生成的 map 。

目前的代码不会显示窗口或我正在运行的任何东西,希望它能无错关闭。但是,我不断得到这个:

Traceback (most recent call last): 
  File "superrogue.py", line 85, in <module> 
    make_map() 
  File "superrogue.py", line 68, in make_map 
    if MAP_FILE[x][y] in TILE_NAMES:    #Find the tile's name--- 
IndexError: string index out of range 

整个“字符串索引超出范围”是我整个下午和晚上一直在用头撞墙的问题。

这是目前的代码:

#---Imports------------------------------------------------------------- 
import libtcodpy as libtcod 
 
#---Program Labelings--------------------------------------------------- 
TITLE = 'Roguetest' 
VERSION = '0.01a' 
 
#---Setup Variables----------------------------------------------------- 
SCREEN_WIDTH = 80 
SCREEN_HEIGHT = 50 
LIMIT_FPS = 20 
#MAP_FILE = open('Maps/Test.txt', 'r') 
#MAP_FILE = MAP_FILE.readlines() 
MAP_FILE = ['XXXX', 
            'X==X', 
            'X..X', 
            'X..X', 
            'X==X', 
            'XXXX', 
            ] 
MAP_WIDTH = len(MAP_FILE[0]) 
print MAP_WIDTH 
MAP_HEIGHT = len(MAP_FILE) 
print MAP_HEIGHT 
 
 
#---Dictionaries-------------------------------------------------------------- 
COLORS = { 
            'dark_new' : libtcod.Color(255, 0, 255), 
            'light_new' : libtcod.Color(255, 0, 255), 
            'dark_pavement' : libtcod.Color(20, 20, 20), 
            'light_pavement' : libtcod.Color(50, 50, 50), 
            'dark_sidewalk' : libtcod.Color(80, 80, 80), 
            'light_sidewalk' : libtcod.Color(120, 120, 120), 
            'dark_wall' : libtcod.Color(100, 100, 100), 
            'light_wall' : libtcod.Color(180, 180, 180) 
            } 
 
TILE_NAMES = { 
                'X' : 'wall', 
                '.' : 'pavement', 
                '=' : 'sidewalk' 
                } 
 
#---Classes------------------------------------------------------------- 
class Tile: 
    def __init__(self, name): 
        self.name = name 
        self.darkcolor = COLORS['dark_' + self.name] 
        self.lightcolor = COLORS['light_' + self.name] 
        self.blocks = False 
        self.blocks_sight = False 
        self.inside = False 
 
 
#---Functions----------------------------------------------------------- 
def make_map(): 
 
    map = [[ Tile(name='new') 
        for x in range(MAP_WIDTH) ] 
            for y in range(MAP_HEIGHT) ] 
 
    for x in range(MAP_WIDTH): 
        for y in range(MAP_HEIGHT): 
            print (x, y) 
            if MAP_FILE[x][y] in TILE_NAMES:    #Find the tile's name--- 
                map[x][y].name = TILE_NAMES[MAP_FILE[x][y]] 
 
            map[x][y].darkcolor = COLORS['dark_' + map[x][y].name] 
            map[x][y].lightcolor = COLORS['light_' + map[x][y].name] 
 
            if MAP_FILE[x][y] == 'X':   #The WALL tile------------------ 
                map[x][y].blocked = True 
                map[x][y].block_sight = True 
            elif MAP_FILE[x][y] == '.': #The PAVEMENT tile-------------- 
                map[x][y].blocked = False 
                map[x][y].block_sight = False 
            elif MAP_FILE[x][y] == '=': #The SIDEWALK tile-------------- 
                map[x][y].block_sight = False 
                map[x][y].ped_walkable = True 
 
 
make_map() 

谢谢。