public bool CanMove()
        {
            var startField = board.fields[posStartX, posStartY];

            if (posEndX > 7 || posEndX < 0 || posEndY > 7 || posEndY < 0)
            {
                return(false);
            }
            var endField = board.fields[posEndX, posEndY];

            switch (pawnController.state)
            {
            case State.Counter:
                CheckQueen(startField, endField);
                if (Math.Abs(posStartX - posEndX) > 1)
                {
                    if (beatChecker.CanCounterBeat(startField, endField))
                    {
                        move  = true;
                        beat  = true;
                        beatX = Math.Max(startField.X, endField.X) - 1;
                        beatY = Math.Max(startField.Y, endField.Y) - 1;
                    }
                }
                else if (beatChecker.CanCounterMove(startField, endField))
                {
                    move = true;
                }
                if (move)
                {
                    return(true);
                }
                return(false);

            case State.Queen:
                Debug.Log("QUEEN MOVE");
                if (beatChecker.CanQueenMove(startField, endField))
                {
                    move = true;
                }
                else if (beatChecker.CanQueenBeat(startField, endField))
                {
                    move  = true;
                    beat  = true;
                    beatX = beatChecker.BeatX;
                    beatY = beatChecker.BeatY;
                }

                if (move)
                {
                    return(true);
                }
                return(false);

            default:
                return(false);
            }
        }
Example #2
0
        public List <PawnController> CheckBeats(List <PawnController> pawns)
        {
            List <PawnController> pawnsToKill = new List <PawnController>();

            foreach (var pawn in pawns)
            {
                switch (pawn.state)
                {
                case State.Dead:
                    break;

                case State.Counter:
                    if (NumberNotBig(pawn.Field.X) && NumberNotBig(pawn.Field.Y))
                    {
                        if (beatChecker.CanCounterBeat(pawn.Field, board.fields[pawn.Field.X + 2, pawn.Field.Y + 2]))
                        {
                            pawnsToKill.Add(pawn);
                            break;
                        }
                    }
                    if (NumberNotBig(pawn.Field.X) && NumberNotSmall(pawn.Field.Y))
                    {
                        if (beatChecker.CanCounterBeat(pawn.Field, board.fields[pawn.Field.X + 2, pawn.Field.Y - 2]))
                        {
                            pawnsToKill.Add(pawn);
                            break;
                        }
                    }
                    if (NumberNotSmall(pawn.Field.X) && NumberNotBig(pawn.Field.Y))
                    {
                        if (beatChecker.CanCounterBeat(pawn.Field, board.fields[pawn.Field.X - 2, pawn.Field.Y + 2]))
                        {
                            pawnsToKill.Add(pawn);
                            break;
                        }
                    }
                    if (NumberNotSmall(pawn.Field.X) && NumberNotSmall(pawn.Field.Y))
                    {
                        if (beatChecker.CanCounterBeat(pawn.Field, board.fields[pawn.Field.X - 2, pawn.Field.Y - 2]))
                        {
                            pawnsToKill.Add(pawn);
                            break;
                        }
                    }
                    break;

                case State.Queen:
                    var breakC = false;
                    var signX  = 1;
                    var signY  = 1;
                    var range  = SetUpRange();
                    var it     = 0;
                    while (it <= 3)
                    {
                        var count = 1;

                        while (count <= 7)
                        {
                            int?x = range[it][0];
                            int?y = range[it][1];
                            if (range[it][0] == 0)
                            {
                                if (pawn.Field.X - count < 0)
                                {
                                    x = null;
                                }
                            }
                            if (range[it][0] == 7)
                            {
                                if (pawn.Field.X + count > 7)
                                {
                                    x = null;
                                }
                            }
                            if (range[it][1] == 0)
                            {
                                if (pawn.Field.Y + count > 0)
                                {
                                    y = null;
                                }
                            }
                            if (range[it][1] == 7)
                            {
                                if (pawn.Field.Y + count > 7)
                                {
                                    y = null;
                                }
                            }

                            if (x != null && y != null)
                            {
                                if (range[it][0] == 0)
                                {
                                    signX = -1;
                                }
                                else
                                {
                                    signX = 1;
                                }
                                if (range[it][1] == 0)
                                {
                                    signY = -1;
                                }
                                else
                                {
                                    signY = 1;
                                }

                                if (beatChecker.CanQueenBeat(pawn.Field, board.fields[pawn.Field.X + count * signX, pawn.Field.Y + count * signY]))
                                {
                                    pawnsToKill.Add(pawn);
                                    breakC = true;
                                    break;
                                }
                            }
                            count++;
                        }
                        if (breakC)
                        {
                            break;
                        }
                        it++;
                    }
                    break;
                }
            }
            return(pawnsToKill);
        }