Логика вроде правильная. Проверял всё работает но кимпилятор отказывается принимать по второму пункту. Проблема в методе canUserMove().