Opened 4 years ago
Closed 4 years ago
#719 closed ожидаются исправления (задача сдана)
HW #2
Reported by: | lebedev.egor | Owned by: | lebedev.egor |
---|---|---|---|
Component: | HW #2 (X0) | Version: | 2.0 |
Keywords: | Cc: |
Description
Пока без контроллера, но с допом!
Change History (4)
comment:1 Changed 4 years ago by
Owner: | changed from Дмитрий Свиридкин to lebedev.egor |
---|---|
Type: | ожидается проверка → ожидаются исправления |
comment:2 Changed 4 years ago by
Owner: | changed from lebedev.egor to Дмитрий Свиридкин |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | 1.0 → 2.0 |
Кажется, тут за стиль можно ставить -1, зато без goto и глобальных переменных!
comment:3 Changed 4 years ago by
Owner: | changed from Дмитрий Свиридкин to lebedev.egor |
---|---|
Type: | ожидается проверка → ожидаются исправления |
X move: Bad Move!
move -- с маленькой!
Где делать и не делать перевод строки -- так и не исправили --- это проявляется в silent mode и валит автоматические тесты.
Если дословно следовать требованиям к промежуточной попытке, эта попытка у вас сейчас стала бы последней. Постарайтесь все-таки в следующий раз не упускать из виду столь незначительные на первый взгляд замечания. Особенно если в ближайшем светлом будущем, как грозятся, сюда прикрутят CI/CD с автопрогоном тестов при посылках.
// Board.h friend class StdioBoardView; friend class NcursesView; friend class GameController;
А эти друзья чего тут забыли? Предоставьте константные методы для read-only доступа к полю и не плодите friend-классы. Они уместны только для pImpl, а во всех остальных случаях свидетельствуют о плохом дизайне.
Неимплементированные методы нужно выкинуть.
Для магических констант стоит завести константы именованные
void NcursesView::sayMoveDone() {} void NcursesView::sayBadMove() {}
Есть подозрение, что эти методы специфичны для конкретных реализаций View и вообще не должны быть частью интерфейса.
А сам интерфейс View должен состоять из всего двух методов. Они у вас как раз есть.
//main_test.cpp int Test::failedNum = 0; int Test::totalNum = 0;
По-хорошему, эти определения должны быть в Test.cpp
Да, без глобальных переменных и goto -- лучше.
17 + 5 + 9
comment:4 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
Порядок подключения библиотек важен.
флаг -l<library> должен следовать после списка исходников/объектников
Draw -> Draw. (точка потеряна)
После
* move:
перевод строки не нужен. Перевод строки выводится перед печатью поля.get_move у вас корректный, но слишком сложный:
getline + istringstream с проверкой состояния потока было бы достаточно.
За goto в c++ коде надо бить по рукам. Что допустимо в С, не допустимо в C++ -- в C++ есть конструкторы и goto может их перепрыгнуть. Причем деструкторы все равно вызовутся. И будет UB.
У вас 4 функции (countXXXX) имеют совершенно одинаковый код. Сделайте одну, параметризуемую направлением и стартовой точкой.
// Вопрос: как тут писать player ^= 1 (так не компилируется,
Ответ: не писать так. Не нужно в высокоуровневом коде спускаться без надобности к низкоуровневым проблемам. Оптимизатор часто достаточно сообразителен чтобы самостоятельно применить битовые операции.
Это должно быть в Test.cpp
Параметризовывать View через глобальную переменную
silent
?! Безобразие какое-то.18 + 2 + 9