コード例 #1
0
    def start_game(self, snake_ids):
        """ Start a game given a tuple of snake id's. Returning a game id. """
        if len(snake_ids) == 1:
            return

        game = Game(width=11, height=11, max_turns_to_next_food_spawn=12)
        game.save()

        logger.info(f"starting game id={game.id}")

        for s in Snake.objects.filter(id__in=snake_ids):
            game.snakes.add(s)
            GameSnake.objects.create(snake=s, game=game)

        game.save()
        game.create()
        game.run()
        GameLeaderboard(game=game).save()
コード例 #2
0
ファイル: tournaments.py プロジェクト: leonwu127/play
    def create(self, *args, **kwargs):
        heat = kwargs.get("heat")
        previous_game = heat.latest_game
        skip = [w.snake.id for w in heat.winners]
        if previous_game is not None:
            if previous_game.winner is None:
                raise PreviousGameTiedException()
            skip.append(previous_game.winner.snake.id)
            next_snakes = [
                sh.snake for sh in previous_game.snakes
                if sh.snake.id not in skip
            ]
        else:
            next_snakes = [sh.snake for sh in heat.snakes]

        max_turns = 15
        if heat.round.tournament_bracket.board_max_turns_to_next_food_spawn is not None:
            max_turns = heat.round.tournament_bracket.board_max_turns_to_next_food_spawn

        game = Game(
            width=heat.round.tournament_bracket.board_width,
            height=heat.round.tournament_bracket.board_height,
            max_turns_to_next_food_spawn=max_turns,
            engine_url=heat.round.tournament_bracket.tournament.engine_url,
        )
        game.save()

        snake_ids = [snake.id for snake in next_snakes]
        snakes = (TournamentSnake.objects.filter(
            snake__id__in=snake_ids,
            bracket=heat.round.tournament_bracket).prefetch_related(
                "snake").prefetch_related("team"))
        for ts in snakes:
            game.snakes.add(ts.snake)
            GameSnake.objects.create(snake=ts.snake,
                                     game=game,
                                     name=ts.team.name)
        game.save()
        game.create()

        return super(HeatGameManager, self).create(*args, **kwargs, game=game)