Доброе утро, у меня проблемы с pygame, когда я запускаю его на Юпитере. Я реализовал класс, который вставляет отображение, называемый «mydisplay», один абстрактный класс, который определяет обобщенный c geometryri c класс рисунков и линий, который реализует абстрактный класс и позволяет рисовать линии на дисплее.
from abc import ABC, abstractmethod
import math
import pygame
black = (0,0,0)
white = (255,255,255)
red = (255,0,0)
green = (0,255,0)
blue = (0,0,255)
class mydisplay:
'''Classe che definisce un display (una finestra) dove potranno essere
disegnati "singoli" oggetti geometrici. La classe utilizza il package
pygame'''
def __init__(self, width=800, height=600):
pygame.display.init()
self.width = width # Size of
self.height = height # display
self.display = pygame.display.set_mode((width,height))
@staticmethod
def close():
pygame.quit()
def clean(self):
'''Pulisce il display'''
self.display.fill(white)
def drawline(self, p, q, color=black):
'''Disegna un segmento'''
self.clean()
pygame.draw.line(self.display, color, (p[0], self.height-p[1]), \
(q[0],self.height-q[1]), 3)
pygame.display.update()
def drawcircle(self, c, r, color=black):
'''Disegna un cerchio (pieno)'''
self.clean()
pygame.draw.circle(self.display, color, (c[0],self.height-c[1]), r)
pygame.display.update()
def drawrect(self, bl, w, h, color=black):
'''Disegna un rettangolo'''
self.clean()
pygame.draw.rect(self.display, color, \
pygame.Rect(bl[0],self.height-bl[1]-h, w, h))
pygame.display.update()
class oggetto_geometrico(ABC):
'''Classe che definisce un oggetto astratto generico.
Opportune sottoclassi dovranno fornire implementazioni
per le funzioni di spostamento e rotazione dell'oggetto.
La classe definisce e implementa un metodo per la rotazione
di un vettore con applicazione nell'origine (quindi definito
solo dalle coordinate del punto terminale)
'''
def __init__(self, display, color=black):
'''Inizializza un display pygame di dimensioni (width)x(height).
Il parametro colore è il colore con cui verrà disegnato l'oggetto '''
self.display = display
self.color = color
@staticmethod
def ruotaV(x, y, theta):
'''Rotazione di un vettore con punto di applicazione l'origine'''
xp = x*math.cos(theta)-y*math.sin(theta)
yp = x*math.sin(theta)+y*math.cos(theta)
return xp,yp
@abstractmethod
def sposta(self, dx, dy):
'''Definisce uno spostamento dell'oggetto di dx punti lungo
l'asse x e di dy punti lungo l'asse y'''
pass
@abstractmethod
def ruota(self, theta):
'''Definisce la rotazione dell'oggetto di un angolo theta radianti'''
pass
class line(oggetto_geometrico):
def __init__(self, p, q, display, color=black):
'''Initialize a pygame display '''
super().__init__(display, color)
self.p = p
self.q = q
self.display.drawline(p,q,color)
def sposta(self, dx, dy, disegna=True):
'''Implementa lo spostamento rigido di un segmento'''
from operator import add
self.p = tuple(map(add,self.p,(dx,dy)))
self.q = tuple(map(add,self.q,(dx,dy)))
disegna and self.display.drawline(self.p,self.q,self.color)
def ruota(self, theta):
'''Implementa la rotazione di un segmento'''
cx = (self.p[0]+self.q[0])/2
cy = (self.p[1]+self.q[1])/2
self.sposta(-cx,-cy, disegna=False)
self.p = self.ruotaV(*self.p, theta)
self.q = self.ruotaV(*self.q, theta)
self.sposta(cx,cy)
Поэтому, когда я пытаюсь получить экземпляр класса "mydisplay", он вылетает, говоря, что windows не отвечает ...
D = mydisplay()
Я использую python 3.7.6 и pygame 1.9.6, мой ноутбук имеет 5 ГБ оперативной памяти. может кто-нибудь мне помочь?