コード例 #1
0
ファイル: Snake.cs プロジェクト: pawelwicher/Snake
 public Snake()
 {
     this.Pool = new FieldType[xSize, ySize];
     this.tail = new LinkedList <Point>();
     InitRandom();
     InitPool();
 }
コード例 #2
0
        public Board(int width, int height, int foodInterval, int foodDensity, int seed)
        {
            _board        = new FieldType[width, height];
            _width        = width;
            _height       = height;
            _foodInterval = foodInterval;
            _foodDensity  = foodDensity;
            _snake        = new List <Point>();
            _random       = new Random(seed);

            Dead      = false;
            Turn      = 1;
            Direction = Direction.None;

            for (var i = 0; i < _width; i++)
            {
                _board[i, 0]           = FieldType.Wall;
                _board[i, _height - 1] = FieldType.Wall;
            }

            for (var i = 0; i < _height; i++)
            {
                _board[0, i]          = FieldType.Wall;
                _board[_width - 1, i] = FieldType.Wall;
            }

            _snake.Add(new Point(_width / 2, _height / 2));
            _board[_snake[0].X, _snake[0].Y] = FieldType.Head;
        }
コード例 #3
0
ファイル: WhiteQueen.cs プロジェクト: damianschmidt/PAMSI
 // Constructor
 public WhiteQueen(int row, int column, FieldType[,] board, Node node = null)
 {
     this.column = column;
     this.row    = row;
     boardStatus = board;
     parent      = node;
     listNode    = new List <Node>();
 }
コード例 #4
0
        public void Render(FieldType[,] changedRenderFields)
        {
            unsafe
            {
                for (int x = 0; x < changedRenderFields.GetLength(0); x++)
                {
                    for (int y = 0; y < changedRenderFields.GetLength(1); y++)
                    {
                        var f = changedRenderFields[x, y];

                        var rect = new Rect();
                        rect.Height = this.blockSize;
                        rect.Width  = this.blockSize;
                        rect.X      = this.blockSize * x;
                        rect.Y      = this.blockSize * y;

                        switch (f)
                        {
                        case FieldType.None:
                        {
                            SDL.SetRenderDrawColor(_renderer, 230, 230, 230, 205);
                            SDL.RenderFillRect(_renderer, &rect);
                            break;
                        }

                        case FieldType.Fruit1:
                        {
                            SDL.SetRenderDrawColor(_renderer, 255, 255, 0, 205);
                            SDL.RenderFillRect(_renderer, &rect);
                            break;
                        }

                        case FieldType.Border:
                        {
                            SDL.SetRenderDrawColor(_renderer, 0, 255, 0, 205);
                            SDL.RenderFillRect(_renderer, &rect);
                            break;
                        }

                        case FieldType.Snake1:
                        {
                            SDL.SetRenderDrawColor(_renderer, 255, 0, 0, 205);
                            SDL.RenderFillRect(_renderer, &rect);
                            break;
                        }

                        case FieldType.Snake2:
                        {
                            SDL.SetRenderDrawColor(_renderer, 0, 0, 255, 205);
                            SDL.RenderFillRect(_renderer, &rect);
                            break;
                        }
                        }
                    }
                }
                SDL.RenderPresent(_renderer);
            }
        }
コード例 #5
0
ファイル: FieldManager.cs プロジェクト: TBTBTBT/Dungeon
        public FieldState(bool passable)
        {
            isPassable = passable;
            RoomSize   = FieldManager.Instance.RoomSize;
            RoadSize   = FieldManager.Instance.RoadSize;
            int s = FieldManager.Instance.SectionSize;

            State = new FieldType[s, s];
        }
コード例 #6
0
ファイル: Classes.cs プロジェクト: Szuhi/Uni_300
 public Field()
 {
     m = new FieldType[N, N];
     for (int i = 0; i < N; i++)
     {
         for (int j = 0; j < N; j++)
         {
             m[i, j] = FieldType.Empty;
         }
     }
 }
コード例 #7
0
        public FieldType[,] fieldValues; //mezőértékek

        #endregion

        #region Constructor

        public MinefieldTable()
        {
            fieldValues = new FieldType[10, 10];
            for (int i = 0; i < 10; ++i)
            {
                for (int j = 0; j < 10; ++j)
                {
                    fieldValues[i, j] = FieldType.Empty;
                }
            }
            fieldValues[9, 9] = FieldType.Player;
        }
コード例 #8
0
        private Int32 _tableSize; // táblaméret

        #endregion Fields

        #region Constructors

        public RobotGameTable(Int32 tableSize)
        {
            if (tableSize <= 0 || tableSize % 2 != 1)
                throw new Exception("Invalid tablesize!");
            _tableSize = tableSize;
            _table = new FieldType[tableSize, tableSize];
            _tableLock = new Boolean[tableSize, tableSize];

            GetFixedPositions();
            SetCenter();
            SpawnRobot();
        }
コード例 #9
0
        private void TestResult(FieldType[,] solution, FieldType[,] solved)
        {
            Assert.AreEqual(solution.GetLength(0), solved.GetLength(0), "Diff Lengths: Rows");
            Assert.AreEqual(solution.GetLength(1), solved.GetLength(1), "Diff Lengths: Columns");

            for (int i = 0; i < solution.GetLength(0); i++)
            {
                for (int j = 0; j < solution.GetLength(1); j++)
                {
                    Assert.AreEqual(solution[i, j], solved[i, j], "Matrix Value diff: " + "[" + i + ", " + j + "]");
                }
            }
        }
コード例 #10
0
        public BlackHoleGameTable(Int32 tableSize)
        {
            if (tableSize != 5 && tableSize != 7 && tableSize != 9)
                throw new ArgumentException("Not supported table size.", "tableSize");

            gameTable = new FieldType[tableSize, tableSize];

            IsGameActive = false;
            GameStatus = GameStatus.PlayerAChoose;
            PlayerAScore = 0;
            PlayerBScore = 0;
            CoordinatesOfChosenField = Tuple.Create(-1, -1);
        }
コード例 #11
0
ファイル: ProximitySensor.cs プロジェクト: zalavari/Porszivo
        public ProximitySensor(Room room)
        {
            Room = room;

            roomMtx = new FieldType[room.MaxX, room.MaxY];
            for (int i = 0; i < room.MaxX; ++i)
            {
                for (int j = 0; j < room.MaxY; ++j)
                {
                    roomMtx[i, j] = FieldType.UNKNOWN;
                }
            }
        }
コード例 #12
0
        public MineField(int width, int height, IList <Point> mines, Point exit)
        {
            ValidateDimensions(width, height);
            _grid = new FieldType[width, height];

            foreach (var mine in mines)
            {
                ValidatePoint(mine);
                SetMine(mine);
            }

            ValidatePoint(exit);
            SetExit(exit);
        }
コード例 #13
0
ファイル: Robot.cs プロジェクト: zalavari/Porszivo
        public Robot(ProximitySensor proximitySensor, DrivingUnit drivingUnit, Room room_)
        {
            ProximitySensor = proximitySensor;
            DrivingUnit = drivingUnit;

            room = new FieldType[room_.MaxX, room_.MaxY];
            for (int i = 0; i < room_.MaxX; ++i) for (int j = 0; j < room_.MaxY; ++j) {room[i,j] = FieldType.UNKNOWN;}
            roomMaxX = room_.MaxX;
            roomMaxY = room_.MaxY;
            
            radius = 1;
            positionX = room_.RobotX;
            positionY = room_.RobotY;

            algorithm1 = new RandomPathChooserAlgorithm(this);
            algorithm2 = new DepthFirstSearchPathChooserAlgorithm(this);
        }
コード例 #14
0
        public Room(String input)
        {
            /**
             * Szoba beolvasása fájlból.
             * Fájl leírása:
             * MaxX MaxY
             * RobotX RobotY
             * Szoba leírása MaxY sorban soronként MaxX karakter: 1 - akadály, 0 üres terület
             **/


            string[] lines = System.IO.File.ReadAllLines(
                Directory.GetParent(Directory.GetParent(Directory.GetParent(
                                                            Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory)
                                                            ).FullName).FullName).FullName + "/" + input);

            // Pálya méretének beolvasása
            string[] row = lines[0].Split(' ');
            MaxX = Int32.Parse(row[0]);
            MaxY = Int32.Parse(row[1]);
            room = new FieldType[MaxX, MaxY];

            // Robot helyének beolvasása
            row    = lines[1].Split(' ');
            RobotX = Int32.Parse(row[0]);
            RobotY = Int32.Parse(row[1]);

            // Pálya beolvasása
            for (int i = 0; i < MaxX; i++)
            {
                for (int j = 0; j < MaxY; j++)
                {
                    if (lines[j + 2][i] == '0')
                    {
                        room[i, j] = FieldType.DIRTY;
                    }
                    else
                    {
                        room[i, j] = FieldType.OBSTACLE;
                    }
                }
            }
        }
コード例 #15
0
ファイル: Table.cs プロジェクト: 97kovacspeter/CrazyRobot1
 public Table(int size)
 {
     _size       = size;
     FieldValues = new FieldType[size, size];
     for (int i = 0; i < size; ++i)
     {
         for (int j = 0; j < size; ++j)
         {
             if (i == 0 || j == 0 || i == size - 1 || j == size - 1)
             {
                 FieldValues[i, j] = FieldType.PermaWall;
             }
             else
             {
                 FieldValues[i, j] = FieldType.Empty;
             }
         }
     }
     FieldValues[(size) / 2, (size) / 2] = FieldType.Magnet;
 }
コード例 #16
0
        public Map(int width, int height)
        {
            rnd = new Random();

            Width  = width;
            Height = height;

            _playfield   = new FieldType[width, height];
            _changedData = new FieldType[width, height];

            //Rand einzeichnen
            for (int n = 0; n < width; n++)
            {
                ChangeField(n, 0, FieldType.Border);
                ChangeField(n, height - 1, FieldType.Border);
            }
            for (int n = 0; n < height; n++)
            {
                ChangeField(0, n, FieldType.Border);
                ChangeField(width - 1, n, FieldType.Border);
            }
        }
コード例 #17
0
    // Declare member variables here. Examples:

    // Called when the node enters the scene tree for the first time.
    public override void _Ready()
    {
        world = new FieldType[worldSizeX, worldSizeY];

        for (int x = 0; x < world.GetLength(0); x++)
        {
            for (int y = 0; y < world.GetLength(0); y++)
            {
                world[x, y] = FieldType.Empty;
            }
        }


        timer = (Timer)GetNode("Timer");
        timer.Connect("timeout", this, nameof(onTick));

        player = (PlayerLogic)GetNode("/root/Main/LogicWorld/PlayerLogic");
        player.Connect(nameof(PlayerLogic.ChangedPosition), this, nameof(newPlayerPosition));


        state = GameState.Running;
    }
コード例 #18
0
        public void LionNonogramTest()
        {
            var Rows = new List <List <int> >()
            {
                new List <int>()
                {
                    7
                },
                new List <int>()
                {
                    9
                },
                new List <int>()
                {
                    2, 4, 2
                },
                new List <int>()
                {
                    2, 2
                },
                new List <int>()
                {
                    2, 1, 1, 2
                },
                new List <int>()
                {
                    3, 2
                },
                new List <int>()
                {
                    2, 2
                },
                new List <int>()
                {
                    3, 3, 1
                },
                new List <int>()
                {
                    9, 1
                },
                new List <int>()
                {
                    9, 1
                },
                new List <int>()
                {
                    11, 2
                },
                new List <int>()
                {
                    15
                },
                new List <int>()
                {
                    14
                },
                new List <int>()
                {
                    2, 3, 2
                },
                new List <int>()
                {
                    1, 1, 1, 1, 1, 1, 1
                },
            };

            var Columns = new List <List <int> >()
            {
                new List <int>()
                {
                    4
                },
                new List <int>()
                {
                    6, 4
                },
                new List <int>()
                {
                    12, 1
                },
                new List <int>()
                {
                    2, 1, 6
                },
                new List <int>()
                {
                    2, 5, 1
                },
                new List <int>()
                {
                    3, 1, 6
                },
                new List <int>()
                {
                    3, 7
                },
                new List <int>()
                {
                    3, 6
                },
                new List <int>()
                {
                    3, 1, 5, 1
                },
                new List <int>()
                {
                    2, 6
                },
                new List <int>()
                {
                    12, 1
                },
                new List <int>()
                {
                    6, 4
                },
                new List <int>()
                {
                    4
                },
                new List <int>()
                {
                    3
                },
                new List <int>()
                {
                    5
                },
            };

            Puzzle puzzle = new Puzzle(Rows, Columns);

            FieldType[,] matrixSolution =
            {
                { white, white, white, solid, solid, solid, solid, solid, solid, solid, white, white, white, white, white },
                { white, white, solid, solid, solid, solid, solid, solid, solid, solid, solid, white, white, white, white },
                { white, solid, solid, white, white, solid, solid, solid, solid, white, solid, solid, white, white, white },
                { white, solid, solid, white, white, white, white, white, white, white, solid, solid, white, white, white },
                { white, solid, solid, white, white, solid, white, white, solid, white, solid, solid, white, white, white },
                { white, solid, solid, solid, white, white, white, white, white, white, solid, solid, white, white, white },
                { white, solid, solid, white, white, white, white, white, white, white, solid, solid, white, white, white },
                { white, solid, solid, solid, white, white, white, white, white, solid, solid, solid, white, white, solid },
                { white, white, solid, solid, solid, solid, solid, solid, solid, solid, solid, white, white, white, solid },
                { white, white, solid, solid, solid, solid, solid, solid, solid, solid, solid, white, white, white, solid },
                { white, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid, white, solid, solid },
                { solid, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid },
                { solid, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid, white },
                { solid, solid, white, white, white, solid, solid, solid, white, white, white, solid, solid, white, white },
                { solid, white, solid, white, solid, white, solid, white, solid, white, solid, white, solid, white, white },
            };

            var solvedPuzzle = SolverEngine.Solve(puzzle);

            var solvedPuzzleMatrix = solvedPuzzle.Matrix.Fields;

            TestResult(matrixSolution, solvedPuzzleMatrix);
        }
コード例 #19
0
        private int Move()
        {
            int points = 0;

            if (column != 0 && column != 7 && row > 1)
            {
                if (boardStatus[row - 1, column - 1] == FieldType.Free && column > 3)
                {
                    points = moveMid;

                    FieldType[,] newBoard         = Clone(boardStatus);
                    newBoard[row, column]         = FieldType.Free;
                    newBoard[row - 1, column - 1] = FieldType.WhitePawn;

                    int  newScore = points + CountScore();
                    Node newNode  = new Node(parent, newBoard, newScore); // Make new node
                    listNode.Add(newNode);                                // Add to list of possible moves
                }
                else if (boardStatus[row - 1, column - 1] == FieldType.Free && column < 4)
                {
                    points = move;

                    FieldType[,] newBoard         = Clone(boardStatus);
                    newBoard[row, column]         = FieldType.Free;
                    newBoard[row - 1, column - 1] = FieldType.WhitePawn;

                    int  newScore = points + CountScore();
                    Node newNode  = new Node(parent, newBoard, newScore); // Make new node
                    listNode.Add(newNode);                                // Add to list of possible moves
                }

                if (boardStatus[row - 1, column + 1] == FieldType.Free && column > 3)
                {
                    points = move;

                    FieldType[,] newBoard         = Clone(boardStatus);
                    newBoard[row, column]         = FieldType.Free;
                    newBoard[row - 1, column + 1] = FieldType.WhitePawn;

                    int  newScore = points + CountScore();
                    Node newNode  = new Node(parent, newBoard, newScore); // Make new node
                    listNode.Add(newNode);                                // Add to list of possible moves
                }
                else if (boardStatus[row - 1, column + 1] == FieldType.Free && column < 4)
                {
                    points = moveMid;

                    FieldType[,] newBoard         = Clone(boardStatus);
                    newBoard[row, column]         = FieldType.Free;
                    newBoard[row - 1, column + 1] = FieldType.WhitePawn;

                    int  newScore = points + CountScore();
                    Node newNode  = new Node(parent, newBoard, newScore); // Make new node
                    listNode.Add(newNode);                                // Add to list of possible moves
                }
            }
            else if (column == 0 && row > 1)
            {
                if (boardStatus[row - 1, column + 1] == FieldType.Free)
                {
                    points = moveEdge;

                    FieldType[,] newBoard         = Clone(boardStatus);
                    newBoard[row, column]         = FieldType.Free;
                    newBoard[row - 1, column + 1] = FieldType.WhitePawn;

                    int  newScore = points + CountScore();
                    Node newNode  = new Node(parent, newBoard, newScore); // Make new node
                    listNode.Add(newNode);                                // Add to list of possible moves
                }
            }
            else if (column == 7 && row > 1)
            {
                if (boardStatus[row - 1, column - 1] == FieldType.Free)
                {
                    points = moveEdge;

                    FieldType[,] newBoard         = Clone(boardStatus);
                    newBoard[row, column]         = FieldType.Free;
                    newBoard[row - 1, column - 1] = FieldType.WhitePawn;

                    int  newScore = points + CountScore();
                    Node newNode  = new Node(parent, newBoard, newScore); // Make new node
                    listNode.Add(newNode);                                // Add to list of possible moves
                }
            }
            else if (column != 0 && column != 7 && row == 1)
            {
                if (boardStatus[row - 1, column - 1] == FieldType.Free && column > 3)
                {
                    points = moveMid;

                    FieldType[,] newBoard         = Clone(boardStatus);
                    newBoard[row, column]         = FieldType.Free;
                    newBoard[row - 1, column - 1] = FieldType.WhiteQueen;

                    int  newScore = points + CountScore();
                    Node newNode  = new Node(parent, newBoard, newScore); // Make new node
                    listNode.Add(newNode);                                // Add to list of possible moves
                }
                else if (boardStatus[row - 1, column - 1] == FieldType.Free && column < 4)
                {
                    points = move;

                    FieldType[,] newBoard         = Clone(boardStatus);
                    newBoard[row, column]         = FieldType.Free;
                    newBoard[row - 1, column - 1] = FieldType.WhiteQueen;

                    int  newScore = points + CountScore();
                    Node newNode  = new Node(parent, newBoard, newScore); // Make new node
                    listNode.Add(newNode);                                // Add to list of possible moves
                }

                if (boardStatus[row - 1, column + 1] == FieldType.Free && column > 3)
                {
                    points = move;

                    FieldType[,] newBoard         = Clone(boardStatus);
                    newBoard[row, column]         = FieldType.Free;
                    newBoard[row - 1, column + 1] = FieldType.WhiteQueen;

                    int  newScore = points + CountScore();
                    Node newNode  = new Node(parent, newBoard, newScore); // Make new node
                    listNode.Add(newNode);                                // Add to list of possible moves
                }
                else if (boardStatus[row - 1, column + 1] == FieldType.Free && column < 4)
                {
                    points = moveMid;

                    FieldType[,] newBoard         = Clone(boardStatus);
                    newBoard[row, column]         = FieldType.Free;
                    newBoard[row - 1, column + 1] = FieldType.WhiteQueen;

                    int  newScore = points + CountScore();
                    Node newNode  = new Node(parent, newBoard, newScore); // Make new node
                    listNode.Add(newNode);                                // Add to list of possible moves
                }
            }
            else if (column == 0 && row == 1)
            {
                if (boardStatus[row - 1, column + 1] == FieldType.Free)
                {
                    points = moveEdge;

                    FieldType[,] newBoard         = Clone(boardStatus);
                    newBoard[row, column]         = FieldType.Free;
                    newBoard[row - 1, column + 1] = FieldType.WhiteQueen;

                    int  newScore = points + CountScore();
                    Node newNode  = new Node(parent, newBoard, newScore); // Make new node
                    listNode.Add(newNode);                                // Add to list of possible moves
                }
            }
            else if (column == 7 && row == 1)
            {
                if (boardStatus[row - 1, column - 1] == FieldType.Free)
                {
                    points = moveEdge;

                    FieldType[,] newBoard         = Clone(boardStatus);
                    newBoard[row, column]         = FieldType.Free;
                    newBoard[row - 1, column - 1] = FieldType.WhiteQueen;

                    int  newScore = points + CountScore();
                    Node newNode  = new Node(parent, newBoard, newScore); // Make new node
                    listNode.Add(newNode);                                // Add to list of possible moves
                }
            }
            return(points);
        }
コード例 #20
0
ファイル: WhiteQueen.cs プロジェクト: damianschmidt/PAMSI
 public FieldType[,] Clone(FieldType[,] board)
 {
     FieldType[,] copyBoard = new FieldType[8, 8];
     Array.Copy(board, copyBoard, board.Length);
     return(copyBoard);
 }
コード例 #21
0
        public void FlamingoNonogramTest()
        {
            var Rows = new List <List <int> >()
            {
                new List <int>()
                {
                    4
                },
                new List <int>()
                {
                    6
                },
                new List <int>()
                {
                    3, 3
                },
                new List <int>()
                {
                    7
                },
                new List <int>()
                {
                    7
                },
                new List <int>()
                {
                    1, 3
                },
                new List <int>()
                {
                    3
                },
                new List <int>()
                {
                    3, 5
                },
                new List <int>()
                {
                    4, 7
                },
                new List <int>()
                {
                    13
                },
                new List <int>()
                {
                    13
                },
                new List <int>()
                {
                    13
                },
                new List <int>()
                {
                    13
                },
                new List <int>()
                {
                    13
                },
                new List <int>()
                {
                    11
                }
            };

            var Columns = new List <List <int> >()
            {
                new List <int>()
                {
                    4
                },
                new List <int>()
                {
                    4
                },
                new List <int>()
                {
                    5, 6
                },
                new List <int>()
                {
                    2, 2, 9
                },
                new List <int>()
                {
                    15
                },
                new List <int>()
                {
                    15
                },
                new List <int>()
                {
                    5, 6
                },
                new List <int>()
                {
                    7
                },
                new List <int>()
                {
                    8
                },
                new List <int>()
                {
                    8
                },
                new List <int>()
                {
                    8
                },
                new List <int>()
                {
                    8
                },
                new List <int>()
                {
                    8
                },
                new List <int>()
                {
                    7
                },
                new List <int>()
                {
                    5
                }
            };

            Puzzle puzzle = new Puzzle(Rows, Columns);

            FieldType[,] matrixSolution =
            {
                { white, white, solid, solid, solid, solid, white, white, white, white, white, white, white, white, white },
                { white, solid, solid, solid, solid, solid, solid, white, white, white, white, white, white, white, white },
                { solid, solid, solid, white, solid, solid, solid, white, white, white, white, white, white, white, white },
                { solid, solid, solid, solid, solid, solid, solid, white, white, white, white, white, white, white, white },
                { solid, solid, solid, solid, solid, solid, solid, white, white, white, white, white, white, white, white },
                { solid, white, white, white, solid, solid, solid, white, white, white, white, white, white, white, white },
                { white, white, white, solid, solid, solid, white, white, white, white, white, white, white, white, white },
                { white, white, white, solid, solid, solid, white, white, solid, solid, solid, solid, solid, white, white },
                { white, white, solid, solid, solid, solid, white, solid, solid, solid, solid, solid, solid, solid, white },
                { white, white, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid },
                { white, white, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid },
                { white, white, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid },
                { white, white, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid },
                { white, white, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid },
                { white, white, white, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid, solid, white },
            };

            var solvedPuzzle = SolverEngine.Solve(puzzle);

            var solvedPuzzleMatrix = solvedPuzzle.Matrix.Fields;

            TestResult(matrixSolution, solvedPuzzleMatrix);
        }
コード例 #22
0
        public void RoseNonogramTest()
        {
            var Rows = new List <List <int> >()
            {
                new List <int>()
                {
                    5
                },
                new List <int>()
                {
                    5
                },
                new List <int>()
                {
                    5
                },
                new List <int>()
                {
                    3
                },
                new List <int>()
                {
                    1
                },
            };

            var Columns = new List <List <int> >()
            {
                new List <int>()
                {
                    3
                },
                new List <int>()
                {
                    4
                },
                new List <int>()
                {
                    5
                },
                new List <int>()
                {
                    4
                },
                new List <int>()
                {
                    3
                },
            };

            Puzzle puzzle = new Puzzle(Rows, Columns);

            FieldType[,] matrixSolution =
            {
                { solid, solid, solid, solid, solid },
                { solid, solid, solid, solid, solid },
                { solid, solid, solid, solid, solid },
                { white, solid, solid, solid, white },
                { white, white, solid, white, white },
            };

            var solvedPuzzle = SolverEngine.Solve(puzzle);

            var solvedPuzzleMatrix = solvedPuzzle.Matrix.Fields;

            TestResult(matrixSolution, solvedPuzzleMatrix);
        }
コード例 #23
0
ファイル: WhiteQueen.cs プロジェクト: damianschmidt/PAMSI
        private int Move()
        {
            int points = 0;

            if (column != 0 && column != 7 && row != 0 && row != 7)
            {
                if (boardStatus[row + 1, column - 1] == FieldType.Free)
                {
                    points = move;

                    FieldType[,] newBoard         = Clone(boardStatus);
                    newBoard[row, column]         = FieldType.Free;
                    newBoard[row + 1, column - 1] = FieldType.WhiteQueen;

                    int  newScore = points + CountScore();
                    Node newNode  = new Node(parent, newBoard, newScore); // Make new node
                    listNode.Add(newNode);                                // Add to list of possible moves
                }

                if (boardStatus[row + 1, column + 1] == FieldType.Free)
                {
                    points = move;

                    FieldType[,] newBoard         = Clone(boardStatus);
                    newBoard[row, column]         = FieldType.Free;
                    newBoard[row + 1, column + 1] = FieldType.WhiteQueen;

                    int  newScore = points + CountScore();
                    Node newNode  = new Node(parent, newBoard, newScore); // Make new node
                    listNode.Add(newNode);                                // Add to list of possible moves
                }

                if (boardStatus[row - 1, column + 1] == FieldType.Free)
                {
                    points = move;

                    FieldType[,] newBoard         = Clone(boardStatus);
                    newBoard[row, column]         = FieldType.Free;
                    newBoard[row - 1, column + 1] = FieldType.WhiteQueen;

                    int  newScore = points + CountScore();
                    Node newNode  = new Node(parent, newBoard, newScore); // Make new node
                    listNode.Add(newNode);                                // Add to list of possible moves
                }

                if (boardStatus[row - 1, column - 1] == FieldType.Free)
                {
                    points = move;

                    FieldType[,] newBoard         = Clone(boardStatus);
                    newBoard[row, column]         = FieldType.Free;
                    newBoard[row - 1, column - 1] = FieldType.WhiteQueen;

                    int  newScore = points + CountScore();
                    Node newNode  = new Node(parent, newBoard, newScore); // Make new node
                    listNode.Add(newNode);                                // Add to list of possible moves
                }
            } // Center
            else if (column == 0 && row == 0)
            {
                if (boardStatus[row + 1, column + 1] == FieldType.Free)
                {
                    points = moveEdge;

                    FieldType[,] newBoard         = Clone(boardStatus);
                    newBoard[row, column]         = FieldType.Free;
                    newBoard[row + 1, column + 1] = FieldType.WhiteQueen;

                    int  newScore = points + CountScore();
                    Node newNode  = new Node(parent, newBoard, newScore); // Make new node
                    listNode.Add(newNode);                                // Add to list of possible moves
                }
            }// Left-Top Corner
            else if (column == 7 && row == 7)
            {
                if (boardStatus[row - 1, column - 1] == FieldType.Free)
                {
                    points = moveEdge;

                    FieldType[,] newBoard         = Clone(boardStatus);
                    newBoard[row, column]         = FieldType.Free;
                    newBoard[row - 1, column - 1] = FieldType.WhiteQueen;

                    int  newScore = points + CountScore();
                    Node newNode  = new Node(parent, newBoard, newScore); // Make new node
                    listNode.Add(newNode);                                // Add to list of possible moves
                }
            } // Right-Bottom Corner
            else if (column == 0)
            {
                if (boardStatus[row + 1, column + 1] == FieldType.Free)
                {
                    points = moveEdge;

                    FieldType[,] newBoard         = Clone(boardStatus);
                    newBoard[row, column]         = FieldType.Free;
                    newBoard[row + 1, column + 1] = FieldType.WhiteQueen;

                    int  newScore = points + CountScore();
                    Node newNode  = new Node(parent, newBoard, newScore); // Make new node
                    listNode.Add(newNode);                                // Add to list of possible moves
                }

                if (boardStatus[row - 1, column + 1] == FieldType.Free)
                {
                    points = moveEdge;

                    FieldType[,] newBoard         = Clone(boardStatus);
                    newBoard[row, column]         = FieldType.Free;
                    newBoard[row - 1, column + 1] = FieldType.WhiteQueen;

                    int  newScore = points + CountScore();
                    Node newNode  = new Node(parent, newBoard, newScore); // Make new node
                    listNode.Add(newNode);                                // Add to list of possible moves
                }
            }// Left
            else if (column == 7)
            {
                if (boardStatus[row + 1, column - 1] == FieldType.Free)
                {
                    points = moveEdge;

                    FieldType[,] newBoard         = Clone(boardStatus);
                    newBoard[row, column]         = FieldType.Free;
                    newBoard[row + 1, column - 1] = FieldType.WhiteQueen;

                    int  newScore = points + CountScore();
                    Node newNode  = new Node(parent, newBoard, newScore); // Make new node
                    listNode.Add(newNode);                                // Add to list of possible moves
                }

                if (boardStatus[row - 1, column - 1] == FieldType.Free)
                {
                    points = moveEdge;

                    FieldType[,] newBoard         = Clone(boardStatus);
                    newBoard[row, column]         = FieldType.Free;
                    newBoard[row - 1, column - 1] = FieldType.WhiteQueen;

                    int  newScore = points + CountScore();
                    Node newNode  = new Node(parent, newBoard, newScore); // Make new node
                    listNode.Add(newNode);                                // Add to list of possible moves
                }
            }// Right
            else if (row == 0)
            {
                if (boardStatus[row + 1, column - 1] == FieldType.Free)
                {
                    points = moveEdge;

                    FieldType[,] newBoard         = Clone(boardStatus);
                    newBoard[row, column]         = FieldType.Free;
                    newBoard[row + 1, column - 1] = FieldType.WhiteQueen;

                    int  newScore = points + CountScore();
                    Node newNode  = new Node(parent, newBoard, newScore); // Make new node
                    listNode.Add(newNode);                                // Add to list of possible moves
                }

                if (boardStatus[row + 1, column + 1] == FieldType.Free)
                {
                    points = moveEdge;

                    FieldType[,] newBoard         = Clone(boardStatus);
                    newBoard[row, column]         = FieldType.Free;
                    newBoard[row + 1, column + 1] = FieldType.WhiteQueen;

                    int  newScore = points + CountScore();
                    Node newNode  = new Node(parent, newBoard, newScore); // Make new node
                    listNode.Add(newNode);                                // Add to list of possible moves
                }
            }// Top
            else
            {
                if (boardStatus[row - 1, column - 1] == FieldType.Free)
                {
                    points = moveEdge;

                    FieldType[,] newBoard         = Clone(boardStatus);
                    newBoard[row, column]         = FieldType.Free;
                    newBoard[row - 1, column - 1] = FieldType.WhiteQueen;

                    int  newScore = points + CountScore();
                    Node newNode  = new Node(parent, newBoard, newScore); // Make new node
                    listNode.Add(newNode);                                // Add to list of possible moves
                }

                if (boardStatus[row - 1, column + 1] == FieldType.Free)
                {
                    points = moveEdge;

                    FieldType[,] newBoard         = Clone(boardStatus);
                    newBoard[row, column]         = FieldType.Free;
                    newBoard[row - 1, column + 1] = FieldType.WhiteQueen;

                    int  newScore = points + CountScore();
                    Node newNode  = new Node(parent, newBoard, newScore); // Make new node
                    listNode.Add(newNode);                                // Add to list of possible moves
                }
            }// Bottom
            return(points);
        }
コード例 #24
0
ファイル: WhiteQueen.cs プロジェクト: damianschmidt/PAMSI
        private int Hit(FieldType[,] board, int row, int column)
        {
            int points = 0;

            if (column > 1 && column < 6 && row < 6 && row > 1) // Check if hit haven't make you out of board
            {
                if (board[row + 1, column - 1] == FieldType.BlackPawn || board[row + 1, column - 1] == FieldType.BlackQueen)
                {
                    if (board[row + 2, column - 2] == FieldType.Free)
                    {
                        points = hit;

                        FieldType[,] newBoard         = Clone(board);
                        newBoard[row, column]         = FieldType.Free;
                        newBoard[row + 1, column - 1] = FieldType.Free;
                        newBoard[row + 2, column - 2] = FieldType.WhiteQueen;
                        boardAfter = Clone(newBoard);

                        // Multicapturing
                        if (Hit(Clone(boardAfter), row + 2, column - 2) != 0)
                        {
                            points = points + hitMulti;
                        }

                        int  newScore = points + CountScore();
                        Node newNode  = new Node(parent, boardAfter, newScore); // Make new node
                        listNode.Add(newNode);                                  // Add to list of possible moves
                    }
                }
                if (board[row + 1, column + 1] == FieldType.BlackPawn || board[row + 1, column + 1] == FieldType.BlackQueen)
                {
                    if (board[row + 2, column + 2] == FieldType.Free)
                    {
                        points = hit;

                        FieldType[,] newBoard         = Clone(board);
                        newBoard[row, column]         = FieldType.Free;
                        newBoard[row + 1, column + 1] = FieldType.Free;
                        newBoard[row + 2, column + 2] = FieldType.WhiteQueen;
                        boardAfter = Clone(newBoard);

                        // Multicapturing
                        if (Hit(Clone(boardAfter), row + 2, column + 2) != 0)
                        {
                            points = points + hitMulti;
                        }

                        int  newScore = points + CountScore();
                        Node newNode  = new Node(parent, boardAfter, newScore); // Make new node
                        listNode.Add(newNode);                                  // Add to list of possible moves
                    }
                }
                if (board[row - 1, column - 1] == FieldType.BlackPawn || board[row - 1, column - 1] == FieldType.BlackQueen)
                {
                    if (board[row - 2, column - 2] == FieldType.Free)
                    {
                        points = hit;

                        FieldType[,] newBoard         = Clone(board);
                        newBoard[row, column]         = FieldType.Free;
                        newBoard[row - 1, column - 1] = FieldType.Free;
                        newBoard[row - 2, column - 2] = FieldType.WhiteQueen;
                        boardAfter = Clone(newBoard);

                        // Multicapturing
                        if (Hit(Clone(boardAfter), row - 2, column - 2) != 0)
                        {
                            points = points + hitMulti;
                        }

                        int  newScore = points + CountScore();
                        Node newNode  = new Node(parent, boardAfter, newScore); // Make new node
                        listNode.Add(newNode);                                  // Add to list of possible moves
                    }
                }
                if (board[row - 1, column + 1] == FieldType.BlackPawn || board[row - 1, column + 1] == FieldType.BlackQueen)
                {
                    if (board[row - 2, column + 2] == FieldType.Free)
                    {
                        points = hit;

                        FieldType[,] newBoard         = Clone(board);
                        newBoard[row, column]         = FieldType.Free;
                        newBoard[row - 1, column + 1] = FieldType.Free;
                        newBoard[row - 2, column + 2] = FieldType.WhiteQueen;
                        boardAfter = Clone(newBoard);

                        // Multicapturing
                        if (Hit(Clone(boardAfter), row - 2, column + 2) != 0)
                        {
                            points = points + hitMulti;
                        }

                        int  newScore = points + CountScore();
                        Node newNode  = new Node(parent, boardAfter, newScore); // Make new node
                        listNode.Add(newNode);                                  // Add to list of possible moves
                    }
                }
            } // Center
            else if (column < 2 && row < 2) // Check if hit haven't make you out of board
            {
                if (board[row + 1, column + 1] == FieldType.BlackPawn || board[row + 1, column + 1] == FieldType.BlackQueen)
                {
                    if (board[row + 2, column + 2] == FieldType.Free)
                    {
                        points = hitEdge;

                        FieldType[,] newBoard         = Clone(board);
                        newBoard[row, column]         = FieldType.Free;
                        newBoard[row + 1, column + 1] = FieldType.Free;
                        newBoard[row + 2, column + 2] = FieldType.WhiteQueen;
                        boardAfter = Clone(newBoard);

                        // Multicapturing
                        if (Hit(Clone(boardAfter), row + 2, column + 2) != 0)
                        {
                            points = points + hitMulti;
                        }

                        int  newScore = points + CountScore();
                        Node newNode  = new Node(parent, boardAfter, newScore); // Make new node
                        listNode.Add(newNode);                                  // Add to list of possible moves
                    }
                }
            } // Left-Top Corner
            else if (column > 5 && row < 2)
            {
                if (board[row + 1, column - 1] == FieldType.BlackPawn || board[row + 1, column - 1] == FieldType.BlackQueen)
                {
                    if (board[row + 2, column - 2] == FieldType.Free)
                    {
                        points = hitEdge;

                        FieldType[,] newBoard         = Clone(board);
                        newBoard[row, column]         = FieldType.Free;
                        newBoard[row + 1, column - 1] = FieldType.Free;
                        newBoard[row + 2, column - 2] = FieldType.WhiteQueen;
                        boardAfter = Clone(newBoard);

                        // Multicapturing
                        if (Hit(Clone(boardAfter), row + 2, column - 2) != 0)
                        {
                            points = points + hitMulti;
                        }

                        int  newScore = points + CountScore();
                        Node newNode  = new Node(parent, boardAfter, newScore); // Make new node
                        listNode.Add(newNode);                                  // Add to list of possible moves
                    }
                }
            } // Right-Top Corner
            else if (row < 2)
            {
                if (board[row + 1, column - 1] == FieldType.BlackPawn || board[row + 1, column - 1] == FieldType.BlackQueen)
                {
                    if (board[row + 2, column - 2] == FieldType.Free)
                    {
                        points = hitEdge;

                        FieldType[,] newBoard         = Clone(board);
                        newBoard[row, column]         = FieldType.Free;
                        newBoard[row + 1, column - 1] = FieldType.Free;
                        newBoard[row + 2, column - 2] = FieldType.WhiteQueen;
                        boardAfter = Clone(newBoard);

                        // Multicapturing
                        if (Hit(Clone(boardAfter), row + 2, column - 2) != 0)
                        {
                            points = points + hitMulti;
                        }

                        int  newScore = points + CountScore();
                        Node newNode  = new Node(parent, boardAfter, newScore); // Make new node
                        listNode.Add(newNode);                                  // Add to list of possible moves
                    }
                }
                if (board[row + 1, column + 1] == FieldType.BlackPawn || board[row + 1, column + 1] == FieldType.BlackQueen)
                {
                    if (board[row + 2, column + 2] == FieldType.Free)
                    {
                        points = hitEdge;

                        FieldType[,] newBoard         = Clone(board);
                        newBoard[row, column]         = FieldType.Free;
                        newBoard[row + 1, column + 1] = FieldType.Free;
                        newBoard[row + 2, column + 2] = FieldType.WhiteQueen;
                        boardAfter = Clone(newBoard);

                        // Multicapturing
                        if (Hit(Clone(boardAfter), row + 2, column + 2) != 0)
                        {
                            points = points + hitMulti;
                        }

                        int  newScore = points + CountScore();
                        Node newNode  = new Node(parent, boardAfter, newScore); // Make new node
                        listNode.Add(newNode);                                  // Add to list of possible moves
                    }
                }
            }// Top
            else if (column < 2 && row > 5)
            {
                if (board[row - 1, column + 1] == FieldType.BlackPawn || board[row - 1, column + 1] == FieldType.BlackQueen)
                {
                    if (board[row - 2, column + 2] == FieldType.Free)
                    {
                        points = hitEdge;

                        FieldType[,] newBoard         = Clone(board);
                        newBoard[row, column]         = FieldType.Free;
                        newBoard[row - 1, column + 1] = FieldType.Free;
                        newBoard[row - 2, column + 2] = FieldType.WhiteQueen;
                        boardAfter = Clone(newBoard);

                        // Multicapturing
                        if (Hit(Clone(boardAfter), row - 2, column + 2) != 0)
                        {
                            points = points + hitMulti;
                        }

                        int  newScore = points + CountScore();
                        Node newNode  = new Node(parent, boardAfter, newScore); // Make new node
                        listNode.Add(newNode);                                  // Add to list of possible moves
                    }
                }
            } // Bottom-Left Corner
            else if (column > 5 && row > 5)
            {
                if (board[row - 1, column - 1] == FieldType.BlackPawn || board[row - 1, column - 1] == FieldType.BlackQueen)
                {
                    if (board[row - 2, column - 2] == FieldType.Free)
                    {
                        points = hitEdge;

                        FieldType[,] newBoard         = Clone(board);
                        newBoard[row, column]         = FieldType.Free;
                        newBoard[row - 1, column - 1] = FieldType.Free;
                        newBoard[row - 2, column - 2] = FieldType.WhiteQueen;
                        boardAfter = Clone(newBoard);

                        // Multicapturing
                        if (Hit(Clone(boardAfter), row - 2, column - 2) != 0)
                        {
                            points = points + hitMulti;
                        }

                        int  newScore = points + CountScore();
                        Node newNode  = new Node(parent, boardAfter, newScore); // Make new node
                        listNode.Add(newNode);                                  // Add to list of possible moves
                    }
                }
            } // Bottom-Right Corner
            else if (row > 5)
            {
                if (board[row - 1, column - 1] == FieldType.BlackPawn || board[row - 1, column - 1] == FieldType.BlackQueen)
                {
                    if (board[row - 2, column - 2] == FieldType.Free)
                    {
                        points = hitEdge;

                        FieldType[,] newBoard         = Clone(board);
                        newBoard[row, column]         = FieldType.Free;
                        newBoard[row - 1, column - 1] = FieldType.Free;
                        newBoard[row - 2, column - 2] = FieldType.WhiteQueen;
                        boardAfter = Clone(newBoard);

                        // Multicapturing
                        if (Hit(Clone(boardAfter), row - 2, column - 2) != 0)
                        {
                            points = points + hitMulti;
                        }

                        int  newScore = points + CountScore();
                        Node newNode  = new Node(parent, boardAfter, newScore); // Make new node
                        listNode.Add(newNode);                                  // Add to list of possible moves
                    }
                }
                if (board[row - 1, column + 1] == FieldType.BlackPawn || board[row - 1, column + 1] == FieldType.BlackQueen)
                {
                    if (board[row - 2, column + 2] == FieldType.Free)
                    {
                        points = hitEdge;

                        FieldType[,] newBoard         = Clone(board);
                        newBoard[row, column]         = FieldType.Free;
                        newBoard[row - 1, column + 1] = FieldType.Free;
                        newBoard[row - 2, column + 2] = FieldType.WhiteQueen;
                        boardAfter = Clone(newBoard);

                        // Multicapturing
                        if (Hit(Clone(boardAfter), row - 2, column + 2) != 0)
                        {
                            points = points + hitMulti;
                        }

                        int  newScore = points + CountScore();
                        Node newNode  = new Node(parent, boardAfter, newScore); // Make new node
                        listNode.Add(newNode);                                  // Add to list of possible moves
                    }
                }
            } // Bottom
            else if (column < 2)
            {
                if (board[row - 1, column + 1] == FieldType.BlackPawn || board[row - 1, column + 1] == FieldType.BlackQueen)
                {
                    if (board[row - 2, column + 2] == FieldType.Free)
                    {
                        points = hitEdge;

                        FieldType[,] newBoard         = Clone(board);
                        newBoard[row, column]         = FieldType.Free;
                        newBoard[row - 1, column + 1] = FieldType.Free;
                        newBoard[row - 2, column + 2] = FieldType.WhiteQueen;
                        boardAfter = Clone(newBoard);

                        // Multicapturing
                        if (Hit(Clone(boardAfter), row - 2, column + 2) != 0)
                        {
                            points = points + hitMulti;
                        }

                        int  newScore = points + CountScore();
                        Node newNode  = new Node(parent, boardAfter, newScore); // Make new node
                        listNode.Add(newNode);                                  // Add to list of possible moves
                    }
                }
                if (board[row + 1, column + 1] == FieldType.BlackPawn || board[row + 1, column + 1] == FieldType.BlackQueen)
                {
                    if (board[row + 2, column + 2] == FieldType.Free)
                    {
                        points = hitEdge;

                        FieldType[,] newBoard         = Clone(board);
                        newBoard[row, column]         = FieldType.Free;
                        newBoard[row + 1, column + 1] = FieldType.Free;
                        newBoard[row + 2, column + 2] = FieldType.WhiteQueen;
                        boardAfter = Clone(newBoard);

                        // Multicapturing
                        if (Hit(Clone(boardAfter), row + 2, column + 2) != 0)
                        {
                            points = points + hitMulti;
                        }

                        int  newScore = points + CountScore();
                        Node newNode  = new Node(parent, boardAfter, newScore); // Make new node
                        listNode.Add(newNode);                                  // Add to list of possible moves
                    }
                }
            } // Leftside
            else if (column > 5)
            {
                if (board[row - 1, column - 1] == FieldType.BlackPawn || board[row - 1, column - 1] == FieldType.BlackQueen)
                {
                    if (board[row - 2, column - 2] == FieldType.Free)
                    {
                        points = hitEdge;

                        FieldType[,] newBoard         = Clone(board);
                        newBoard[row, column]         = FieldType.Free;
                        newBoard[row - 1, column - 1] = FieldType.Free;
                        newBoard[row - 2, column - 2] = FieldType.WhiteQueen;
                        boardAfter = Clone(newBoard);

                        // Multicapturing
                        if (Hit(Clone(boardAfter), row - 2, column - 2) != 0)
                        {
                            points = points + hitMulti;
                        }

                        int  newScore = points + CountScore();
                        Node newNode  = new Node(parent, boardAfter, newScore); // Make new node
                        listNode.Add(newNode);                                  // Add to list of possible moves
                    }
                }
                if (board[row + 1, column - 1] == FieldType.BlackPawn || board[row + 1, column - 1] == FieldType.BlackQueen)
                {
                    if (board[row + 2, column - 2] == FieldType.Free)
                    {
                        points = hitEdge;

                        FieldType[,] newBoard         = Clone(board);
                        newBoard[row, column]         = FieldType.Free;
                        newBoard[row + 1, column - 1] = FieldType.Free;
                        newBoard[row + 2, column - 2] = FieldType.WhiteQueen;
                        boardAfter = Clone(newBoard);

                        // Multicapturing
                        if (Hit(Clone(boardAfter), row + 2, column - 2) != 0)
                        {
                            points = points + hitMulti;
                        }

                        int  newScore = points + CountScore();
                        Node newNode  = new Node(parent, boardAfter, newScore); // Make new node
                        listNode.Add(newNode);                                  // Add to list of possible moves
                    }
                }
            }// Rightside
            return(points);
        }
コード例 #25
0
 public RightWallTracingStrategy(MapVector vertexVertexPosition, FieldType[,] fields)
 {
     _vertexPosition = vertexVertexPosition;
     _fields         = fields;
 }
コード例 #26
0
 public UpWallTracingStrategy(MapVector fieldPosition, FieldType[,] fields)
 {
     _fieldPosition = fieldPosition;
     _fields        = fields;
 }
コード例 #27
0
ファイル: tree.cs プロジェクト: damianschmidt/PAMSI
 public Node(Node parent = null, FieldType[,] currentBoard = null, int score = 0)
 {
     this.parent       = parent;
     this.currentBoard = currentBoard;
     this.score        = score;
 }
コード例 #28
0
        private int Hit(FieldType[,] board, int row, int column)
        {
            int points = 0;

            if (column > 1 && column < 4 && row > 2) // Check if hit haven't make you out of board
            {
                if (board[row - 1, column - 1] == FieldType.BlackPawn || board[row - 1, column - 1] == FieldType.BlackQueen)
                {
                    if (board[row - 2, column - 2] == FieldType.Free)
                    {
                        points = hit;

                        FieldType[,] newBoard         = Clone(board);
                        newBoard[row, column]         = FieldType.Free;
                        newBoard[row - 1, column - 1] = FieldType.Free;
                        newBoard[row - 2, column - 2] = FieldType.WhitePawn;
                        boardAfter = Clone(newBoard);

                        // Multicapturing
                        if (Hit(Clone(boardAfter), row - 2, column - 2) != 0)
                        {
                            points = points + hitMulti;
                        }

                        int  newScore = points + CountScore();
                        Node newNode  = new Node(parent, boardAfter, newScore); // Make new node
                        listNode.Add(newNode);                                  // Add to list of possible moves
                    }
                }
                if (board[row - 1, column + 1] == FieldType.BlackPawn || board[row - 1, column + 1] == FieldType.BlackQueen)
                {
                    if (board[row - 2, column + 2] == FieldType.Free)
                    {
                        points = hitMid;

                        FieldType[,] newBoard         = Clone(board);
                        newBoard[row, column]         = FieldType.Free;
                        newBoard[row - 1, column + 1] = FieldType.Free;
                        newBoard[row - 2, column + 2] = FieldType.WhitePawn;
                        boardAfter = Clone(newBoard);

                        // Multicapturing
                        if (Hit(Clone(boardAfter), row - 2, column + 2) != 0)
                        {
                            points = points + hitMulti;
                        }

                        int  newScore = points + CountScore();
                        Node newNode  = new Node(parent, boardAfter, newScore); // Make new node
                        listNode.Add(newNode);                                  // Add to list of possible moves
                    }
                }
            }
            else if (column > 3 && column < 6 && row > 2) // Check if hit haven't make you out of board
            {
                if (board[row - 1, column - 1] == FieldType.BlackPawn || board[row - 1, column - 1] == FieldType.BlackQueen)
                {
                    if (board[row - 2, column - 2] == FieldType.Free)
                    {
                        points = hitMid;

                        FieldType[,] newBoard         = Clone(board);
                        newBoard[row, column]         = FieldType.Free;
                        newBoard[row - 1, column - 1] = FieldType.Free;
                        newBoard[row - 2, column - 2] = FieldType.WhitePawn;
                        boardAfter = Clone(newBoard);

                        // Multicapturing
                        if (Hit(Clone(boardAfter), row - 2, column - 2) != 0)
                        {
                            points = points + hitMulti;
                        }

                        int  newScore = points + CountScore();
                        Node newNode  = new Node(parent, boardAfter, newScore); // Make new node
                        listNode.Add(newNode);                                  // Add to list of possible moves
                    }
                }
                if (board[row - 1, column + 1] == FieldType.BlackPawn || board[row - 1, column + 1] == FieldType.BlackQueen)
                {
                    if (board[row - 2, column + 2] == FieldType.Free)
                    {
                        points = hit;

                        FieldType[,] newBoard         = Clone(board);
                        newBoard[row, column]         = FieldType.Free;
                        newBoard[row - 1, column + 1] = FieldType.Free;
                        newBoard[row - 2, column + 2] = FieldType.WhitePawn;
                        boardAfter = Clone(newBoard);

                        // Multicapturing
                        if (Hit(Clone(boardAfter), row - 2, column + 2) != 0)
                        {
                            points = points + hitMulti;
                        }

                        int  newScore = points + CountScore();
                        Node newNode  = new Node(parent, boardAfter, newScore); // Make new node
                        listNode.Add(newNode);                                  // Add to list of possible moves
                    }
                }
            }
            else if (column < 2 && row > 2)
            {
                if (board[row - 1, column + 1] == FieldType.BlackPawn || board[row - 1, column + 1] == FieldType.BlackQueen)
                {
                    if (board[row - 2, column + 2] == FieldType.Free)
                    {
                        points = hitEdge;

                        FieldType[,] newBoard         = Clone(board);
                        newBoard[row, column]         = FieldType.Free;
                        newBoard[row - 1, column + 1] = FieldType.Free;
                        newBoard[row - 2, column + 2] = FieldType.WhitePawn;
                        boardAfter = Clone(newBoard);

                        // Multicapturing
                        if (Hit(Clone(boardAfter), row - 2, column + 2) != 0)
                        {
                            points = points + hitMulti;
                        }

                        int  newScore = points + CountScore();
                        Node newNode  = new Node(parent, boardAfter, newScore); // Make new node
                        listNode.Add(newNode);                                  // Add to list of possible moves
                    }
                }
            }
            else if (row > 2)
            {
                if (board[row - 1, column - 1] == FieldType.BlackPawn || board[row - 1, column - 1] == FieldType.BlackQueen)
                {
                    if (board[row - 2, column - 2] == FieldType.Free)
                    {
                        points = hitEdge;

                        FieldType[,] newBoard         = Clone(board);
                        newBoard[row, column]         = FieldType.Free;
                        newBoard[row - 1, column - 1] = FieldType.Free;
                        newBoard[row - 2, column - 2] = FieldType.WhitePawn;
                        boardAfter = Clone(newBoard);

                        // Multicapturing
                        if (Hit(Clone(boardAfter), row - 2, column - 2) != 0)
                        {
                            points = points + hitMulti;
                        }

                        int  newScore = points + CountScore();
                        Node newNode  = new Node(parent, boardAfter, newScore); // Make new node
                        listNode.Add(newNode);                                  // Add to list of possible moves
                    }
                }
            }
            else if (column > 1 && column < 4 && row == 2) // Check if hit haven't make you out of board
            {
                if (board[row - 1, column - 1] == FieldType.BlackPawn || board[row - 1, column - 1] == FieldType.BlackQueen)
                {
                    if (board[row - 2, column - 2] == FieldType.Free)
                    {
                        points = hit;

                        FieldType[,] newBoard         = Clone(board);
                        newBoard[row, column]         = FieldType.Free;
                        newBoard[row - 1, column - 1] = FieldType.Free;
                        newBoard[row - 2, column - 2] = FieldType.WhiteQueen;
                        boardAfter = Clone(newBoard);

                        // Multicapturing
                        if (Hit(Clone(boardAfter), row - 2, column - 2) != 0)
                        {
                            points = points + hitMulti;
                        }

                        int  newScore = points + CountScore();
                        Node newNode  = new Node(parent, boardAfter, newScore); // Make new node
                        listNode.Add(newNode);                                  // Add to list of possible moves
                    }
                }
                if (board[row - 1, column + 1] == FieldType.BlackPawn || board[row - 1, column + 1] == FieldType.BlackQueen)
                {
                    if (board[row - 2, column + 2] == FieldType.Free)
                    {
                        points = hitMid;

                        FieldType[,] newBoard         = Clone(board);
                        newBoard[row, column]         = FieldType.Free;
                        newBoard[row - 1, column + 1] = FieldType.Free;
                        newBoard[row - 2, column + 2] = FieldType.WhiteQueen;
                        boardAfter = Clone(newBoard);

                        // Multicapturing
                        if (Hit(Clone(boardAfter), row - 2, column + 2) != 0)
                        {
                            points = points + hitMulti;
                        }

                        int  newScore = points + CountScore();
                        Node newNode  = new Node(parent, boardAfter, newScore); // Make new node
                        listNode.Add(newNode);                                  // Add to list of possible moves
                    }
                }
            }
            else if (column > 3 && column < 6 && row == 2) // Check if hit haven't make you out of board
            {
                if (board[row - 1, column - 1] == FieldType.BlackPawn || board[row - 1, column - 1] == FieldType.BlackQueen)
                {
                    if (board[row - 2, column - 2] == FieldType.Free)
                    {
                        points = hitMid;

                        FieldType[,] newBoard         = Clone(board);
                        newBoard[row, column]         = FieldType.Free;
                        newBoard[row - 1, column - 1] = FieldType.Free;
                        newBoard[row - 2, column - 2] = FieldType.WhiteQueen;
                        boardAfter = Clone(newBoard);

                        // Multicapturing
                        if (Hit(Clone(boardAfter), row - 2, column - 2) != 0)
                        {
                            points = points + hitMulti;
                        }

                        int  newScore = points + CountScore();
                        Node newNode  = new Node(parent, boardAfter, newScore); // Make new node
                        listNode.Add(newNode);                                  // Add to list of possible moves
                    }
                }
                if (board[row - 1, column + 1] == FieldType.BlackPawn || board[row - 1, column + 1] == FieldType.BlackQueen)
                {
                    if (board[row - 2, column + 2] == FieldType.Free)
                    {
                        points = hit;

                        FieldType[,] newBoard         = Clone(board);
                        newBoard[row, column]         = FieldType.Free;
                        newBoard[row - 1, column + 1] = FieldType.Free;
                        newBoard[row - 2, column + 2] = FieldType.WhiteQueen;
                        boardAfter = Clone(newBoard);

                        // Multicapturing
                        if (Hit(Clone(boardAfter), row - 2, column + 2) != 0)
                        {
                            points = points + hitMulti;
                        }

                        int  newScore = points + CountScore();
                        Node newNode  = new Node(parent, boardAfter, newScore); // Make new node
                        listNode.Add(newNode);                                  // Add to list of possible moves
                    }
                }
            }
            else if (column < 2 && row == 2)
            {
                if (board[row - 1, column + 1] == FieldType.BlackPawn || board[row - 1, column + 1] == FieldType.BlackQueen)
                {
                    if (board[row - 2, column + 2] == FieldType.Free)
                    {
                        points = hitEdge;

                        FieldType[,] newBoard         = Clone(board);
                        newBoard[row, column]         = FieldType.Free;
                        newBoard[row - 1, column + 1] = FieldType.Free;
                        newBoard[row - 2, column + 2] = FieldType.WhiteQueen;
                        boardAfter = Clone(newBoard);

                        // Multicapturing
                        if (Hit(Clone(boardAfter), row - 2, column + 2) != 0)
                        {
                            points = points + hitMulti;
                        }

                        int  newScore = points + CountScore();
                        Node newNode  = new Node(parent, boardAfter, newScore); // Make new node
                        listNode.Add(newNode);                                  // Add to list of possible moves
                    }
                }
            }
            else if (row == 2)
            {
                if (board[row - 1, column - 1] == FieldType.BlackPawn || board[row - 1, column - 1] == FieldType.BlackQueen)
                {
                    if (board[row - 2, column - 2] == FieldType.Free)
                    {
                        points = hitEdge;

                        FieldType[,] newBoard         = Clone(board);
                        newBoard[row, column]         = FieldType.Free;
                        newBoard[row - 1, column - 1] = FieldType.Free;
                        newBoard[row - 2, column - 2] = FieldType.WhiteQueen;
                        boardAfter = Clone(newBoard);

                        // Multicapturing
                        if (Hit(Clone(boardAfter), row - 2, column - 2) != 0)
                        {
                            points = points + hitMulti;
                        }

                        int  newScore = points + CountScore();
                        Node newNode  = new Node(parent, boardAfter, newScore); // Make new node
                        listNode.Add(newNode);                                  // Add to list of possible moves
                    }
                }
            }
            return(points);
        }