melon210 1 Napisano 21 Grudnia 2015 Udostępnij Napisano 21 Grudnia 2015 (edytowane) 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 21 Grudnia 2015 przez melon210 Cytuj Link to post Share on other sites
szatkus 282 Napisano 22 Grudnia 2015 Udostępnij Napisano 22 Grudnia 2015 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. Cytuj Link to post Share on other sites
melon210 1 Napisano 22 Grudnia 2015 Autor Udostępnij Napisano 22 Grudnia 2015 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' Cytuj Link to post Share on other sites
Recommended Posts
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ą.