YAS*_*YAS 1 python string indexing
首先,对不起,如果这已经回答了我已经查看了过去的Q,但没有运气.
我的问题是:我已经通过蟒+ libtcod教程了Roguebasin一次,老毛病又犯了,同时使我自己的修改.
我正在尝试制作硬编码的地图而不是随机生成的地图.
到目前为止,代码不会显示一个窗口或我正在运行的任何内容,并希望它关闭时没有错误.但是,我一直这样:
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
Run Code Online (Sandbox Code Playgroud)
整个"弦乐指数超出范围"是我整个下午和晚上一直在撞墙的原因.
这是迄今为止的代码:
#---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()
Run Code Online (Sandbox Code Playgroud)
谢谢.
y正在起床len(MAP_HEIGHT) - 1(因为range电话); MAP_HEIGHT = len(MAP_FILE); MAP_FILE是一个包含六个元素的列表.
因此y将取值0,1,2,3,4,5.但是,字符串只有四个值,因此尝试访问第五个或第六个字符将失败.
我认为你已经纠结了地图高度和地图宽度(它由[y] [x]索引,你可以通过[x] [y]访问它).
| 归档时间: |
|
| 查看次数: |
11283 次 |
| 最近记录: |