Exemple #1
0
class Game(StateMachine):

    def __init__(self,gridSize=32,frameRate=60):
        super(Game,self).__init__('TheGame.You Lost It.')

        pygame.init()

        self.framerate = frameRate
        self.maze = Maze(gridSize)
        self.maze.read("theMaze")
        self.screen = pygame.display.set_mode(self.maze.rect.size,0,32)
        self.clock = pygame.time.Clock()
        self.paused = False

        self.add(AttractMode(self))
        self.add(SetupLevelMode(self))
        self.add(PlayingMode(self))
        self.add(IntermissionMode(self))
        self.add(GameOverMode(self))
        self.setStateByName(PlayingMode.name)


    @property
    def time(self):
        ms = self.clock.tick(self.framerate)
        return ms / 1000.0

    @property
    def font(self):
        try:
            return self._font
        except AttributeError:
            pass
        self._font = pygame.font.Font(FONTNAME,self.maze.gridWidth)
        return self._font

    @property
    def highScoreLabel(self):
        try:
            return self._highScoreLabel
        except AttributeError:
            pass
        self._highScoreLabel = self.font.render("HIGH SCORE", True, (255,255,255),(0,0,0))
        return self._highScoreLabel

    @property
    def oneUpLabel(self):
        try:
            return self._oneUpLabel
        except AttributeError:
            pass
        self._oneUpLabel = self.font.render("1UP", True, (255,255,255),(0,0,0))
        return self._oneUpLabel

    @property
    def twoUpLabel(self):
        try:
            return self._twoUpLabel
        except AttributeError:
            pass
        self._twoUpLabel = self.font.render("2UP", True, (255,255,255),(0,0,0))
        return self._twoUpLabel

    @property
    def readyLabel(self):
        try:
            return self._readyLabel
        except AttributeError:
            pass
        self._readyLabel = self.font.render("Ready!", True, (255,255,0),(0,0,0))
        return self._readyLabel


    def start(self):
        pass

    def up(self):
        self.maze.puckman.newHeading = UP

    def down(self):
        self.maze.puckman.newHeading = DOWN

    def left(self):
        self.maze.puckman.newHeading = LEFT

    def right(self):
        self.maze.puckman.newHeading = RIGHT

    def pause(self):
        self.paused = True

    def unpause(self):
        self.paused = False

    def run(self):
        while True:
            self.think()

    def quit(self):
        print "quitting"
        exit()

    def drawHighScore(self):
        lrect = self.highScoreLabel.get_rect()
        srect = self.screen.get_rect()
        lrect.midtop = srect.midtop
        self.screen.blit(self.highScoreLabel,lrect.topleft)

    def draw1UpScore(self,score):
        r = self.screen.get_rect()
        scoreText = self.font.render("%d" % score, True, (255,255,0),(0,0,0))
        lrect = scoreText.get_rect()

        x,y = r.midtop

        x /= 4
        y += self.maze.gridWidth

        lrect.midtop = (x,y)
        self.screen.blit(scoreText,lrect.topleft)
        

    def draw1Up(self):
        lrect = self.oneUpLabel.get_rect()
        srect = self.screen.get_rect()
        x,y = srect.midtop
        x /= 2
        lrect.midtop = (x,y)
        self.screen.blit(self.oneUpLabel,lrect.topleft)
        

    def draw2Up(self):
        pass

    def drawFruit(self):
        pass

    def update(self):
        if self.paused:
            self.time
        else:
            self.maze.update(self.time)

    def draw(self):

        self.maze.draw(self.screen)

        self.drawHighScore()
        self.draw1Up()
        self.draw1UpScore(self.maze.puckman.score)
        self.draw2Up()
        self.drawFruit()