#740 closed ожидается проверка (задача сдана)
HW #2 (X0)
Reported by: | vorobeva.aleksandra | Owned by: | Артур Гулецкий (huletski) |
---|---|---|---|
Component: | HW #2 (X0) | Version: | 3.0 |
Keywords: | Cc: |
Description
Не реализованы тесты для View. Не очень понятно, во-первых, как их писать (а вернее что подставлять в DO_CHECK в качестве expression) как следует доставать печать поля из потока? По той же причине не реализованы тесты для функции printBoardField(). а, во-вторых, для тестов View надо отдельный файл заводить или можно реализовать там же, где BoardTest??
Стиль ужасен:/ в функции winState() реализовано 4 похожих друг на друга цикла, но т к везде итерация проходит немного по-разному, я не знаю, как оттуда выцепить что-нибудь в отдельную функцию.
Change History (3)
comment:1 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
comment:2 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 2.0 → 3.0 |
К сожалению проверку на плохие ходы не доделала:(
Функция определения победителя теперь должна работать правильно.
Тесты переделаны.
comment:3 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
Корректность
- отсутствует обработки некорректных ходов;
- silent режим не работает (баг в main.cpp:11 - результат strcmp нужно сравнить с нулем);
- баги в определении ничьей, например:
OXOXOOXOXX XXXXOXXOOO OOXOXOOXOX XOOOOXOOXX XXOXOXXXOX OXXXXOXOOX OOXOXOXOXO OOXXOXOXXO XOOOOXOOOX XXOXXXXOOO X wins!
Стиль
Board.h
- const у методов не проставлены;
Board.cpp
6: константы в данном случае лучше сделать static constexpr полями класса;
15: избыточный if;
33: дублирование похожих циклов в функции;
main.cpp
11: такой код был бы более читабельным:
bool is_silent = arg > 1 && ...; view.runGame(is_silent);
Баллы
Корректность: 16;
Стиль: 6.75
Тесты для view реализовывать не нужно.
Технически, если было бы нужно их писать, стоило другой файл завести.
Можно вынести проход по направлению, где направление задается аргументами (dx и dy).
FYI: можно написать функцию, которая определяет победил ли какой-то из игроков после очередного хода, учитывая информацию о последнем сделанном ходе. Эта функция будет работать быстрее и, вероятно, проще реализована.
Корректность
Особенно фатальные замечания
Кроме того, как минимум, не всегда работает обнаружение диагоналей.
Стиль
Board.h
11: пробелы лишние в конце строке, неаккуратно;
20: vector используется, а заголовок в файле не подключен.
Board.cpp
6: списки инициализации;
10
нужно вынести в константы; начиная с C++11, который указан при компиляции, пробел между соседними закрывающимися угловыми скобками можно не ставить;11: знание о том, что -1 -1 означает конец игры специфично для контроллера -- неясно почему это в модели;
20: рисовать доску должен контроллер;
21: по массиву/вектору ходите, используя переменную типа size_t;
32: а как проверяются неглавные диагонали?
StdioBoardView?.h
3: а тут включение вектора лишнее;
StdioBoardView?.cpp
1, 2: ни vector, ни iostreamы не используются;
7: используйте тернарный оператор, чтобы сделать код более лаконичным
return cur_ player == 'O' ? 'X' : 'O';
23: сложно придумать более общее имя для параметра типа bool;
27, 37: дублирование условия; наталкивает на мысль о рефакторинге цикла;
main.cpp
11: избавьтесь от if'а избыточного;
BoardTest?.h
Test.cpp
9: инкремент totalNum можно вынести в начало функции, чтобы избежать дублирования выражения;
19: избавьтесь от избыточного if'a.
Баллы
Корректность: 6, нужно доделать хотя бы определение победителя;
Стиль: 4.5, так как код будет дописываться.