This commit is contained in:
Frank DeMarco 2014-04-28 07:12:18 +09:00
parent 484257028e
commit 935f87a89b
1 changed files with 21 additions and 4 deletions

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from random import randint, randrange, choice from random import randint, randrange, choice
from time import time
from pygame import Surface, PixelArray, Rect from pygame import Surface, PixelArray, Rect
from pygame.draw import aalines, polygon from pygame.draw import aalines, polygon
@ -171,7 +172,9 @@ class Scoreboard(GameChild, Surface):
def __init__(self, parent): def __init__(self, parent):
GameChild.__init__(self, parent) GameChild.__init__(self, parent)
Surface.__init__(self, (380, 80)) Surface.__init__(self, (380, 80))
self.scores_path = self.get_resource("score", "path")
self.display_surface = self.get_display_surface() self.display_surface = self.get_display_surface()
self.most_recent_score = None
self.fill((255, 255, 255)) self.fill((255, 255, 255))
self.rect = self.get_rect() self.rect = self.get_rect()
self.rect.center = self.display_surface.get_rect().centerx, 350 self.rect.center = self.display_surface.get_rect().centerx, 350
@ -179,7 +182,7 @@ class Scoreboard(GameChild, Surface):
def load(self): def load(self):
scores = [] scores = []
for line in file(self.get_resource("score", "path"), "r"): for line in file(self.scores_path, "r"):
fields = line.split() fields = line.split()
scores.append((float(fields[0]), int(fields[1]))) scores.append((float(fields[0]), int(fields[1])))
self.sprites = sprites = [] self.sprites = sprites = []
@ -188,17 +191,30 @@ class Scoreboard(GameChild, Surface):
for ii, score in enumerate(sorted(scores, key=lambda score: score[1], for ii, score in enumerate(sorted(scores, key=lambda score: score[1],
reverse=True)[:3]): reverse=True)[:3]):
font = Font(font_path, [40, 24, 16][ii]) font = Font(font_path, [40, 24, 16][ii])
sprites.append(Sprite(self)) sprites.append(Sprite(self, 250))
sprites[ii].add_frame(font.render(str(score[1]) + "¥", True, (0, 0, 0), text = str(score[1]) + "¥"
color = (0, 0, 0) if not (score[1] == self.most_recent_score) else \
(255, 255, 255)
sprites[ii].add_frame(font.render(text, True, color,
(255, 255, 255))) (255, 255, 255)))
if score[1] == self.most_recent_score:
sprites[ii].add_frame(font.render(text, True, (0, 255, 0),
(255, 255, 255)))
sprites[ii].location.midtop = self.rect.w / 2, y sprites[ii].location.midtop = self.rect.w / 2, y
y += sprites[ii].location.h y += sprites[ii].location.h
sprites[ii].display_surface = self sprites[ii].display_surface = self
def write(self):
score = int(round(self.get_game().triangles.score))
file(self.scores_path, "a").write(str(time()) + " " + str(score) + "\n")
self.most_recent_score = score
self.load()
def update(self): def update(self):
self.display_surface.blit(self, self.rect) self.fill((255, 255, 255))
for sprite in self.sprites: for sprite in self.sprites:
sprite.update() sprite.update()
self.display_surface.blit(self, self.rect)
class Sieve(Strip): class Sieve(Strip):
@ -463,6 +479,7 @@ class Static(Sprite):
def respond(self, event): def respond(self, event):
if self.active and self.complete: if self.active and self.complete:
if self.delegate.compare(event, "advance"): if self.delegate.compare(event, "advance"):
self.parent.title.scoreboard.write()
self.total.deactivate() self.total.deactivate()
self.deactivate() self.deactivate()
self.reset() self.reset()