public MovesNode(Dictionary <char, Dictionary <int, positionInfo> > board, List <ChessPiece> white, List <ChessPiece> black, Moves moves) { Board = board; White = white; Black = black; move = moves; Value = value(); Children = new List <MovesNode>(); }
private void TakeEnemyPiece(PictureBox sender) { bool pass = false; if (!computer_enabled || turn != ChessColor.BLACK) { if (selected != null && (sender) != selected) { if (BoardPieces[selected].Type != PieceType.KING && Kings[BoardPieces[selected].Color].Check(white_pieces, black_pieces, piecePositions)) { bool isPawnAtStart = false; positionInfo startPos = piecePositions[BoardPieces[selected].Position.X][BoardPieces[selected].Position.Y]; positionInfo endPos = piecePositions[BoardPieces[sender].Position.X][BoardPieces[sender].Position.Y]; if (BoardPieces[sender].Color == ChessColor.WHITE) { white_pieces.Remove(BoardPieces[sender]); } else { black_pieces.Remove(BoardPieces[sender]); } startPos.ocupied = false; startPos.piece = null; endPos.ocupied = true; endPos.piece = BoardPieces[selected]; if (BoardPieces[selected].Type == PieceType.PAWN) { isPawnAtStart = ((Pawn)BoardPieces[selected]).startingPos; } BoardPieces[selected].MovePiece(endPos.piece.Position.X, endPos.piece.Position.Y); if (Kings[BoardPieces[selected].Color].Check(white_pieces, black_pieces, piecePositions)) { startPos.ocupied = true; startPos.piece = BoardPieces[selected]; endPos.ocupied = true; endPos.piece = BoardPieces[sender]; BoardPieces[selected].MovePiece(startPos.piece.Position.X, startPos.piece.Position.Y); if (BoardPieces[sender].Color == ChessColor.WHITE) { white_pieces.Remove(BoardPieces[sender]); } else { black_pieces.Remove(BoardPieces[sender]); } if (BoardPieces[selected].Type == PieceType.PAWN && isPawnAtStart) { ((Pawn)BoardPieces[selected]).startingPos = true; } DeselectBoard(); return; } else { pass = true; } } if (pass || BoardPieces[selected].checkValidMove(BoardPieces[sender].Position, white_pieces, black_pieces, piecePositions)) { if (BoardPieces[selected].Color != BoardPieces[sender].Color) { positionInfo startPos = piecePositions[BoardPieces[selected].Position.X][BoardPieces[selected].Position.Y]; positionInfo endPos = piecePositions[BoardPieces[sender].Position.X][BoardPieces[sender].Position.Y]; bool isPawnAtStart = false; if (BoardPieces[selected].Type == PieceType.PAWN) { isPawnAtStart = ((Pawn)BoardPieces[selected]).startingPos; } if (BoardPieces[sender].Color == ChessColor.WHITE) { white_pieces.Remove(BoardPieces[sender]); } else { black_pieces.Remove(BoardPieces[sender]); } startPos.ocupied = false; startPos.piece = null; endPos.ocupied = true; endPos.piece = BoardPieces[selected]; BoardPieces[selected].MovePiece(endPos.piece.Position.X, endPos.piece.Position.Y); if (BoardPieces[selected].Type != PieceType.KING && Kings[BoardPieces[selected].Color].Check(white_pieces, black_pieces, piecePositions)) { startPos.ocupied = true; startPos.piece = BoardPieces[selected]; endPos.ocupied = true; endPos.piece = BoardPieces[sender]; BoardPieces[selected].MovePiece(startPos.piece.Position.X, startPos.piece.Position.Y); if (BoardPieces[sender].Color == ChessColor.WHITE) { white_pieces.Add(BoardPieces[sender]); } else { black_pieces.Add(BoardPieces[sender]); } if (BoardPieces[selected].Type == PieceType.PAWN) { ((Pawn)BoardPieces[selected]).startingPos = isPawnAtStart; } DeselectBoard(); return; } Moves move = new Moves(BoardPieces[selected], BoardPieces[selected].Position.X, BoardPieces[selected].Position.Y, BoardPieces[sender].Position.X, BoardPieces[sender].Position.Y); move.TakenType = BoardPieces[sender].getType(); move.PieceTaken = true; MovesMade.Add(move); loadMoves(); if (BoardPieces[sender].Color == ChessColor.WHITE) { white_pieces.Remove(BoardPieces[sender]); } else { black_pieces.Remove(BoardPieces[sender]); } piecePositions[BoardPieces[selected].Position.X][BoardPieces[selected].Position.Y].ocupied = false; piecePositions[BoardPieces[selected].Position.X][BoardPieces[selected].Position.Y].piece = null; piecePositions[BoardPieces[sender].Position.X][BoardPieces[sender].Position.Y].ocupied = true; piecePositions[BoardPieces[sender].Position.X][BoardPieces[sender].Position.Y].piece = BoardPieces[selected]; BoardPieces[selected].MovePiece(BoardPieces[sender].Position.X, BoardPieces[sender].Position.Y); Controls.Remove(sender); BoardPieces.Remove(sender); AnimateMovement(sender); if (BoardPieces[selected].Type == PieceType.PAWN && BoardPieces[selected].Color == ChessColor.WHITE && BoardPieces[selected].Position.Y == 8 || BoardPieces[selected].Type == PieceType.PAWN && BoardPieces[selected].Color == ChessColor.BLACK && BoardPieces[selected].Position.Y == 1) { PawnChange changePawnForm = new PawnChange(BoardPieces[selected]); if (changePawnForm.ShowDialog() == DialogResult.OK) { piecePositions[BoardPieces[selected].Position.X][BoardPieces[selected].Position.Y].ocupied = false; piecePositions[BoardPieces[selected].Position.X][BoardPieces[selected].Position.Y].piece = null; if (BoardPieces[selected].Color == ChessColor.WHITE) { white_pieces.Remove(BoardPieces[selected]); } else { black_pieces.Remove(BoardPieces[selected]); } Controls.Remove(selected); BoardPieces.Remove(selected); InitializeSinglePiece(changePawnForm.chosen.Position.X, changePawnForm.chosen.Position.Y, changePawnForm.chosen.Type, changePawnForm.chosen.Color, changePawnForm.chosen.Color == ChessColor.WHITE ? Color.White : Color.Black); selected = piecePositions[changePawnForm.chosen.Position.X][changePawnForm.chosen.Position.Y].piece.Piece; } } if (Kings[BoardPieces[selected].Color == ChessColor.WHITE ? ChessColor.BLACK : ChessColor.WHITE].Check(white_pieces, black_pieces, piecePositions)) { if (Kings[BoardPieces[selected].Color == ChessColor.WHITE ? ChessColor.BLACK : ChessColor.WHITE].victoryCondition(white_pieces, black_pieces, piecePositions)) { Victory victoryForm = new Victory(turn == ChessColor.BLACK ? ChessColor.WHITE : ChessColor.BLACK); if (victoryForm.ShowDialog() == DialogResult.OK) { NewGame(); return; } else { Application.Exit(); } } } timeElapsed = 0; turn = turn == ChessColor.BLACK ? ChessColor.WHITE : ChessColor.BLACK; } } DeselectBoard(); } } }
public MovesTree(Dictionary <char, Dictionary <int, positionInfo> > board, List <ChessPiece> white, List <ChessPiece> black, Moves move) { Root = new MovesNode(board, white, black, null); }