예제 #1
0
    def restart(self):
        self.deep = 720
        self.game_over = False
        self.now = None
        self.number = -1

        self.is_pause = False

        self.all_sprites = pygame.sprite.Group()  # 游戏所有精灵组,负责更新与绘制
        self.en = pygame.sprite.Group()  #敌机精灵组

        self.top = Top()
        self.top.add(self.all_sprites, self.en)

        self.player = Plane()
        self.all_sprites.add(self.player)

        self.A = A(65, 620)
        self.A.add(self.all_sprites, self.en)
        self.hp = HP(self.player.blood)
        self.all_sprites.add(self.hp)

        self.score = GameScore(self.number)
        self.all_sprites.add(self.score)

        self.create_last = pygame.time.get_ticks()
        self.create_delay = 600
예제 #2
0
 def reset_stats(self):
     """Initialize statistics that can change during the game."""
     self.ships_left = self.ai_settings.ship_limit
     self.score = 0
     self.level = 1
     self.username = None
     self.current_game_score = GameScore(self.username)
     self.close_asteroids_timer()
     self.is_new_game = False
예제 #3
0
def test_words_not_unique_to_each_player_should_not_be_counted():
    input = {'Tom': ["ammy"], 'Lucas': ["wine", "house", "ammy"]}
    output = {
        'Tom': 0,
        'Lucas': 3,
    }
    expect(GameScore.compute_player_scores(input)).to(equal(output))
예제 #4
0
def test_word_to_score():
    words_dict = dict(
        (("catty", 2), ("wampus", 3), ("am", 0), ("bumfuzzle", 11),
         ("gardyloo", 11), ("taradiddle", 11), ("loo", 1), ("snickersnee", 11),
         ("widdershins", 11), ("teabag", 3), ("collywobbles", 11), ("gubbins",
                                                                    5)))
    for w, s in words_dict.iteritems():
        expect(GameScore.word_to_score(w)).to(be(s))
예제 #5
0
    def hit_enemys(self):
        i = pygame.sprite.spritecollideany(self.player, self.en)
        if i == None:
            self.player.yoffset = 5
        else:
            if self.now != i:
                self.number += 1
                self.score.kill()
                self.score = GameScore(self.number)
                self.all_sprites.add(self.score)
                self.player.yoffset = i.yoffset

                if i.id == 0:
                    B_mixer.play()
                    self.player.blood -= 30
                    self.hp = HP(self.player.blood)
                    self.all_sprites.add(self.hp)

                elif i.id == 1:
                    A_mixer.play()
                    self.player.blood += 10
                    self.hp = HP(self.player.blood)
                    self.all_sprites.add(self.hp)
                    self.now = i

                elif i.id == 2:
                    B_mixer.play()
                    self.player.blood -= 30
                    self.hp = HP(self.player.blood)
                    self.all_sprites.add(self.hp)
                    self.now = i

                elif i.id == 4:
                    self.player.xoffset -= 4
                    print(self.player.xoffset)
                    self.now = i
예제 #6
0
 def scores(self):
     """
     Given the players submitted their solutions computes the scores
     """
     return GameScore.compute_player_scores(self.solutions)
예제 #7
0
def test_when_a_player_did_not_find_any_word_its_score_should_be_zero():
    input = {'Tom': []}
    output = {'Tom': 0}
    expect(GameScore.compute_player_scores(input)).to(equal(output))
예제 #8
0
def test_words_to_scores():
    words = ("catty", "wampus", "am", "bumfuzzle", "gardyloo", "taradiddle",
             "loo", "snickersnee", "widdershins", "teabag", "collywobbles",
             "gubbins")
    scores = [2, 3, 0, 11, 11, 11, 1, 11, 11, 3, 11, 5]
    expect(GameScore.words_to_scores(words)).to(equal(scores))
예제 #9
0
class GameStats:
    """Track statistics for Alien Invasion."""

    MIN_HARD_LEVEL = 2

    def __init__(self, ai_settings):
        """Initialize statistics."""
        self.ai_settings = ai_settings
        # A timer that will be responsible for creating asteroids on a specific time interval
        self.asteroids_timer = None

        self.reset_stats()

        # Start game in an inactive state.
        self.game_active = False

        # High score should never be reset.
        self.high_score = 0

        # A game count that will indicate whether the player has lost any games
        self.games_count = 0

    def get_level(self):
        return self._level

    def set_level(self, new_level):
        if hasattr(self, "_level"):
            self._level_end_time = datetime.datetime.now()
            self.record_level_data()
        self._level = new_level
        self._level_start_time = datetime.datetime.now()
        self._level_end_time = None
        self._level_score = 0

    level = property(get_level, set_level)

    def get_score(self):
        return self._score

    def set_score(self, new_score):
        if hasattr(self, "_score"):
            old_score = self._score
            diff = new_score - old_score
            self._level_score += diff
        self._score = new_score

    score = property(get_score, set_score)

    def get_level_times(self):
        return self._level_start_time, self._level_end_time

    def get_level_score(self):
        return self._level_score

    def record_level_data(self):
        start, end = self.get_level_times()
        self.current_game_score.add_level(self.level, start, end,
                                          self.get_level_score())

    def increase_game_count(self):
        self.games_count += 1

    def reset_stats(self):
        """Initialize statistics that can change during the game."""
        self.ships_left = self.ai_settings.ship_limit
        self.score = 0
        self.level = 1
        self.username = None
        self.current_game_score = GameScore(self.username)
        self.close_asteroids_timer()
        self.is_new_game = False

    def close_asteroids_timer(self):
        if self.asteroids_timer is not None:
            self.asteroids_timer.stop()
            self.asteroids_timer = None

    def set_asteroids_timer(self, timer):
        self.asteroids_timer = timer

    def set_username(self, username):
        self.username = username

    def end_game(self):
        assert self.username is not None
        self._level_end_time = datetime.datetime.now()
        self.record_level_data()
        self.current_game_score.username = self.username
        self.current_game_score.save()
        self.is_new_game = True
예제 #10
0
class GameServer:
    def __init__(self):
        self.restart()

    def restart(self):
        self.deep = 720
        self.game_over = False
        self.now = None
        self.number = -1

        self.is_pause = False

        self.all_sprites = pygame.sprite.Group()  # 游戏所有精灵组,负责更新与绘制
        self.en = pygame.sprite.Group()  #敌机精灵组

        self.top = Top()
        self.top.add(self.all_sprites, self.en)

        self.player = Plane()
        self.all_sprites.add(self.player)

        self.A = A(65, 620)
        self.A.add(self.all_sprites, self.en)
        self.hp = HP(self.player.blood)
        self.all_sprites.add(self.hp)

        self.score = GameScore(self.number)
        self.all_sprites.add(self.score)

        self.create_last = pygame.time.get_ticks()
        self.create_delay = 600

    def update(self):
        self.all_sprites.update()
        self.check_collision()
        self.come_enemys()
        self.over_game()

    def draw(self, screen):
        self.all_sprites.draw(screen)

    def handle_keys(self):  #处理键盘事件
        keys = pygame.key.get_pressed()  #获取按键
        self.player.control(keys)

    def check_collision(self):
        self.hit_enemys()

    def hit_enemys(self):
        i = pygame.sprite.spritecollideany(self.player, self.en)
        if i == None:
            self.player.yoffset = 5
        else:
            if self.now != i:
                self.number += 1
                self.score.kill()
                self.score = GameScore(self.number)
                self.all_sprites.add(self.score)
                self.player.yoffset = i.yoffset

                if i.id == 0:
                    B_mixer.play()
                    self.player.blood -= 30
                    self.hp = HP(self.player.blood)
                    self.all_sprites.add(self.hp)

                elif i.id == 1:
                    A_mixer.play()
                    self.player.blood += 10
                    self.hp = HP(self.player.blood)
                    self.all_sprites.add(self.hp)
                    self.now = i

                elif i.id == 2:
                    B_mixer.play()
                    self.player.blood -= 30
                    self.hp = HP(self.player.blood)
                    self.all_sprites.add(self.hp)
                    self.now = i

                elif i.id == 4:
                    self.player.xoffset -= 4
                    print(self.player.xoffset)
                    self.now = i

    def come_enemys(self):
        now = pygame.time.get_ticks()
        if now - self.create_last > self.create_delay:
            self.create_last = now
            self.en_list = ["A", "B", "D"]
            number = random.randint(0, 2)
            en = eval(self.en_list[number])(random.randrange(65, 425),
                                            self.deep)
            en.add(self.all_sprites, self.en)

    def over_game(self):
        if self.player.blood <= 0 or self.player.rect.bottom >= GAME_HEIGHT:
            self.game_over = True
            dead_mixer.play()