Change History (7)

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

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

К тестам ncurses прилинковывать не нужно

Если подать невалидный формат хода, приложение может зациклиться.
Пример:
0a0

вариант с ncurses, вероятно, еще не работает: работает ограничение по перемещению курсора и выход по x. Пробелом ни крестики, ни нолики не ставятся. Разметки поля тоже нет.

bool Test::showFinalResult() {
    ...
    if (failedNum > 0)
        return 0;
    return 1;

У вас функция bool возвращает. Наверное, стоит использовать соответствующие типу константы.

поле field модели Board -- публичное и его могут поменять в обход методов move().
Его можно завернуть в дополнительную структуру Field, которую можно получить только по константной ссылке из модели каким-нибдуь методом const Field& getField() const

        if (argc == 2 && !strcmp(argv[1], "silent")) {
	        sview.game_type = GameType::SILENT;
        } else {
	        sview.game_type = GameType::DEFAULT;
        }

GameType стоит сделать параметром конструктора StdioBoardView и сделать константным полем.

	    	res = checkDown(x, y);
	    	if (res != FieldState::EMPTY) {
				flag_winner = 1;
				winner = res;
				break;
	    	}
	    	res = checkRight(x, y);
	    	if (res != FieldState::EMPTY) {
				flag_winner = 1;
				winner = res;
				break;
	    	}
	    	res = checkDownRight(x, y);
	    	if (res != FieldState::EMPTY) {
				flag_winner = 1;
				winner = res;
				break;
	    	}
	    	res = checkDownLeft(x, y);
	    	if (res != FieldState::EMPTY) {
				flag_winner = 1;
				winner = res;
				break;
	 	    }

Воспользуйтесь логическим ИЛИ, чтобы избавиться от копипасты. И переменная-флаг будет не нужна.

Лучше сделать так, чтоб readMove в возвращающем значении сообщал о продолжении/завершении игры, а не через приватное поле. Этот же метод может также через возвращаемое значение сообщить о некорректном формате.


15 + 5 + 2

comment:2 Changed 4 years ago by Obryadina Alexandra

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

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

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

comment:4 Changed 4 years ago by Obryadina Alexandra

Owner: changed from Obryadina Alexandra to Дмитрий Свиридкин
Type: ожидаются исправленияожидается проверка
Version: 1.02.0

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

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

Четыре одинаковые функции checkXXX() можно заменить на одну, с параметрами, задающими смещениею

GameType не относится к абстрактному интерфейсу BoardView?, а только к StdioBoardView?.

Вспомогательные методы, специфичные для NcursesBoardView? стоит сделать приватными.

Цикл запроса хода, пока пользователь вводит некорректные данные, можно перенести внутрь View.


20 + 7 + 9

comment:6 Changed 4 years ago by Obryadina Alexandra

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

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

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

В checkLline пару магических констант пропустили

(res = checkLine(x, y, 0, 1)) != FieldState::EMPTY
Лучше не комбинировать результат использования оператора присваивания с другими выражениями. Это потенциальное место для ошибок в процессе копипасты, форматирования и авторефакторинга. И дополнительная возможность спецам из PVS-studio написать очередную статью "О, смотрите какие ошибки мы находим -- покупайте наш статический анализатор!" %)

while (true) {
  ReadResult result = view.readMove(x, y, player); 
  if (result == ReadResult::FINISHED) {
      flag = 1;
      break;
  }
  ...
}   

Вместо флага для выхода из внешнего цикла можно сразу сделать return из функции.


20 + 9.5 + 10


Note: See TracTickets for help on using tickets.