Python with pygame module
possible moves: drawing a hollow rectangle around the cells that the selected piece can move to.
pawn promotion: occurs when a pawn reaches the farthest rank from its original square, the player can replace the pawn for a queen, a rook, a bishop, or a knight.
castling: moving the king two squares toward a rook on the same rank and then moving the rook to the square that the king passed over. Castling is permitted only if neither the king nor the rook has previously moved
king checkmates: identifying invalid moves for the king that would result in checkmates preventing the player from making those moves.