Пример #1
0
        public bool Parse(State.Game game)
        {
            State.ReadOnlyEntity game_entity;
            if (!game.TryGetGameEntity(out game_entity))
            {
                return(false);
            }
            this.turn = game_entity.GetTagOrDefault(State.GameTag.TURN, 0);

            if (!blocks.Parse(game))
            {
                return(false);
            }
            if (!entities.Parse(game))
            {
                return(false);
            }

            State.ReadOnlyEntity player_entity;
            if (!game.TryGetPlayerEntity(out player_entity))
            {
                return(false);
            }
            if (!this.player.Parse(game, player_entity))
            {
                return(false);
            }

            State.ReadOnlyEntity opponent_entity;
            if (!game.TryGetOpponentEntity(out opponent_entity))
            {
                return(false);
            }
            if (!this.opponent.Parse(game, opponent_entity))
            {
                return(false);
            }

            return(true);
        }
Пример #2
0
        private int GetPlayingPlayerEntityID()
        {
            State.ReadOnlyEntity game_entity;
            if (!game_state_.TryGetGameEntity(out game_entity))
            {
                return(-1);
            }

            State.ReadOnlyEntity player_entity;
            if (!game_state_.TryGetPlayerEntity(out player_entity))
            {
                return(-1);
            }

            State.ReadOnlyEntity opponent_entity;
            if (!game_state_.TryGetOpponentEntity(out opponent_entity))
            {
                return(-1);
            }

            if (player_entity.GetTagOrDefault(State.GameTag.MULLIGAN_STATE, (int)State.TAG_MULLIGAN.INVALID) == (int)State.TAG_MULLIGAN.INPUT)
            {
                return(-1);
            }

            if (opponent_entity.GetTagOrDefault(State.GameTag.MULLIGAN_STATE, (int)State.TAG_MULLIGAN.INVALID) == (int)State.TAG_MULLIGAN.INPUT)
            {
                return(-1);
            }

            if (!game_entity.HasTag(State.GameTag.STEP))
            {
                return(-1);
            }

            State.TAG_STEP game_entity_step = (State.TAG_STEP)game_entity.GetTag(State.GameTag.STEP);
            if (game_entity_step != State.TAG_STEP.MAIN_ACTION)
            {
                return(-1);
            }

            bool player_first = false;

            if (player_entity.GetTagOrDefault(State.GameTag.FIRST_PLAYER, 0) == 1)
            {
                player_first = true;
            }
            else if (opponent_entity.GetTagOrDefault(State.GameTag.FIRST_PLAYER, 0) == 1)
            {
                player_first = false;
            }
            else
            {
                throw new Exception("parse failed");
            }

            int turn = game_entity.GetTagOrDefault(State.GameTag.TURN, -1);

            if (turn < 0)
            {
                return(-1);
            }

            if (player_first && (turn % 2 == 1))
            {
                return(player_entity.Id);
            }
            else if (!player_first && (turn % 2 == 0))
            {
                return(player_entity.Id);
            }
            else
            {
                return(opponent_entity.Id);
            }
        }