Saya membuat permainan seperti ular di mana pengguna menggerakkan sprite, dan sprite meninggalkan jejak. Jika pengguna menemukan jejak yang dibuatnya, saya ingin permainan berakhir, dan pemain tersebut kalah.
Salah satu ide yang saya miliki adalah melacak posisi sprite sebelumnya (mungkin dalam daftar), dan kemudian membuat pernyataan if
yang akan menyebabkan kekalahan game (Namun, saya agak tidak jelas tentang cara melakukannya).
Saya menerima jawaban atas pertanyaan ini yang dikodekan untuk daftar ini:
"Saya pikir Anda bisa mendeklarasikan daftar dua dimensi seperti ini:
pastPositions = [[400, 300]]
Lalu setiap kali posisi pemain berpindah, periksa daftarnya:
untuk baris di masa laluPosisi:If (player.rect.x == pastPositions[row][0] and player.rect.y == pastPositions[row][1]): done = true # game over
Jika pemain belum pernah ke sana, tambahkan posisi itu ke daftarnya.pastPositions.append([player.rect.x, player.rect.y])
Sepertinya ini akan berhasil, tetapi ketika saya mencoba menjalankan kode (dengan Python Interactive), saya mendapatkan pesan kesalahan yang berbunyi: "line 86, in <module> if player.rect.x == astPositions[row][0] and player.rect.y == pastPositions[row][1]: IndexError: list index out of range"
Apa saran Anda agar saya mengubah rentangnya agar hal ini tidak terjadi? Saya mencoba mengaturnya ke lebar dan tinggi jendela pygame.
import pygame
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
class Player(pygame.sprite.Sprite):
def __init__(self, x, y):
super().__init__()
self.image = pygame.Surface([15, 15])
self.image.fill(WHITE)
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
self.change_x = 0
self.change_y = 0
def changespeed(self, x, y):
self.change_x += x
self.change_y += y
def update(self):
self.rect.x += self.change_x
self.rect.y += self.change_y
pygame.init()
screen = pygame.display.set_mode([800, 600])
pygame.display.set_caption('The Etch-a-Sketch Game')
myfont = pygame.font.SysFont('Times', 20)
textsurface = myfont.render('This is the Etch-a-Sketch Game', False, (255, 255, 255))
screen.blit(textsurface,(0,0))
myfont = pygame.font.SysFont('Times', 15)
textsurface = myfont.render('Feel free to draw, but if you cross your own path, you will die.', False, (255, 255, 255))
screen.blit(textsurface,(0,20))
player = Player(400, 300)
all_sprites_list = pygame.sprite.Group()
all_sprites_list.add(player)
clock = pygame.time.Clock()
done = False
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
player.changespeed(-3, 0)
elif event.key == pygame.K_RIGHT:
player.changespeed(3, 0)
elif event.key == pygame.K_UP:
player.changespeed(0, -3)
elif event.key == pygame.K_DOWN:
player.changespeed(0, 3)
elif event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
player.changespeed(3, 0)
elif event.key == pygame.K_RIGHT:
player.changespeed(-3, 0)
elif event.key == pygame.K_UP:
player.changespeed(0, 3)
elif event.key == pygame.K_DOWN:
player.changespeed(0, -3)
player.update()
all_sprites_list.draw(screen)
pygame.display.flip()
clock.tick(75)
pygame.quit ()