2 svar
118 visningar
ugglebulle 35
Postad: 9 feb 2021 17:03 Redigerad: 9 feb 2021 17:08

Klasser, attributet finns inte.

Hej, jag behöver returnera mitt fönster från en "graphic game" klass så att klassen "graphic player" kan målas i det. Vet inte varför detta inte fungerar.

Graphicsgame klassen har enkapulerats runt en "model game" klass.  Den relevanta metoden som inte fungerar är getWindow(self) som behövs sen när jag ska måla ut graphic player som enkapulerats runt en "model player" klass. Varför funkar det inte? 

 

(graphics är ett bibliotek från min kurslitteratur som ska vara lite enklare och som ska visa på obektorienterad design lite mer, förklarar syntaxen i vissa fall). Koden har kortats ner.

from graphics import *

class GraphicGame:

    def __init__(self, game):
        self.model = game
        self.model.players[0] = GraphicPlayer(self, self.model.players[0])
        self.model.players[1] = GraphicPlayer(self, self.model.players[1])

        self.model.currentplayer = self.model.players[0]

	#Här definieras fönstret
        self.window = GraphWin("Cannon game" , 640, 480, autoflush=False)
        self.window.setCoords(-110, -10, 110, 155)
        ground = Line(Point(-110,0), Point(110,0))
        ground.draw(self.window)

	#Här definieras getter-funktionen som måste fungera
    def getWindow(self):
        return self.window


class GraphicPlayer:

    def __init__(self, ggame, player):
        self.player = player
        self.ggame = ggame

        self.width = self.ggame.getCannonSize()
        self.color = self.player.getColor()
        self.pos = self.player.getX()

	#Här används funktionen
        self.win = ggame.getWindow()

        self.gplayer = Rectangle(Point(self.pos-(self.width/2), 0), Point(self.pos + (self.width/2), 0))

	#Som slutligen behövs när jag ska måla graphic player.
        self.gplayer.draw(self.win)

 

Här är felmeddelandet som fås.

Skaft 2373 – F.d. Moderator
Postad: 9 feb 2021 17:27

I GraphicGame.__init__ skapas GraphicPlayer innan fönstret skapas, men när GraphicPlayer skapas försöker den använda fönstret. Prova att stöka om så att GraphicGame skapar fönstret innan den börjar med GraphicPlayer.

ugglebulle 35
Postad: 9 feb 2021 18:54

Tack så jättemycket!

Svara
Close