Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Alguem pode me ajudar, esta dando esse erro: OverflowError: Python int too large to convert to C long

import pygame

pygame.init()
screen = pygame.display.set_mode((800, 600), 0)

amarelo = (255, 255, 0)
preto = (0, 0, 0)

class Pacman:
    def __init__(self):
        self.coluna = 1
        self.linha = 1
        self.centro_x = 400
        self.centro_y = 300
        self.tamanho = 800//30
        self.raio = self.tamanho//2
        #self.velocidade = 1
        self.vel_x = 1
        self.vel_y = 1

    def calcular_regras(self):
        self.coluna += self.vel_x
        self.linha += self.vel_y
        self.centro_x = int(self.coluna * self.tamanho)
        self.centro_y = int(self.centro_y * self.tamanho)

        if self.centro_x + self.raio > 800:
            self.vel_x = -self.vel_x
        if self.centro_x - self.raio < 0:
            self.vel_x = self.vel_x
        if self.centro_y + self.raio > 600:
            self.vel_y = -self.vel_y
        if self.centro_y - self.raio < 0:
            self.vel_y = self.vel_y

    def pintar(self, tela):
        # Desenhar o corpo do Pacman
        pygame.draw.circle(tela, amarelo, (self.centro_x, self.centro_y), self.raio)

        # Desenha a boca do Pacman
        canto_boca = (self.centro_x, self.centro_y)
        labio_superior = (self.centro_x + self.raio, self.centro_y - self.raio)
        labio_inferior = (self.centro_x + self.raio, self.centro_y + self.raio)
        pontos = [canto_boca, labio_superior, labio_inferior]

        pygame.draw.polygon(tela, preto, pontos, 0)

if __name__ == "__main__":
    pacman = Pacman()

    while True:
        # Calcular regras
        pacman.calcular_regras()

        # Pintar a tela
        screen.fill(preto)
        pacman.pintar(screen)
        pygame.display.update()
        pygame.time.delay(100)

        # Captura de eventos
        for e in pygame.event.get():
            if e.type == pygame.QUIT:
                exit()
  File "C:/Users/vtrdi/Desktop/Alura/pacman/pacman/pacman_2.py", line 57, in <module>
pacman.pintar(screen)
  File "C:/Users/vtrdi/Desktop/Alura/pacman/pacman/pacman_2.py", line 38, in pintar
pygame.draw.circle(tela, amarelo, (self.centro_x, self.centro_y), self.raio)
OverflowError: Python int too large to convert to C long
1 resposta
solução!

Oi Vitor, tudo bem com você?

Esse erro está sendo causado por essa linha:

self.centro_y = int(self.centro_y * self.tamanho)

O correto é multiplicar a linha pelo tamanho. Dessa forma:

self.centro_y = int(self.linha * self.tamanho)

Com apenas essa modificação seu código deverá funcionar como esperado. Da forma como o código estava, era ocasionado um número muito grande que estourava o limite de um inteiro normal. Printei para a variável centro_yda forma como o código estava antes para te mostrar, veja como era gerado números imensos:

7800
202800
5272800
137092800
3564412800
92674732800
2409543052800
62648119372800
1628851103692800
42350128696012800
1101103346096332800
28628686998504652800

Qualquer dúvida é só falar. Abraços e bons estudos!