need to implement isValidMove()