Пример #1
0
        private static async Task PlayAsync(GameStateMachinePlayer alienPlayer, IAlienAi alienAi)
        {
            var joinResult = await alienPlayer.JoinAsync(new JoinArg());

            if (joinResult.GameStage == ApiGameStage.Finished)
            {
                return;
            }

            var commandsResult = await alienPlayer.TryStartAsync(new StartArg());

            if (commandsResult == null)
            {
                throw new InvalidOperationException("AlienAi: couldn't start");
            }

            while (commandsResult.GameStage != ApiGameStage.Finished)
            {
                var universe = commandsResult.Universe !.ToUniverse(myPlayerId: 0, enemyPlayerId: 1, myRole: joinResult.GameInfo !.Role);
                var commands = alienAi.GetNextCommands(universe, playerId: 0);

                commandsResult = await alienPlayer.TryCommandsAsync(new CommandsArg
                {
                    ShipCommands = commands.Select(x => x.ToApiShipCommand()).ToArray()
                });

                if (commandsResult == null)
                {
                    throw new InvalidOperationException("AlienAi: couldn't apply commands");
                }
            }
        }