• 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
306 wizyt
pytanie zadane 20 czerwca 2023 w Python przez Bondrusiek Maniak (61,410 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 (254,630 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,410 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ź 518 wizyt
pytanie zadane 17 grudnia 2022 w Python przez Kubas23 Użytkownik (630 p.)
0 głosów
0 odpowiedzi 62 wizyt
pytanie zadane 4 sierpnia 2023 w Python przez Kubas23 Użytkownik (630 p.)
0 głosów
0 odpowiedzi 303 wizyt
pytanie zadane 29 stycznia 2023 w Python przez Kubas23 Użytkownik (630 p.)

92,698 zapytań

141,611 odpowiedzi

320,122 komentarzy

62,057 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

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!

...