Opened 4 years ago

Closed 4 years ago

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

HW #2

Reported by: luchinin.aleksey Owned by: Дмитрий Свиридкин
Component: HW #2 (X0) Version: 3.0
Keywords: Cc:

Description


Change History (6)

comment:1 Changed 4 years ago by Дмитрий Свиридкин

Owner: changed from Дмитрий Свиридкин to luchinin.aleksey
Type: ожидается проверкаожидаются исправления

Пустую строку перед выводом поля забыли

std::pair<int, int> BoardView::handle_coordinates()

Использовать std::pair в публичных интерфейсах не стоит. Очень часто не понятно, что имеется в виду. Лучше сделать собственную структуру на два поля и дать ей (и полям) подходящее ясное название.
Чтобы пользование вашим кодом не превращалось в "эффективный STL" с его восхитительными конструкциями
return map.insert({x, y}).first->second

У вас два числа, разделенных переводом строки, считаются валидным форматом.
Используйте getline и istringstream

bool flag = false;
Лучше именовать такие переменные соглавно их назначанию. Например need_display_field.

Огромную функцию, проверяющую текущее состояние можно разбить на несколько.
Еще ее можно переписать, объединив логику проверки каждого направления в функцию, принимающую начальную точку и направление сдвига.

if ((cnt_moves % 2 == 0 && player == second_player) ||
        (cnt_moves % 2 == 1 && player == first_player)) {

Возможно, стоит сделать только одно поле current_player, чтобы отслеживать состояние только одной переменной вместо двух (а у вас трех)


15 + 5 + 0

comment:2 Changed 4 years ago by luchinin.aleksey

Owner: changed from luchinin.aleksey to Дмитрий Свиридкин
Version: 1.02.0

Исправил недочёты + сделал доп задание

comment:3 Changed 4 years ago by luchinin.aleksey

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

comment:4 Changed 4 years ago by Дмитрий Свиридкин

Owner: changed from Дмитрий Свиридкин to luchinin.aleksey
Type: ожидается проверкаожидаются исправления

0-0 воспринимается валидным ходом

в ncurses-версии стоит выводить, чей сейчас ход.

    bool check_horizontal(int x, int y) const;

    bool check_vertical(int x, int y) const;

    bool check_left_diagonal(int x, int y) const;

    bool check_right_diagonal(int x, int y) const;

Все эти функции заменяются одной: bool check_direction(int x, int y, int dx, int dy)
И скорее всего они должны быть приватными. А в тестах стоит уже проверять результат того или иного хода.

    // BoardView.h
    std::map<Player, char> symbols{{Player::X,     'X'},
                                   {Player::O,     'O'},
                                   {Player::Empty, '.'}};
  1. это поле стоит делать константным. А еще лучше в дополнение к этому статическим.
  2. Оно все-таки специфично для конкретного View, а не для абстрактного. В NCursesView, например, можно рисовать символы размером 5 на 5. И логика не должна поменяться.

Контроллер должен быть один.
Параметр silent -- относится к view.
Для работы с NCursesView не должна требоваться альтернативная реализация.
Все это достигается разработкой подходящего интерфейса для view.

В конкретном случае достаточно всего двух методов:

Display(board)
Input(player, &coordinate) -> is_terminated? 



18 + 6 + 7

Last edited 4 years ago by Дмитрий Свиридкин (previous) (diff)

comment:5 Changed 4 years ago by luchinin.aleksey

Owner: changed from luchinin.aleksey to Дмитрий Свиридкин
Type: ожидаются исправленияожидается проверка
Version: 2.03.0

Исправил недочёты

comment:6 Changed 4 years ago by Дмитрий Свиридкин

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

Логику неперерисовки поля пока вводятся невалидные координаты все-таки стоит перенести во View.

Обычно булевы переменные не называют flag_XXX.
flag_make_turn -> turn_accepted


20 + 9.5 + 10

Note: See TracTickets for help on using tickets.