код не работает, я не могу понять почему

import pygame
import random
pygame.init()

sc = pygame.display.set_mode((600, 650))

class guy:

    x = random.randrange(30, 501, 235)
    y = -70

    def osn(self):

        pygame.draw.rect(sc, (255, 255, 255), (guy.x, guy.y , 70, 70))
        guy.y - 10
        if guy.y <= -650:
            y = 70

guy1 = guy()
guy2 = guy()

while 1:

    guy1.osn()
    guy2.osn()

    for i in pygame.event.get():
        if i.type == pygame.QUIT:
            exit()

    pygame.display.update()

    pygame.time.delay(60)

Тут должны появляться квадраты, которые должны двигаться вниз и при достижении определённых координат возвращаться на верх. Квадраты не появляются вообще.


Ответы (2 шт):

Автор решения: CrazyElf

Ну наверное вот тут:

guy.y - 10

Должно было быть так:

guy.y -= 10

И вообще не очень понятно у вас то y, то guy.y используется. Там наверное вообще self.y должен быть в функции osn, если у вас не на все экземпляры одна переменная, а на каждый экземпляр своя.

→ Ссылка
Автор решения: cauf

Вот так должен примерно выглядеть ваш код:

import pygame
import random
pygame.init()

sc = pygame.display.set_mode((600, 650))

class Guy():

    def __init__(self):
        self.x = random.randrange(30, 501, 235)
        self.y = -70

    def osn(self):
        pygame.draw.rect(sc, (255, 255, 255), (self.x, self.y , 70, 70))
        self.y += 10
        if self.y <= -650:
            self.y = 70

guy1 = Guy()
guy2 = Guy()

while True:
    sc.fill((0,0,0))

    guy1.osn()
    guy2.osn()

    for i in pygame.event.get():
        if i.type == pygame.QUIT:
            exit()

    pygame.display.update()

    pygame.time.delay(60)

Обратите внимание на класс Guy и его метод __init__(), являющийся конструктором экземпляра данного класса. Именно в нем определяются стартовые атрибуты экземпляра. Ссылаться на сам экземпляр необходимо через аргумент self.

→ Ссылка