Opened 4 years ago

Closed 4 years ago

#732 closed ожидается проверка (задача сдана)

HW #2

Reported by: egipti.pavel Owned by: Артур Гулецкий (huletski)
Component: HW #2 (X0) Version: 2.0
Keywords: Cc:

Description


Change History (3)

comment:1 Changed 4 years ago by Артур Гулецкий (huletski)

Type: ожидается проверкаожидаются исправления

Корректность

  • есть ошибки в логике определения окончания игры. Например, следующая конфигурация посчиталась победной для О:
    XX...X.OOO
    .OXOXO..O.
    X.OO.XO..X
    X.OX.XXXO.
    .XX...XOOX
    .O.OXOX...
    OO..OX.X..
    ....OX.O.X
    X....XXOO.
    O wins!
    

В тестах не хватает каких-то случаев;

  • ввод одного числа в качестве координаты должен считаться некорректным:
    {hw_02}[2178]$ ./hw_02
    ..........
    ..........
    ..........
    ..........
    ..........
    ..........
    ..........
    ..........
    ..........
    ..........
    O move: 0
    ^C
    

Стиль

Board.cpp

4: константы обычно с заглавных пишут (или как-то отлично от имен переменных);
6: s/10/size
13: с std::memset было бы короче;
31: почему нельзя сразу _player вернуть?
42: избыточный if;
59: Board::getState - много дублирования, реализация усложненна для задания. Можно сделать проще, если учитывать, что знаем куда был сделан последний ход (статус можно вообще в move вычислять и сохранять в поле класса);
60: непонятная константа 100, у _counter лучше изменить имя на _occupied_cells_nm, например.

StdioBoardView?.cpp

7: size можно спросить у board;
8: неясно почему константа глобальная;
9: неясно почему переменные глобальные;
10: почему метод не часть StdBoardView?? Имя функции неточное: функция занимается чтение хода/входных данных, а не исправлением (код функции я не смотрел, так как код будет меняться);
69: списки инициализации;
77: вложенность высокая. тело цикла можно переписать так:

if (!correct_input()) {
  printf(...);
  continue;
}
if (x == -1 && y == -1) { return; }
if (!_board->can_move(x, y)) {
  printf(...);
  continue;
}
...

Старайтесь минимизировать вложенность, это делает код более простым для понимания;
90: странно, что функция, сообщающая об ошибке prompt печатает -> цикл нужно как-то поменять;
90: печатать код значения enum class'a плохо с идеологической точки зрения: view сильнее связан с представлением модели, чем мог бы быть. Лучше конвертировать enum class в отображаемое значение явно в отдельной функции view (повторюсь, с идеологической т.з.);
118: с тернарным оператором было бы лаконичнее: printf("%c wins!\n", status == ... ? 'O' : 'X').

Test.cpp

20: return failedNum == 0; if избыточен


Корректность: 10;
Стиль: 6

comment:2 Changed 4 years ago by egipti.pavel

Type: ожидаются исправленияожидается проверка
Version: 1.02.0

comment:3 Changed 4 years ago by Артур Гулецкий (huletski)

Resolution: задача сдана
Status: assignedclosed

Корректность

  • баги в логике определения статуса партии (см. последнюю строку):
    OXOXOOXOXO
    XXOXOXXOOO
    XOXOXOOXOX
    XOOOOXOOXX
    XXOXOXXXOX
    OXXXXOXOOX
    OOXOXOXOXO
    OOXXOXOXXO
    XOOOOXOOOX
    XXOXXXXXOO
    Draw.
    
  • ввод одного числа в качестве координаты должен считаться некорректным

Стиль

Board.cpp

7: константу лучше сделать static constexpr полем класса;
44: тернарный оператор в таких случаях лучше использовать так:

_board[y][x] = gamer == Player::O ? 'O' : 'X';

53: лучше бы цикл; параметры лучше сменить на y, x, dy, dx для читабельности;
62: баг: что если победа была на последнем ходу?
66, 74, etc: циклы дублируются, что не очень критично в данном случае, но лучше было бы от этого избавиться.

StdioBoardView?.cpp

91: объявление correct_input?


Баллы

Корректность: 18.5;
Стиль: 8.5

Note: See TracTickets for help on using tickets.