implements IsValidMove