循环的基本嵌套,如下所示:
test = [
"AAAAAAAAAAA",
"BBBBBBBBBBB",
"CCCCCCCCCCC",
]
for row in test:
for col in row:
print col
应输出test
列表中的每个字符。但是,我在我的一个游戏中运行同样的事情进行关卡设计,并在第一行之后停止。
for row in level:
for col in row:
print col
if col == "G":
g = Grass(x,y)
obsticles.append(g)
entities.add(g)
print "grass added to entites"
elif col == "P":
p = Plain_Grass(x,y)
obsticles.append(p)
entities.add(p)
elif col == "F":
f = Grass_Flower(x,y)
obsticles.append(f)
entities.add(f)
elif col == "Y":
y = Grass_To_SandD(x,y)
obsticles.append(y)
entities.add(y)
老实说,我不明白为什么。我知道这可能是我曾经问过的最新的问题,但老实说我很讨厌。我用完全相同的test
和所有内容尝试了这个。我已经创建了另一个程序,看它是否在游戏程序中不起作用。有谁能看到这个问题?
[编辑]这是我的tilemap文件:
def testPlace():
#This is where all the testing happens...
tilemap = [
# 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
"T T T T T T T T T T T T T T T T T T T T",
"T G F G G G G P P F P G G G G G G G G T",
"T G G G G G G G F G P G G G G G G G G G",
"T G G G G G G G G F P F F G F G G G G G",
"O O O O O O O O O O O O O O O O O O O O",
"O O O O O O O O O O O O O O O O O O O O",
"G G F G G G G G G O O F G G G G G G G G",
"F G F T G G G G T O O F G G G G G G G G",
"T G G G G G G G G O O T G G G G F G P G",
"G G G T F G G G G O O G G G G G G G T G",
"G G G G G G G G G G G G G F G G G T G G",
"Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y",
"S S S S S S S S S S S S S S S S S S S S",
"S S S S S S S S S S S S S S S S S S S S",
"S S S S S S S S S S S S S S S S S S S S",
"Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q",
"W W W W W W W W W W W W W W W W W W W W",
"W W W W W W W W W W W W W W W W W W W W",
"W W W W W W W W W W W W W W W W W W W W",
"W W W W W W W W W W W W W W W W W W W W",
"W W W W W W W W W W W W W W W W W W W W",
]
return tilemap
主要剧本:
#!/usr/bin/python
import pygame, sys, os, tilemap
from pygame.locals import *
#Always ensure that the height and width are devisible by 32!
windowSize = windowWidth, windowHeight = 576, 576
#Ensuring width and height can take 32x32 blocks
if windowWidth%32 == 0 and windowHeight%32 == 0:
blocksInX = windowWidth/32
blocksInY = windowHeight/32
else:
raise SystemExit, "Too Much Space To Fit 32x32 Blocks in X and Y"
#Frames Per Second (MAX, not what it is going to be)
FPS = 15
#Colours
black = [ 0, 0, 0]
white = [255, 255, 255]
red = [255, 0, 0]
green = [ 0, 255, 0]
blue = [ 0, 0, 255]
orange = [ 255, 122, 0]
cyan = [ 0, 155, 255]
purple = [ 155, 0, 255]
lime = [155, 255, 0]
def main():
#Setting initial variables
pygame.init()
screen = pygame.display.set_mode(windowSize)
pygame.display.set_caption("Unnamed Game")
clock = pygame.time.Clock()
#Defaulting the all controlls to "off" upon first starting (no button is being pushed)
up = down = left = right = False
#Assuming everything including player is an entity (including the grass)
entities = pygame.sprite.Group()
player = Player(32, 32)
obsticles = []
x = y = 0
#See tilemaps file for information on the map layout
level = tilemap.testPlace()
print level
#Placing all the blocks needed to be displayed
for row in level:
for col in row:
print col
if col == "G":
g = Grass(x,y)
obsticles.append(g)
entities.add(g)
print "grass added to entites"
elif col == "P":
p = Plain_Grass(x,y)
obsticles.append(p)
entities.add(p)
elif col == "F":
f = Grass_Flower(x,y)
obsticles.append(f)
entities.add(f)
elif col == "Y":
y = Grass_To_SandD(x,y)
obsticles.append(y)
entities.add(y)
x += 32
y+= 32
x = 0
entities.add(player)
while True:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
pygame.quit()
sys.exit()
#Passing commands for keydown events
#UP = "-", down = "+", Left = "-", right = "+"
elif event.key == K_UP:
up = True
print ("UP")
elif event.key == K_DOWN:
down = True
print ("Down")
elif event.key == K_LEFT:
left = True
print ("LEFT")
elif event.key == K_RIGHT:
right = True
print ("RIGHT")
if event.type == KEYUP:
if event.key == K_UP:
up = False
elif event.key == K_DOWN:
down = False
elif event.key == K_LEFT:
left = False
elif event.key == K_RIGHT:
right = False
#Redrawing the player onto the screen
player.update(up, down, left, right, obsticles)
#Redrawing all other objects
entities.draw(screen)
pygame.display.update()
class Entity(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
class Player(Entity):
def __init__(self, x, y):
Entity.__init__(self)
self.xPos = x
self.yPos = y
self.inShop = False
self.image = pygame.Surface((32, 32))
self.image.fill(red)
self.image.convert()
self.rect = Rect(self.xPos, self.yPos, 32, 32)
def update(self, up, down, left, right, obsticles):
if up:
self.yPos -= 32
if down:
self.yPos += 32
if left:
self.xPos -= 32
if right:
self.xPos += 32
self.rect = Rect(self.xPos, self.yPos, 32, 32)
#Collision Detection (for x axis)
self.collide(self.xPos, 0, obsticles)
#Collision Detection (for y axis)
self.collide(0, self.yPos, obsticles)
def collide(self, xPos, yPos, obsticles):
pass
class Grass(Entity):
def __init__(self, x, y):
Entity.__init__(self)
self.image = pygame.image.load("data/images/Grass.png")
self.image.convert()
self.rect = Rect(x, y, 32, 32)
class Plain_Grass(Entity):
def __init__(self, x, y):
Entity.__init__(self)
self.image = pygame.image.load("data/images/Grass_Plain.png")
self.image.convert()
self.rect = self.image.get_rect()
class Grass_Flower(Entity):
def __init__(self, x, y):
Entity.__init__(self)
self.image = pygame.image.load("data/images/Grass_Flower.png")
self.image.convert()
self.rect = self.image.get_rect()
class Grass_To_SandD(Entity):
def __init__(self, x, y):
Entity.__init__(self)
self.image = pygame.image.load("data/images/Grass_To_SandD.png")
self.image.convert()
self.rect = self.image.get_rect()
if __name__ == "__main__":
main()
答案 0 :(得分:3)
这是我的镜头:
在entities.add(player)
缩进INSIDE循环之后,您拥有所有代码。删除额外的缩进以将其放在循环外。
编辑:
事实上,我认为entities.add(player)
也应该不在循环中。