コード例 #1
0
ファイル: Form1.cs プロジェクト: simonuks221/Chess
        public void onButtonPressed(object sender, EventArgs e) //Chess board button pressed
        {
            Button buttonClicked = (Button)sender;

            int locX = (int)Math.Floor(buttonClicked.Location.X / 50f); //Get pressed button x and y coords
            int locY = (int)Math.Floor(buttonClicked.Location.Y / 50f);

            if (selectedX == -1 && selectedY == -1) //First selection
            {
                if (chessBoardNodeArray[locX, locY].chessPiece != null && chessBoardNodeArray[locX, locY].chessPiece.pieceColor == moveColor)
                {
                    availableMoves.Clear();

                    selectedX = locX;
                    selectedY = locY;

                    chessBoardNodeArray[locX, locY].ChangeColor(ChessBoardNodeColor.Selected);
                    availableMoves = GetMoves();
                    ShowMoves(availableMoves);
                }
            }
            else //Pressed after seleceting a piece, move a piece
            {
                AvailableMove pressedMove = PressedOnAvailableMove(chessBoardNodeArray[locX, locY]);
                if (pressedMove.node != null)
                {
                    ChangePieceLocation(selectedX, selectedY, pressedMove);
                }

                SoftClearBoard();
            }
        }
コード例 #2
0
ファイル: CPClass.cs プロジェクト: simonuks221/Chess
 protected bool AddMove(ChessBoardNode[,] board, int newX, int newY, List <AvailableMove> moveList, MoveType moveType = MoveType.MoveAndAttack)
 {
     if (newX < 8 && newX >= 0 && newY < 8 && newY >= 0)
     {
         AvailableMove newMove = new AvailableMove(board[newX, newY], moveType);
         if (board[newX, newY].chessPiece == null)
         {
             if (moveType == MoveType.OnlyAttack)
             {
                 return(false);
             }
             else
             {
                 moveList.Add(newMove);
                 return(true);
             }
         }
         else
         {
             if (board[newX, newY].chessPiece.pieceColor == pieceColor)
             {
                 return(false);
             }
             else if (moveType != MoveType.OnlyMove)
             {
                 moveList.Add(newMove);
                 return(false);
             }
             else
             {
                 return(false);
             }
         }
     }
     else
     {
         return(false);
     }
 }
コード例 #3
0
ファイル: AI.cs プロジェクト: georgelbaxter/chessAI
 private AvailableMove selectMove(List<AvailableMove> allMovesList, Piece[,] board, ref bool mate, string colour)
 {
     AvailableMove move = new AvailableMove();
     if (allMovesList.Count > 0)
     {
         var maxRating = allMovesList.Max(x => x.Rating);
         move = allMovesList.Where(x => x.Rating == maxRating).First();
     }
     else if (cf.isThreatened(uf.FindKing(colour, board), uf.OtherColour(colour), board))
     {
         df.Checkmate(colour);
         mate = true;
     }
     else
     {
         df.Stalemate();
         mate = true;
     }
     return move;
 }
コード例 #4
0
ファイル: AI.cs プロジェクト: georgelbaxter/chessAI
 private Piece[,] makeTheoreticalMove(AvailableMove move, Piece[,] board)
 {
     //clone board
     Piece[,] tmpBoard = new Piece[8, 8];
     for (int row = 0; row < 8; row++)
         for (int col = 0; col < 8; col++)
             tmpBoard[row, col] = new Piece(board[row, col]);
     //make theoretical move
     tmpBoard[move.Move[0], move.Move[1]] = new Piece(move.Piece);
     tmpBoard[tmpBoard[move.Move[0], move.Move[1]].Row, tmpBoard[move.Move[0], move.Move[1]].Col] = new Piece();
     tmpBoard[move.Move[0], move.Move[1]].Row = move.Move[0];
     tmpBoard[move.Move[0], move.Move[1]].Col = move.Move[1];
     return tmpBoard;
 }
コード例 #5
0
ファイル: AI.cs プロジェクト: georgelbaxter/chessAI
 private void makeMove(AvailableMove move, Piece[,] board, Piece[,] WhiteTaken, Piece[,] BlackTaken, int[] whiteTakenIndeces, int[] blackTakenIndeces)
 {
     mf.movePiece(move.Piece, board, WhiteTaken, BlackTaken, whiteTakenIndeces, blackTakenIndeces, new int[] { move.Piece.Row, move.Piece.Col }, move.Move[0], move.Move[1]);
 }
コード例 #6
0
ファイル: Form1.cs プロジェクト: simonuks221/Chess
        public void ChangePieceLocation(int fromX, int fromY, AvailableMove moveTo) //Move piece
        {
            switch (moveTo.moveType)
            {
            case MoveType.Castling:
                if (moveColor == ChessPieceColor.White) //White castles
                {
                    if (moveTo.node.locationX == 6)     //Short castles
                    {
                        moveTo.node.ChangePiece(chessBoardNodeArray[4, 0].chessPiece);
                        chessBoardNodeArray[fromX, fromY].ChangePiece(null);
                        moveTo.node.chessPiece.moved = true;

                        chessBoardNodeArray[5, 0].ChangePiece(chessBoardNodeArray[7, 0].chessPiece);
                        chessBoardNodeArray[7, 0].ChangePiece(null);
                        chessBoardNodeArray[5, 0].chessPiece.moved = true;
                    }
                    else     //Long castles
                    {
                        moveTo.node.ChangePiece(chessBoardNodeArray[4, 0].chessPiece);
                        chessBoardNodeArray[fromX, fromY].ChangePiece(null);
                        moveTo.node.chessPiece.moved = true;

                        chessBoardNodeArray[3, 0].ChangePiece(chessBoardNodeArray[0, 0].chessPiece);
                        chessBoardNodeArray[0, 0].ChangePiece(null);
                        chessBoardNodeArray[3, 0].chessPiece.moved = true;
                    }
                }
                else                                //Black castles
                {
                    if (moveTo.node.locationX == 6) //Short castles
                    {
                    }
                    else
                    {
                    }
                }
                break;

            default:
                Console.WriteLine(fromY + "ssss");
                Console.WriteLine(chessBoardNodeArray[fromX, fromY].chessPiece + "adad");
                moveTo.node.ChangePiece(chessBoardNodeArray[fromX, fromY].chessPiece);

                chessBoardNodeArray[fromX, fromY].ChangePiece(null);
                moveTo.node.chessPiece.moved = true;
                break;
            }

            //Change current moving team color
            if (moveColor == ChessPieceColor.White)
            {
                moveColor = ChessPieceColor.Black;
            }
            else
            {
                moveColor = ChessPieceColor.White;
            }
            MoveLabel.Text = moveColor.ToString();

            SoftClearBoard();
        }
コード例 #7
0
ファイル: MoveNode.cs プロジェクト: georgelbaxter/chessAI
 public void AddChildren(MoveNode node, AvailableMove childMove, Piece[,] board)
 {
     MoveNode child = new MoveNode(childMove, board);
     child.Parent = node;
     node.Children.Add(child);
 }
コード例 #8
0
ファイル: MoveNode.cs プロジェクト: georgelbaxter/chessAI
 public MoveNode(AvailableMove move, Piece[,] board)
 {
     Children = new List<MoveNode>();
     Move = move;
     Board = board;
 }
コード例 #9
0
ファイル: MoveNode.cs プロジェクト: georgelbaxter/chessAI
 public MoveNode(Piece[,] board)
 {
     Move = new AvailableMove();
     Children = new List<MoveNode>();
     Board = board;
 }
コード例 #10
0
ファイル: MoveNode.cs プロジェクト: georgelbaxter/chessAI
 public MoveNode()
 {
     Move = new AvailableMove();
     Children = new List<MoveNode>();
 }