• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z listą Python/PyGame

Object Storage Arubacloud
+1 głos
276 wizyt
pytanie zadane 20 czerwca 2023 w Python przez Bondrusiek Maniak (61,370 p.)

Cześć,

mam problem z listą. 

class Platform:
	countOfPlatforms = 10
	def __init__(self):
		self.PLATFORM_IMG = pygame.image.load('assets/platform.png')
		self.position = [[0, 0]]
	def width(self):
		return self.PLATFORM_IMG.get_width()
	def height(self):
		return self.PLATFORM_IMG.get_height()
	def setPos(self, x, y):
		self.position[0] = x
		self.position[1] = y
	def setPos(self, args):
		self.position = [args[0], args[1]]
	def pos(self):
		return [ self.position[0], self.position[1] ]
	def x(self):
		return self.pos()[0]
	def y(self):
		return self.pos()[1]
		

FPS = 60
fpsClock = pygame.time.Clock()
WIDTH = 400
HEIGHT = 533
MID_HEIGHT = 200
DISPLAYSURF = pygame.display.set_mode((WIDTH, HEIGHT), 0, 32)

hero = player.Player()
platformObjects = [Platform()] * Platform.countOfPlatforms
platforms = [[0, 0]] * Platform.countOfPlatforms

for i in range(Platform.countOfPlatforms):
	randomX = random.randrange(0,WIDTH)
	randomY = random.randrange(0,HEIGHT)
	platformObjects[i].setPos([randomX, randomY])
	#platforms[i] = [randomX, randomY]


pygame.display.set_caption('Ice Tower')

def main():
	while True: # the main game loop		
		for event in pygame.event.get():
			if event.type == QUIT:
				pygame.quit()
				sys.exit()

		for i in range(Platform.countOfPlatforms):
			DISPLAYSURF.blit(platformObjects[i].PLATFORM_IMG, platformObjects[i].pos())
			#DISPLAYSURF.blit(platformObjects[i].PLATFORM_IMG, platforms[i])
		
		pygame.display.update()
        fpsClock.tick()

 

Próbuje utworzyć listę z klasami, które posiadają pozycję elementu, który później rysuje jeśli użyje powyższego kodu to rezultatem będzie.

natomiast jeśli odkomentuje kod '#' to wszystko jest OK

Podsumowując jeśli użyje powyższego kodu to wszyskie wartości mają taką samą pozycje mimo że sprawdzałem za pomocą print() że wartości są randomowe ale jeśli wejdą w pętlę While True to nagle wszystkie wartości są takie same. Nie jestem ekspertem od Pythona i za każdą pomoc będę wdzięczny.

Pozdrawiam

 

1 odpowiedź

+2 głosów
odpowiedź 20 czerwca 2023 przez VBService Ekspert (253,420 p.)
wybrane 21 czerwca 2023 przez Bondrusiek
 
Najlepsza

Proponuję taki zapis

[ on-line ]

platformObjects = []
platforms = []

for _ in range(Platform.countOfPlatforms):
    platform = Platform()
    randomX = random.randrange(0, WIDTH)
    randomY = random.randrange(0, HEIGHT)
    platform.setPos(randomX, randomY)
    platformObjects.append(platform)
    platforms.append([randomX, randomY])

lub

[ on-line ]  [ on-line ]

...

class Platform:
    countOfPlatforms = 10
    
    def __init__(self, x, y):
        self.position = []
        self.setPos(x, y)
    def setPos(self, x, y):
        self.position = [x, y]
    def pos(self):
        return [self.position[0], self.position[1]]
    ...

...
platformObjects = list(map(lambda _: Platform(random.randrange(0, WIDTH), 
                                              random.randrange(0, HEIGHT)),
                                     range(Platform.countOfPlatforms)))

 

2
komentarz 21 czerwca 2023 przez Bondrusiek Maniak (61,370 p.)

Działa, Twoje propozycje pomogły rozwiązać problem.

Dzięki za pomoc. Ja jeszcze znalazłem takie rozwiązanie

platformObjects = [Platform() for _ in range(Platform.countOfPlatforms)]

tutaj więcej info https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions.

 

Podobne pytania

0 głosów
1 odpowiedź 469 wizyt
pytanie zadane 17 grudnia 2022 w Python przez Kubas23 Użytkownik (630 p.)
0 głosów
0 odpowiedzi 58 wizyt
pytanie zadane 4 sierpnia 2023 w Python przez Kubas23 Użytkownik (630 p.)
0 głosów
0 odpowiedzi 287 wizyt
pytanie zadane 29 stycznia 2023 w Python przez Kubas23 Użytkownik (630 p.)

92,579 zapytań

141,432 odpowiedzi

319,663 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...