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

Python (Pygame) Problem z listą

Aruba Cloud - Virtual Private Server VPS
0 głosów
691 wizyt
pytanie zadane 17 grudnia 2022 w Python przez Kubas23 Użytkownik (630 p.)

 Więc, chciałbym stworzyc generator poziomow dla mojej gry, jednak kiedy printuje liste "Sciany" printuje sie cos takiego: [<__main__.Sciana object at 0x0000018E2472C410>, <__main__.Sciana object at 0x0000018E28C15790>, <__main__.Sciana object at 0x0000018E28C15250>, <__main__.Sciana object at 0x0000018E28C15710>]

 

Co zrobic zeby zamiast tego printowalo sie cos takiego :  Sciana(200,400,25,25) ?

 

Tutej moj kod:

 

import pygame
import time

pygame.init()
window = pygame.display.set_mode((1280, 720))

pozycja = 0


x = 0
y = 0
class Sciana:
    def __init__(self, x, y, szerokosc, wysokosc):
        self.x_cord = x
        self.y_cord = y
        self.szerokosc = szerokosc
        self.wysokosc = wysokosc
        self.hitbox = pygame.Rect(self.x_cord, self.y_cord, self.szerokosc, self.wysokosc)

    def draw(self):
        pygame.draw.rect(window, (0,0,0) , self.hitbox)
 
run = True
item = 'sciana'
image = pygame.image.load('select.png')

sciany = [
    Sciana(0,0,25,25)
]



while run:
    time.sleep(0.05)
    pygame.time.Clock().tick(30) 
    for event in pygame.event.get():
        if event.type == pygame.QUIT:  
            run = False

    keys = pygame.key.get_pressed()

    speed = 25
    if keys[pygame.K_1]:
        item = 'sciana'
    if keys[pygame.K_2]:
        item = 'lava'
    if keys[pygame.K_RIGHT]:  
        x += speed
    if keys[pygame.K_LEFT]: 
        x -= speed
    if keys[pygame.K_UP]:  
        y -= speed
    if keys[pygame.K_DOWN]: 
        y += speed
    if keys[pygame.K_SPACE]:  
        if item == 'sciana':
            sciany.insert(pozycja, Sciana(x,y,25,25))
            print(sciany)
            pozycja += 1
    
 

    player = window.blit(image,(x, y,))
    window.fill((255,255,255))  
    window.blit(image,(x, y,))  
    pygame.display.update()

 

komentarz 17 grudnia 2022 przez Whiskey_Taster Pasjonat (15,610 p.)

Ogółem, jak chcesz mieć "stringową" reprezentację obiektu, to definiujesz sobie __str__

1 odpowiedź

+1 głos
odpowiedź 19 grudnia 2022 przez KateF Lubelski Szef Nowicjusz (240 p.)

Musisz użyć magicznej metody __str__. Umieść coś w tym stylu pod __init__ w klasie:

def __str__(self):

        return f"{self.x_cord}, {self.y_cord}, {self.szerokosc}, {self.wysokosc}"

komentarz 19 grudnia 2022 przez VBService Ekspert (256,600 p.)

W ramach ciekawostki (uzupełnienia, powyższej odpowiedzi)

Co zrobic zeby zamiast tego printowalo sie cos takiego :  Sciana(200,400,25,25) ?

np.

def __str__(self):
        return f"Sciana({self.x_cord},{self.y_cord},{self.szerokosc},{self.wysokosc})"

 

print(sciany[-1]) # ostatnio dodany

for sciana in sciany:
     print(sciana)

całość

import pygame
import time
 
pygame.init()
window = pygame.display.set_mode((1280, 720))
 

class Sciana:
    def __init__(self, x, y, szerokosc, wysokosc):
        self.x_cord = x
        self.y_cord = y
        self.szerokosc = szerokosc
        self.wysokosc = wysokosc
        self.hitbox = pygame.Rect(self.x_cord, self.y_cord, self.szerokosc, self.wysokosc)

    def __str__(self):
        return f"Sciana({self.x_cord},{self.y_cord},{self.szerokosc},{self.wysokosc})"

    def draw(self):
        pygame.draw.rect(window, (0,0,0) , self.hitbox)
  

item = 'sciana'
image = pygame.image.load('select.png')
 
sciany = [
    Sciana(0,0,25,25) # pozycja 0
] 


pozycja = 1 
x = 0
y = 0

speed = 25
run = True

while run:
    time.sleep(0.05)
    pygame.time.Clock().tick(30)
    keys = pygame.key.get_pressed()
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT or keys[pygame.K_ESCAPE]:  
            run = False
 
    if keys[pygame.K_1]:
        item = 'sciana'
    if keys[pygame.K_2]:
        item = 'lava'
    if keys[pygame.K_RIGHT]:  
        x += speed
    if keys[pygame.K_LEFT]: 
        x -= speed
    if keys[pygame.K_UP]:  
        y -= speed
    if keys[pygame.K_DOWN]: 
        y += speed
    if keys[pygame.K_SPACE]:  
        if item == 'sciana':
            sciany.insert(pozycja, Sciana(x,y,25,25))
            
            # dla demonstarcji
            print(sciany[-1]) # ostatnio dodany
            print('-'*20)
            for sciana in sciany:
                print(sciana)
            print('-'*20)
            for sciana in sciany:
                print(f'x_cord: {sciana.x_cord}, y_cord: {sciana.y_cord},' +
                      f'szerokosc: {sciana.szerokosc}, wysokosc: {sciana.wysokosc}')
            print('-'*20)
            for sciana in sciany:
                print(f'hitbox: {sciana.hitbox}')
            print('-'*60)
                
            pozycja += 1     
  
 
    player = window.blit(image,(x, y,))
    window.fill((255,255,255))  
    window.blit(image,(x, y,))  
    pygame.display.update()

pygame.quit()

 

komentarz 20 grudnia 2022 przez Kubas23 Użytkownik (630 p.)

@KateF Lubelski Szef, Dzieki bardzo ;)

komentarz 20 grudnia 2022 przez Kubas23 Użytkownik (630 p.)
Dzieki

Podobne pytania

+1 głos
1 odpowiedź 347 wizyt
+1 głos
1 odpowiedź 500 wizyt
pytanie zadane 20 czerwca 2023 w Python przez Bondrusiek Maniak (61,440 p.)
0 głosów
0 odpowiedzi 134 wizyt
pytanie zadane 4 sierpnia 2023 w Python przez Kubas23 Użytkownik (630 p.)

93,335 zapytań

142,330 odpowiedzi

322,415 komentarzy

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

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!

...