コード例 #1
0
ファイル: loopConfig.cs プロジェクト: randomdude/DoktorChess
 public loopConfig(squarePos position, vectorDirection dir)
 {
     switch (dir)
     {
         case vectorDirection.left:
             startX = position.x - 1;
             finishX = -1;
             startY = position.y;
             finishY = startY + 1;
             directionX = -1;
             directionY = 0;
             break;
         case vectorDirection.right:
             startX = position.x + 1;
             finishX = baseBoard.sizeX;
             startY = position.y;
             finishY = startY + 1;
             directionX = +1;
             directionY = 0;
             break;
         case vectorDirection.up:
             startY = position.y + 1;
             finishY = baseBoard.sizeY;
             startX = position.x;
             finishX = position.x + 1;
             directionX = 0;
             directionY = +1;
             break;
         case vectorDirection.down:
             startY = position.y - 1;
             finishY = -1;
             startX = position.x;
             finishX = position.x + 1;
             directionX = 0;
             directionY = -1;
             break;
         case vectorDirection.leftup:
             startY = position.y + 1;
             startX = position.x - 1;
             finishY = baseBoard.sizeY;
             finishX = -1;
             directionY = +1;
             directionX = -1;
             break;
         case vectorDirection.leftdown:
             startY = position.y - 1;
             startX = position.x - 1;
             finishY = -1;
             finishX = -1;
             directionY = -1;
             directionX = -1;
             break;
         case vectorDirection.rightup:
             startY = position.y + 1;
             startX = position.x + 1;
             finishY = baseBoard.sizeY;
             finishX = baseBoard.sizeX;
             directionY = +1;
             directionX = +1;
             break;
         case vectorDirection.rightdown:
             startY = position.y - 1;
             startX = position.x + 1;
             finishY = -1;
             finishX = baseBoard.sizeX;
             directionY = -1;
             directionX = +1;
             break;
         default:
             throw new ArgumentOutOfRangeException("dir");
     }
 }
コード例 #2
0
ファイル: square.cs プロジェクト: randomdude/DoktorChess
        /// <summary>
        /// Find moves in a given direction, including captures
        /// </summary>
        /// <param name="addTo"></param>
        /// <param name="onThis">The board to move on</param>
        /// <param name="dir">The vectorDirection to move in</param>
        /// <returns>A List&lt;move&gt; of moves</returns>
        public sizableArray<move> getMovesForVector(sizableArray<move> addTo, baseBoard onThis, vectorDirection dir)
        {
            if (addTo == null)
                addTo = new sizableArray<move>(8);

            loopConfig lcfg = new loopConfig(position, dir);

            int x = lcfg.startX;
            int y = lcfg.startY;
            while ((x != lcfg.finishX) && (y != lcfg.finishY))
            {
                squarePos sqPos = new squarePos(x, y);

                // If the square is empty, we can move to it..
                if (onThis[sqPos].type == pieceType.none)
                {
                    addTo.Add(new move(onThis[position], onThis[sqPos]));
                }
                else
                {
                    if (onThis[sqPos].colour != colour )
                    {
                        // the square is occupied by an enemy piece. we can move to it,
                        // but no further.
                        addTo.Add(new move(onThis[position], onThis[sqPos]));
                    }
                    break;
                }

                x += lcfg.directionX;
                y += lcfg.directionY;
            }

            return addTo;
        }
コード例 #3
0
ファイル: square.cs プロジェクト: randomdude/DoktorChess
        protected void getSquaresCoveredForVector(sizableArray<square> addTo, baseBoard onThis, vectorDirection dir)
        {
            if (addTo == null)
                addTo = new sizableArray<square>(8);

            loopConfig lcfg = new loopConfig(position, dir);

            int x = lcfg.startX;
            int y = lcfg.startY;
            while ((x != lcfg.finishX) && (y != lcfg.finishY))
            {
                squarePos sqPos = new squarePos(x, y);

                // If the square is empty, we can move to it..
                if (onThis[sqPos].type == pieceType.none)
                {
                    addTo.Add( onThis[sqPos] );
                }
                else
                {
                    // the square is occupied by some piece. We are covering it, but we cannot go any further.
                    addTo.Add( onThis[sqPos] );
                    break;
                }

                x += lcfg.directionX;
                y += lcfg.directionY;
            }

            return;
        }
コード例 #4
0
        public void testVectorMovement(List<squarePos> expectedPos, vectorDirection dir)
        {
            DoktorChessAIBoard ourBoard = new DoktorChessAIBoard(gameType.queenAndPawns, boardSearchConfig.getDebugConfig());
            squarePos srcSquare = new squarePos(3, 3);

            ourBoard.addPiece(pieceType.queen, pieceColour.white, srcSquare.x, srcSquare.y);
            queenSquare queenie = (queenSquare)ourBoard[srcSquare];

            List<move> expectedmoves = new List<move>(expectedPos.Count);

            foreach (squarePos thisPos in expectedPos)
                expectedmoves.Add(new move((square) queenie, ourBoard[thisPos]));

            sizableArray<move> possibleMoves = queenie.getMovesForVector(null, ourBoard, dir);

            testListsAreOfSameMoves(expectedmoves, possibleMoves);
        }