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 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 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))
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))
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 scores(self): """ Given the players submitted their solutions computes the scores """ return GameScore.compute_player_scores(self.solutions)
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))
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))
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
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()