Сбой дисплея PyGame на ноутбуке Jupiter - PullRequest
0 голосов
/ 26 января 2020

Доброе утро, у меня проблемы с 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 ГБ оперативной памяти. может кто-нибудь мне помочь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...