我是新來編程,我試圖創建一個基於2D瓷磚的遊戲。我已經設法將我的士兵在瓷磚上自由移動,但現在我想讓它在按鍵上按瓷磚移動。使圖像移動每個瓷磚pygame
我知道當我改變self.pos到self.x或self.y我可以在屏幕上
到目前爲止我的代碼自由移動的士兵:
#envoirment variables
ice = 0
forest = 1
desert = 2
swamp = 3
water = 4
island = 5
#envoirement tiles
tiles = {
ice : icetile,
forest : foresttile,
desert : deserttile,
swamp : swamptile,
water : watertile,
island : islandtile
}
#tilemap
tilemap = [
[ 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0],
[ 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0],
[ 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0],
[ 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0],
[ 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0],
[ 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0],
[ 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0],
[ 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4],
[ 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4],
[ 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4],
[ 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4],
[ 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1],
[ 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1],
[ 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1],
[ 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1],
[ 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1],
[ 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1],
[ 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1]
]
class Soldier(object):
def __init__(self):
self.image = pygame.image.load("soldier.png")
self.x = 0
self.y = 0
self.hp = 1
self.ap = 1
self.price = 150
self.pos = [0, 0]
def keys(self):
key = pygame.key.get_pressed()
if key[pygame.K_DOWN]:
self.pos[1] += 1
if key[pygame.K_UP]:
self.pos[1] -= 1
if key[pygame.K_RIGHT]:
self.pos[0] += 1
if key[pygame.K_LEFT]:
self.pos[0] -= 1
def draw(self, surface):
surface.blit(self.image, (self.x, self.y))
def gameloop():
gamescreen = pygame.display.set_mode((mapwidth*tilesize, mapheight*tilesize))
gameloop = True
soldier = Soldier()
kasteel = Base()
while gameloop: #Main game loop
for row in range(mapheight):
for column in range(mapwidth):
gamescreen.blit(tiles[tilemap[row][column]], (column*tilesize, row*tilesize))
for event in pygame.event.get():
pos = pygame.mouse.get_pos()
print(pos)
if event.type == pygame.QUIT:
pygame.quit()
gameloop = False
soldier.keys()
kasteel.draw(gamescreen)
soldier.draw(gamescreen)
pygame.display.update()
clock.tick(40)
pygame.quit()
謝謝您的時間並幫助我
PS:歡迎任何書籍或網站的建議!