コード例 #1
0
ファイル: score_mode.py プロジェクト: wushiwang/Knights
    def __init__(self,level,screensize,score=0):
        super(Scoremode,self).__init__(level,screensize)
        self.name = "Scoremode"
        self.score = score
        self.prev_score = score
        self.base_score = SCOREMODE['base-score']
        self.clock = pygame.time.Clock()
        self.timeleft = (SCOREMODE['gametime']+1-0.001)*1000
        self.level = level

        sidebar_size = (screensize[0]-self.boardsize-SIDEBAR['board-padding'],
                        screensize[1])
        self.sidebar = Sidebar(self.score,sidebar_size,self.boardsize)
        self.sidebar_rect = self.sidebar.surface.get_rect()
        self.sidebar_rect = self.sidebar_rect.move((self.boardsize+SIDEBAR['board-padding'],0))

        self.pause = False
        self.pause_color      = SCOREMODE['pause-color']
        self.pause_alpha      = SCOREMODE['pause-alpha']
        self.pause_text       = SCOREMODE['pause-text']
        self.pause_text_color = SCOREMODE['pause-text-color']

        if self.level == 1:
            self.set_pause("Click to start game")
コード例 #2
0
ファイル: score_mode.py プロジェクト: wushiwang/Knights
class Scoremode(Freemode):
    def __init__(self,level,screensize,score=0):
        super(Scoremode,self).__init__(level,screensize)
        self.name = "Scoremode"
        self.score = score
        self.prev_score = score
        self.base_score = SCOREMODE['base-score']
        self.clock = pygame.time.Clock()
        self.timeleft = (SCOREMODE['gametime']+1-0.001)*1000
        self.level = level

        sidebar_size = (screensize[0]-self.boardsize-SIDEBAR['board-padding'],
                        screensize[1])
        self.sidebar = Sidebar(self.score,sidebar_size,self.boardsize)
        self.sidebar_rect = self.sidebar.surface.get_rect()
        self.sidebar_rect = self.sidebar_rect.move((self.boardsize+SIDEBAR['board-padding'],0))

        self.pause = False
        self.pause_color      = SCOREMODE['pause-color']
        self.pause_alpha      = SCOREMODE['pause-alpha']
        self.pause_text       = SCOREMODE['pause-text']
        self.pause_text_color = SCOREMODE['pause-text-color']

        if self.level == 1:
            self.set_pause("Click to start game")

    def done(self):
        if self.board.game_over():
            timebonus = ((self.timeleft)*(self.level*self.level)*self.base_score)/20/1000
            next_round = ("scoremode",self.level+1,self.score+timebonus)

            close_call = {True: " ...Close call!", False: ""}[self.timeleft < 2000]

            messages = [
                (30,SCOREMODE['message-color'],"Level score: " + str(int(self.score-self.prev_score))),
                (30,SCOREMODE['message-color'],"Time left: " + "{0:.1f}".format(self.timeleft/1000) + " seconds"+close_call),
                (30,SCOREMODE['message-color'],"Timebonus: " + str(int(timebonus))),
                (45,SCOREMODE['message-important-color'],"Total score: " + str(int(self.score+timebonus))),
                (20,SCOREMODE['message-color'],"Click to continue to level {0}...".format(self.level+1))]

            return ("clicktocontinue",next_round,messages)
        elif self.timeleft < 100:
            nice_print(["Writing score to file..."])

            hs = get_highscores(10)
            if not hs:
                max_hs = 0
                min_hs = 0
            else:
                max_hs = max(hs)
                min_hs = min(hs)

            if self.score > max_hs:
                highscore_message = (30,SCOREMODE['message-important-color'],"Congratulations! You broke the #1 highscore!")
            elif self.score > min_hs or len(hs) < 10:
                highscore_message = (30,SCOREMODE['message-color'],"Your score is in the top 10 highscores!")
            else:
                highscore_message = (30,SCOREMODE['message-color'],"You didn't get on the top 10 highscores.")

            submit_score(int(self.score))
            next_round = ("scoremode",1,0)
            messages = [(30,SCOREMODE['message-color'],"Game over!"),
                        (40,SCOREMODE['message-important-color'],"Final score: " + str(int(self.score))),
                        highscore_message,
                        (20,SCOREMODE['message-color'],"Click to start new game...")
                        ]
            return ("clicktocontinue_scoremode_loss",next_round,messages)
        else:
            return False

    def set_pause(self,text=False):
        if self.pause:
            self.reset()
            self.sidebar.update()
            return

        brx, bry = self.board_rect.size
        bry += 5
        brx += 5

        font = pygame.font.SysFont("dejavuserif",55,bold=True)
        if not text:
            font = font.render(self.pause_text,
                               1,
                               self.pause_text_color)
        else:
            font = font.render(text,
                               1,
                               self.pause_text_color)
            
        renderpos = font.get_rect(centerx=brx/2,centery=bry/2)

        pause_background = pygame.Surface((brx,bry))
        pause_background.set_alpha(self.pause_alpha)
        pause_background.fill(self.pause_color)
        pause_background.blit(font, renderpos)
        self.background.blit(pause_background,(0,0))
        self.pause = True

    def update(self):
        if not self.pause:
            super(Scoremode,self).update()
            self.timeleft -= self.clock.tick()
        else:
            self.clock.tick()
            self.changed = False
        self.sidebar.score = self.score

        self.sidebar.score_box.update("Score: "+str(int(self.sidebar.score)))
        self.sidebar.time_box.update("Time: "+str(int(self.timeleft/1000)))
        self.sidebar.level_box.update("Level: "+str(self.level))

        if self.sidebar.changed:
            self.changed = True
            nice_print(["Sidebar changed:",
                        "Blitting on background."])
            self.background.blit(self.sidebar.surface,self.sidebar_rect)
        self.sidebar.update()

    def mousedown(self,pos):
        if self.pause and self.board_rect.collidepoint(pos):
            self.reset()
            self.background.fill(self.background_color)
            self.sidebar.update()
            for field in self.board.pygame_fields:
                field.changed = True
            self.changed = True
            self.pause = False
        else:
            field_type = self.board.fieldclick(pos)
            if field_type == "open":
                self.score += self.base_score * self.level
                nice_print(["Score increased to:",str(self.score)])

        self.sidebar.mousedown(pos)

    def mouseup(self,pos):
        self.sidebar.mouseup(pos)

    def reset(self):
            self.pause = False
            self.background.fill(self.background_color)

            self.sidebar.reset()

            for field in self.board.pygame_fields:
                field.changed = True

    def button_clicked(self):
        for click in self.sidebar.button_clicked():
            yield click