2014-04-08 74 views
3

所以我做计算机编程作为一个学校的主题,并已被设置为创建像地牢一样的地牢爬行器的任务。这主要是向我介绍使用多维数组和从文件中读取数据。我能够成功从文本文件中读取并创建地图,但在移动播放器时遇到问题。我得到的错误:Python,多维数组

TypeError: 'str' object does not support item assignment 

这是当我试图走动这让我觉得我已经声明不正确排列的球员。帮助PLZ!下面是代码:

import pygame, sys 
from pygame.locals import * 

def getResources(): 
    floorImage = pygame.image.load("/Volumes/Data/Users/name/Desktop/Python/Scripts/Pygame/RPG GAME FOLDER/floor.png") 
    wallImage = pygame.image.load("/Volumes/Data/Users/name/Desktop/Python/Scripts/Pygame/RPG GAME FOLDER/wall.png") 
    return (floorImage, wallImage) 

def createRoom(): 
    f = open("Room 1.txt", "r") 
    gameMap = [] 
    for x in f: 
     row = "" 
     for character in x: 
      row = row + character 
     if "\n" in row: 
      row = row[:len(row) - 1] 
     gameMap.append(row) 
    return (gameMap) 

def drawRoom(gameMap, floorImage, wallImage): 

    for i in range(0, len(gameMap)): 
     for x in range(0, len(gameMap[i])): 
      xC = x * 30 
      y = i * 30 
      if gameMap[i][x] == "*": 
       screen.blit(wallImage, (xC, y)) 
      elif gameMap[i][x] == ".": 
       screen.blit(floorImage, (xC, y)) 
      elif gameMap[i][x] == "+": 
       gameMap[i][x] = "." 
       gameMap [i-1][x] = "+" 

pygame.init() 

FPS = 50 
screen = pygame.display.set_mode((600, 600), 0, 32) 
pygame.display.set_caption("RPG Game - name") 
clock = pygame.time.Clock() 


# Colours 
black = (0, 0, 0) 
white = (255, 255, 255) 

# Player Variables 
playerMotion = { 
    "right": False 
    } 


# Initial Functions 
floorImage, wallImage = getResources() 
gameMap = createRoom() 

while True: 
    clock.tick(FPS) 
    screen.fill(black) 
    drawRoom(gameMap, floorImage, wallImage) 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      sys.exit() 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_a: 
       playerMotion["right"] = True 


    pygame.display.update() 

PS我得到当我试图移动“+”代表围绕地图的字符错误

elif gameMap[i][x] == "+": 
gameMap[i][x] = "." 
gameMap [i-1][x] = "+" 
+0

你在哪一行得到这个错误? – khagler

回答

1

你gameMap实际上是一个字符串列表,而不是列表的列表。您正在尝试将字符串中的字母分配给该错误。如果你希望它是一个列表清单,你需要这样做:

def createRoom(): 
    return [list(row.rstrip('\n')) for row in open('Room 1.txt')]