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

Problem z listą Python/PyGame

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
+1 głos
445 wizyt
pytanie zadane 20 czerwca 2023 w Python przez Bondrusiek Maniak (61,440 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 (256,320 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,440 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ź 645 wizyt
pytanie zadane 17 grudnia 2022 w Python przez Kubas23 Użytkownik (630 p.)
0 głosów
0 odpowiedzi 124 wizyt
pytanie zadane 4 sierpnia 2023 w Python przez Kubas23 Użytkownik (630 p.)
0 głosów
0 odpowiedzi 363 wizyt
pytanie zadane 29 stycznia 2023 w Python przez Kubas23 Użytkownik (630 p.)

93,176 zapytań

142,185 odpowiedzi

321,979 komentarzy

62,506 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 1401p. - dia-Chann
  2. 1380p. - Łukasz Piwowar
  3. 1372p. - CC PL
  4. 1370p. - Łukasz Eckert
  5. 1351p. - Tomasz Bielak
  6. 1328p. - Michal Drewniak
  7. 1312p. - Łukasz Siedlecki
  8. 1302p. - rucin93
  9. 1273p. - Adrian Wieprzkowicz
  10. 1232p. - Mikbac
  11. 1181p. - rafalszastok
  12. 1169p. - Grzegorz Aleksander Klementowski
  13. 1155p. - Piotr Aleksandrowicz
  14. 1149p. - Michał Telesz
  15. 1127p. - Mariusz Fornal
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...