def main(): """initiate tiles, survival, clock and start music and run main loop""" Tile.create() survivor = Survivor(*Tile.random_open_tile()) clock = pygame.time.Clock() logging.debug("options: %s", Options.__dict__) logging.debug("monitor: w=%s, h=%s", Options.monitor_w, Options.monitor_h) pygame.mixer.music.play(loops=-1) main_loop(survivor, clock) game_over(display, Zombie.level)
def get_best_action_for_board_state(board, tiles_in_play): best_placement = Placement() for tile_type in shuffle(get_my_unplayed_tile_types(board)): valid_placement_positions = shuffle( board.get_valid_placements_for_tile(tile_type)) for placement_position in valid_placement_positions: new_tile = Tile.create(tile_type, board.get_me()) new_tile.set_position(placement_position, FakeBoard(tiles_in_play)) potential_new_tiles = tiles_in_play + [new_tile] potential_new_tiles_score = score_tile_state( potential_new_tiles, board) placement = Placement(tile_type, placement_position, potential_new_tiles_score) if placement.score > best_placement.score: best_placement = placement best_movement = Movement() for tile in shuffle(board.get_my_played_tiles()): valid_movement_positions = shuffle( board.get_valid_movements_for_tile(tile)) for movement_position in valid_movement_positions: tiles_in_play.remove(tile) new_tile = Tile.create(tile.type, board.get_me()) new_tile.set_position(movement_position, FakeBoard(tiles_in_play)) potential_new_tiles = tiles_in_play + [new_tile] potential_new_tiles_score = score_tile_state( potential_new_tiles, board) movement = Movement(tile, movement_position, potential_new_tiles_score) if movement.score > best_movement.score: best_movement = movement # Little bit of a hack - move any potential beetles off other tiles new_tile.set_position(Position([1000, 1000]), FakeBoard(tiles_in_play)) tiles_in_play.append(tile) if best_placement.score > 0 and best_placement.score > best_movement.score: return best_placement elif best_movement.score > 0: return best_movement return None
def get_best_action_for_board_state( board, tiles_in_play ): best_placement = Placement() for tile_type in shuffle( get_my_unplayed_tile_types( board ) ): valid_placement_positions = shuffle( board.get_valid_placements_for_tile( tile_type ) ) for placement_position in valid_placement_positions: new_tile = Tile.create( tile_type, board.get_me() ) new_tile.set_position( placement_position, FakeBoard( tiles_in_play ) ) potential_new_tiles = tiles_in_play + [ new_tile ] potential_new_tiles_score = score_tile_state( potential_new_tiles, board ) placement = Placement( tile_type, placement_position, potential_new_tiles_score ) if placement.score > best_placement.score: best_placement = placement best_movement = Movement() for tile in shuffle( board.get_my_played_tiles() ): valid_movement_positions = shuffle( board.get_valid_movements_for_tile( tile ) ) for movement_position in valid_movement_positions: tiles_in_play.remove( tile ) new_tile = Tile.create( tile.type, board.get_me() ) new_tile.set_position( movement_position, FakeBoard( tiles_in_play ) ) potential_new_tiles = tiles_in_play + [ new_tile ] potential_new_tiles_score = score_tile_state( potential_new_tiles, board ) movement = Movement( tile, movement_position, potential_new_tiles_score ) if movement.score > best_movement.score: best_movement = movement # Little bit of a hack - move any potential beetles off other tiles new_tile.set_position( Position( [ 1000, 1000 ] ), FakeBoard( tiles_in_play ) ) tiles_in_play.append( tile ) if best_placement.score > 0 and best_placement.score > best_movement.score: return best_placement elif best_movement.score > 0: return best_movement return None
def setUpClass(): Tile.create()
return int(self.pos.x // Tile.length + self.pos.y // Tile.length * Options.tiles_x) def get_tile(self): """Return the tile on which self is""" return Tile.instances[self.get_number()] def get_number(pos): """Return the index in Tile.instances of the tile pos is on :param pos: a container with two items >>> get_number([0, 0]) 0""" x, y = pos return x // Tile.length + y // Tile.length * Options.tiles_x if __name__ == "__main__": import doctest doctest.testmod() from timeit import timeit setup = """ from __main__ import BaseClass, get_number, Tile Tile.create() a = BaseClass(45, 91) b = BaseClass(45, 90) Options = Tile.instances[34] """ print(timeit("a.collide(b)", setup=setup))
@classmethod def update(cls, screen, survivor, total_frames): if cls.left_round: try: if total_frames % ((Options.fps * cls.zombie_init_round * 2) // cls.init_round) == 0: cls.spawn(survivor) except ZeroDivisionError: if total_frames % Options.fps * 10 == 0: cls.spawn(survivor) del_pick_up = set() for pick_up in cls.instances: screen.blit(cls.images[pick_up.type], pick_up.pos.as_ints()) if collide(*pick_up.pos, *pick_up._size, *survivor.pos, *survivor._size): setattr(survivor, pick_up.type, getattr(survivor, pick_up.type) + pick_up.incr) cls.sounds[pick_up.type].play() cls.spawn_tiles.append(pick_up.spawn_tile) del_pick_up.add(pick_up) del pick_up cls.instances -= del_pick_up if __name__ == "__main__": Tile.create() import doctest doctest.testmod()
def __init__( self, player_number, ai_file ): self.__player_number = player_number self.__turn_number = 0 self.__ai_perform_move = imp.load_source( "", ai_file ).perform_move self.__ai_file = ai_file assert self.__ai_perform_move is not None self.tiles = [ Tile.create( TileType.bee, self ), Tile.create( TileType.beetle, self ), Tile.create( TileType.beetle, self ), Tile.create( TileType.spider, self ), Tile.create( TileType.spider, self ), Tile.create( TileType.ant, self ), Tile.create( TileType.ant, self ), Tile.create( TileType.ant, self ), Tile.create( TileType.grass_hopper, self ), Tile.create( TileType.grass_hopper, self ), Tile.create( TileType.grass_hopper, self ), ]