Как реализовать неблокирующие, последовательные ходы ИИ в многопользовательской шахматной игре в каналах django?
Я разрабатываю сайт для игры в специальную разновидность шахмат с помощью React и Django.
Для этого необходимо играть в две игры одновременно. Сайт позволяет добавлять игроков с искусственным интеллектом, так что общий сценарий состоит в том, что есть доска 1 (человек против AI) и доска 2 (AI против AI). Я хочу, чтобы компьютерные игроки вели себя так, чтобы они играли ход, ждали секунду, а затем позволяли играть другому игроку, не блокируя другие игры. Проблема в том, что следующий код заставляет всю игру AI vs AI играть в мгновение ока и делает невозможным отправку и получение каких-либо событий (даже событие game.start не отправляется).
Вот мой код, который запускает компьютеры, играющие друг против друга:
for game in started_games:
await self.channel_layer.group_send(
self.room_group_name, {'type': 'game.start'})
if self.is_ai_turn_in_game(game):
if game.gamemode == GameMode.CLASSICAL.value:
board = chess.Board(fen=game.fen)
else:
board = chess.variant.CrazyhouseBoard(fen=game.fen)
print(self.is_ai_turn_in_game(game))
while self.is_ai_turn_in_game(game):
await self.handle_ai_turn(game, board)
await self.send_move_to_clients(game)
self.send_move_to_clients
обрабатывает некоторые данные, затем вызывает
await self.channel_layer.group_send(
self.room_group_name, {'type': 'game.move', 'message': response_data}
)
, который выполняет следующий код:
async def game_move(self, event):
move = event['message']
await self.send(json.dumps(move))
await asyncio.sleep(1)
Мне интересно, должен ли я использовать здесь поток, или, возможно, я неправильно понимаю, как функционируют циклы событий async.