예제 #1
0
        public void ExecuteTurn(TurnObject turnObject)
        {
            var unit            = turnObject.ChosenUnit;
            var player          = unit.Owner;
            var attackDirection = turnObject.AttackDirection;
            int points          = 0;

            switch (attackDirection)
            {
            case AttackDirection.colum:
                points = GetColumPoints(player, unit);
                break;

            case AttackDirection.row:
                points = GetRowPoints(player, unit);
                break;

            case AttackDirection.square:
                points = GetSquarePoints(player, unit);
                break;
            }

            player.Score += points;
            player.EndTurn(turnObject);
            if (PlaceUnit(unit, unit.Position.GetX(), unit.Position.GetY()))
            {
                player.MyUnits.Remove(unit);
                ;
            }

            EventManager.Singleton.OnTurnOver();
        }
        public override TurnObject MakeDecision(TurnData turnData, Player player)
        {
            var myUnits       = player.MyUnits;
            var randomIndex   = Random.Range(0, myUnits.Count);
            var randomUnit    = myUnits[randomIndex];
            var unitOptions   = turnData._positionOptions[randomUnit];
            var positionIndex = Random.Range(0, unitOptions.Count);
            var position      = unitOptions[positionIndex];

            randomUnit.Position = position;
            var turnObject = new TurnObject();

            turnObject.ChosenUnit = randomUnit;

            randomIndex = Random.Range(0, 2);
            switch (randomIndex)
            {
            case 0:
                turnObject.AttackDirection = AttackDirection.row;
                break;

            case 1:
                turnObject.AttackDirection = AttackDirection.square;
                break;

            case 2:
                turnObject.AttackDirection = AttackDirection.colum;
                break;
            }

            return(turnObject);
        }
        public IEnumerator HandleAiChoice(TurnObject turnObject)
        {
            yield return(new WaitForSeconds(1));

            PickNumber(turnObject.ChosenUnit.Value);
            var position = turnObject.ChosenUnit.Position;

            UIManager.ChoiceManager.PickSquare(new Vector2(position.GetX(), position.GetY()));
            yield return(new WaitForSeconds(1));

            UIManager.ChoiceManager.PickAttack(turnObject.AttackDirection);
        }
        public void PickAttack(AttackDirection attackType)
        {
            if (_selectedUnit == null || _selectedPosition == null)
            {
                return;
            }
            var turnObject = new TurnObject();

            turnObject.ChosenUnit          = _selectedUnit;
            turnObject.ChosenUnit.Position = _selectedPosition;
            turnObject.AttackDirection     = attackType;
            HideUsedNumber();
            UIManager.ShowDamageOptions(false);
            SoundManager.Instance.PlayAttack();
            _boardManager.ExecuteTurn(turnObject);
        }
        // this is an AI which chooses a random unit and returns a random answer

        public override TurnObject MakeDecision(TurnData turnData, Player player)
        {
            var randomIndex = UnityEngine.Random.Range(0, player.MyUnits.Count);
            var randomUnit  = player.MyUnits[randomIndex];
            var unitOptions = turnData._positionOptions[randomUnit];

            while (unitOptions.Count == 0)
            {
                randomIndex = UnityEngine.Random.Range(0, player.MyUnits.Count);
                randomUnit  = player.MyUnits[randomIndex];
                unitOptions = turnData._positionOptions[randomUnit];
            }

            var turnObject = new TurnObject();

            turnObject.ChosenUnit = randomUnit;

            SetHighestPointAttack(turnObject, unitOptions, turnData);
            return(turnObject);
        }
        private void SetHighestPointAttack(TurnObject turnObject, List <Position> unitOptions, TurnData turnData)
        {
            var unit          = turnObject.ChosenUnit;
            var maxPoints     = 0;
            var index         = 0;
            var bestDirection = AttackDirection.colum;

            for (int i = 0; i < unitOptions.Count; i++)
            {
                var rowPoints    = GetRowPoints(unitOptions[i], unit, turnData.boardData);
                var columnPoints = GetColumnPoints(unitOptions[i], unit, turnData.boardData);
                var squarePoints = GetSquarePoints(unitOptions[i], unit, turnData.boardData);

                if (rowPoints > maxPoints)
                {
                    index         = i;
                    maxPoints     = rowPoints;
                    bestDirection = AttackDirection.row;
                }

                if (columnPoints > maxPoints)
                {
                    index         = i;
                    maxPoints     = columnPoints;
                    bestDirection = AttackDirection.colum;
                }

                if (columnPoints > maxPoints)
                {
                    index         = i;
                    maxPoints     = columnPoints;
                    bestDirection = AttackDirection.square;
                }
            }

            unit.Position = unitOptions[index];
            turnObject.AttackDirection = bestDirection;
        }
 public void OnPlayerPlayed(TurnObject turnObject)
 {
     PlayerPlayed?.Invoke(turnObject);
 }