public static void makeMove(Position oldPosition, Position newPosition)
 {
     ChessPiece piece = squares[oldPosition.Row, oldPosition.Col].getPiece(); // obtained a reference to the checkpiece that's selected.
     if (oldPosition == newPosition) // stupid or accidental maybe ?
         return;
     if ((isWhitesTurn && getPlayerSide(piece) == Player.White) || (!isWhitesTurn && getPlayerSide(piece) == Player.Black))
     {
         ChessPiece capturedPiece = squares[newPosition.Row,newPosition.Col].getPiece();
         if(capturedPiece!=ChessPiece.None)
         {
             // enemy piece captured.
             // TODO: Add the captured pieces to the opponent's capture List.
         }
         clearHighlights();
         squares[oldPosition.Row, oldPosition.Col].removeImage();
         squares[newPosition.Row, newPosition.Col].setPiece(piece);
         // TODO: king in check ? notify by highlighting in red.
         kingInCheck(newPosition);
         isWhitesTurn = !isWhitesTurn;
         updateStatus();
         lastMove = new Move(oldPosition,newPosition);
     }
     else
     {
         setErrorHighlight();
         highlightStatus();
     }
 }
        public Form1()
        {
            InitializeComponent();
            isWhitesTurn = true;
            isKingInCheck = false;
            currentHighlight = null;
            possiblePositions = new List<Position>();
            pieceMap = new Dictionary<Position, ChessPiece>();
            statusLabel = new ToolStripLabel();
            info = null;
            lastMove = null;    // a reference for the last Position.

            //adding status label to the status strip, cant be added via the designer because this is a static object.
            statusStrip1.Items.Add(statusLabel);

            tableLayoutPanel1.RowCount = 8;
            tableLayoutPanel1.ColumnCount = 8;
            for (int i = 0; i < tableLayoutPanel1.RowCount; i++)
            {
                for (int j = 0; j < tableLayoutPanel1.ColumnCount; j++)
                {
                    squares[i, j] = new ChessBoardSquare(i, j);
                    tableLayoutPanel1.Controls.Add(squares[i,j],j,i);
                }
            }

            // defining the resource dictionary
            resourceMap = new Dictionary<ChessPiece, Icon>();
            resourceMap.Add(ChessPiece.WhiteRook, WindowsFormsApplication2.Properties.Resources.White_Rook);
            resourceMap.Add(ChessPiece.WhiteHorse, WindowsFormsApplication2.Properties.Resources.White_Horse);
            resourceMap.Add(ChessPiece.WhiteBishop, WindowsFormsApplication2.Properties.Resources.White_Bishop);
            resourceMap.Add(ChessPiece.WhiteKing, WindowsFormsApplication2.Properties.Resources.White_King);
            resourceMap.Add(ChessPiece.WhiteQueen, WindowsFormsApplication2.Properties.Resources.White_Queen);
            resourceMap.Add(ChessPiece.WhitePawn, WindowsFormsApplication2.Properties.Resources.White_Pawn);
            resourceMap.Add(ChessPiece.BlackRook, WindowsFormsApplication2.Properties.Resources.Black_Rook);
            resourceMap.Add(ChessPiece.BlackHorse, WindowsFormsApplication2.Properties.Resources.Black_Horse);
            resourceMap.Add(ChessPiece.BlackBishop, WindowsFormsApplication2.Properties.Resources.Black_Bishop);
            resourceMap.Add(ChessPiece.BlackKing, WindowsFormsApplication2.Properties.Resources.Black_King);
            resourceMap.Add(ChessPiece.BlackQueen, WindowsFormsApplication2.Properties.Resources.Black_Queen);
            resourceMap.Add(ChessPiece.BlackPawn, WindowsFormsApplication2.Properties.Resources.Black_Pawn);

            // setting initial positions for pieces
            squares[0, 0].setPiece(ChessPiece.WhiteRook); 
            squares[0, 1].setPiece(ChessPiece.WhiteHorse); 
            squares[0, 2].setPiece(ChessPiece.WhiteBishop);
            squares[0, 3].setPiece(ChessPiece.WhiteKing);
            squares[0, 4].setPiece(ChessPiece.WhiteQueen);
            squares[0, 5].setPiece(ChessPiece.WhiteBishop);
            squares[0, 6].setPiece(ChessPiece.WhiteHorse);
            squares[0, 7].setPiece(ChessPiece.WhiteRook);

            squares[7, 0].setPiece(ChessPiece.BlackRook);
            squares[7, 1].setPiece(ChessPiece.BlackHorse);
            squares[7, 2].setPiece(ChessPiece.BlackBishop);
            squares[7, 3].setPiece(ChessPiece.BlackKing);
            squares[7, 4].setPiece(ChessPiece.BlackQueen);
            squares[7, 5].setPiece(ChessPiece.BlackBishop);
            squares[7, 6].setPiece(ChessPiece.BlackHorse);
            squares[7, 7].setPiece(ChessPiece.BlackRook);

            for (int i = 0; i < tableLayoutPanel1.ColumnCount; i++)
            {
                    squares[1, i].setPiece(ChessPiece.WhitePawn);
                    squares[6, i].setPiece(ChessPiece.BlackPawn);
            }

            setStatus("White's Move now");
        }