Skocz do zawartości

Biblioteka PyGame. Pomoc z kodem gry Space invaders


Recommended Posts

Witam, uczę się programować w pythonie przez tworzenie gry Space Invaders od podstaw korzystając z biblioteki Pygame. Otóż mam problem ponieważ dodałem 1 rząd kosmitów i teraz nie wiem jak zmienić mój kod, żeby było 5 rzędów po 11 kosmitów jak w prawdziwej grze.

Oto kod jaki napisałem w tej chwili:

def initialize(self):
 
self.invaders = []
xPos = 512
for i in range(11):
invader = Invader.Invader()
invader.setXPos(xPos)
invader.setYPos(100)
self.invaders.append(invader)
xPos += 50
 
def update(self):
for i in range(11):
self.invaders[i].moveHorizontal(self.alienSpeed * self.alienDirection)
 
if self.invaders[0].getXPos() < 96:
self.alienDirection = +1
 
xPos = 96
for i in range(11):
self.invaders[i].moveVertical(4)
self.invaders[i].setXPos(xPos)
xPos = xPos + self.invaderImg.get_width()
 
if self.invaders[10].getXPos() > 924:
self.alienDirection = -1
 
xPos = 924 - self.invaderImg.get_width() * 10
for i in range(11):
self.invaders[i].moveVertical(4)
self.invaders[i].setXPos(xPos)
xPos = xPos + self.invaderImg.get_width()
 
def draw(self):
for i in range(11):
self.screen.blit(self.invaderImg, self.invaders[i].getPosition())
pygame.display.flip()

Dodam, że ten kod działa bez problemu ale nie mam pojęcia jak dodać kolejne 4 rzędy po 11 kosmitów, żeby to wszystko działało.

Edytowane przez melon210
Link to post
Share on other sites

Rozumiem, że wcięcia Ci rozwaliło forum?

 

W każdym razie zrób pętlę po 55 elementów i rób dzielenie z resztą przez 11, na podstawie tego co wyjdzie ustawiaj x i y. Np. dla elementu 13 to jest (1, 2) czyli przesunięcie o jeden blok na osi Y i 2 bloki na osi X.

 

A poza tym używaj stałych, bo np. jak Ci się kiedyś wymarzy, żeby rządek miał nie 11, a 9 kosmitów to będziesz musiał zmieniać ten kod przynajmniej w czterech miejscach.

Link to post
Share on other sites

Nie znam się na tym jakoś dobrze i to głównie jest projekt gry do szkoły.

for col in range(55):
    invader = Invader.Invader()
    invader.setXPos(xPos)
    invader.setYPos(100)
    self.invaders.append(invader)
    xPos += 50
for i in self.invaders:
    self.invaders[0:12] = invader.setYPos(120)

Dostaje error.

self.invaders[0:12] = invader.setYPos(120)
TypeError: can only assign an iterable
 
Sprawdziłbym byś czy ja to dobrze kombinuje? Nie mam pojęcia jak tu ten kod napisać.

Jeszcze coś takiego zrobiłem:

for i in range(55):
   invader = Invader.Invader()
   invader.setXPos(xPos)
   invader.setYPos(yPos)
   self.invaders.append(invader)
   xPos += 50
   for i in self.invaders:
      row = []
      row.append(self.invaders[0:11])
      row.invader.setYPos(120)

Tylko, że teraz wyskakuje mi coś takiego.

AttributeError: 'list' object has no attribute 'invader'

Link to post
Share on other sites

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Odpowiedz w tym wątku...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...