2016-11-26 16 views
-2

私は、pygameで2048ゲームをコーディングしています。以下は私のコードの関連セクションです:リストに割り当てるときにオブジェクトが反復できない

class Data(): 
    def __init__(self): 
      self.data = getnull() 
      self.score = 0 
    def updatesprites(self):   # EXP 
      spritelist = [[],[],[],[]] 
      for count in range(4): # for row loop 
       for i in range(4): # per column loop 
        if self.data[count][i] != 0: 
         spritelist[count]+= newSprite(str(self.data[count] [i])+".png") # error occurs here 
         spritelist[count][i].move(15 + i*115, 15 + count*115) 
         showSprite(spritelist[count][i]) 
class newSprite(pygame.sprite.Sprite): 
    def __init__(self,filename): 
     pygame.sprite.Sprite.__init__(self) 
     self.images=[] 
     self.images.append(loadImage(filename)) 
     self.image = pygame.Surface.copy(self.images[0]) 
     self.currentImage = 0 
     self.rect=self.image.get_rect() 
     self.rect.topleft=(0,0) 
     self.mask = pygame.mask.from_surface(self.image) 
     self.angle = 0 

    def addImage(self, filename): 
     self.images.append(loadImage(filename)) 

    def move(self,xpos,ypos,centre=False): 
     if centre: 
      self.rect.center = [xpos,ypos] 
     else: 
      self.rect.topleft = [xpos,ypos] 

----------------メイン----------------- - game.updatesprites()が呼び出されたときに

from functions import * 
from config import * 
from pygame_functions import * 
import pygame 
screenSize(475,475) # call screen init 
gameboard = newSprite("game board.png") # createboard 
showSprite(gameboard) 
game = Data() 
game.updatesprites() 

while True: 
    pass 

、 "newSpriteオブジェクトは反復可能ではありません" というエラーが関数で発生し

+3

PEP008(Pythonスタイルのガイド)を参照してください。 – CodenameLambda

+0

は常に完全なエラーメッセージ(トレースバック)を追加してください。コードを実行して見ることはできませんが、多くの有用な情報があります。どのラインが問題になるか。 – furas

答えて

0

+を連結リストや文字列をData.updatesprites、と数字が追加されます。

あなたがしようとしていることは、要素をリストに追加することです。次のように

この

が行われます。
li.append(element) # adds the element to the end of the list 

またはあなたの場合は

spritelist[count].append(newSprite(str(self.data[count][i]) + ".png")) 

別の解決策:あなたは新しいタイプを作成することができ、あなたが要素にあなたがしようとしていた方法を追加することができます:

class UglyList(list): 
    def __iadd__(self, other): 
     self.append(other) 

あなたはここで別の行を変更する必要があるだろう:

spritelist = [UglyList() for i in range(4)] 
関連する問題