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: ожидается проверкаожидаются исправления
src/main.cpp:5:1: note: ‘strcmp’ is defined in header ‘<cstring>’; did you forget to ‘#include <cstring>’?
    4 | #include "NcursesBoardView.h"
  +++ |+#include <cstring>

Порядок подключения библиотек важен.

usr/bin/ld: NcursesBoardView.cpp:(.text+0x43): undefined reference to `cbreak'
/usr/bin/ld: NcursesBoardView.cpp:(.text+0x48): undefined reference to `noecho'
/usr/bin/ld: NcursesBoardView.cpp:(.text+0x4f): undefined reference to `stdscr'
/usr/bin/ld: NcursesBoardView.cpp:(.text+0x5b): undefined reference to `stdscr'
/usr/bin/ld: NcursesBoardView.cpp:(.text+0x74): undefined reference to `stdscr'
/usr/bin/ld: NcursesBoardView.cpp:(.text+0x80): undefined reference to `stdscr'
/usr/bin/ld: NcursesBoardView.cpp:(.text+0xc3): undefined reference to `newwin'
/usr/bin/ld: NcursesBoardView.cpp:(.text+0xcc): undefined reference to `refresh'
/usr/bin/ld: NcursesBoardView.cpp:(.text+0xdd): undefined reference to `keypad'
/usr/bin/ld: NcursesBoardView.cpp:(.text+0xf9): undefined reference to `curs_set'
/usr/bin/ld: NcursesBoardView.cpp:(.text+0x14b): undefined reference to `wprintw'
/usr/bin/ld: NcursesBoardView.cpp:(.text+0x16b): undefined reference to `wprintw'
/usr/bin/ld: NcursesBoardView.cpp:(.text+0x177): undefined reference to `wrefresh'
/usr/bin/ld: NcursesBoardView.cpp:(.text+0x183): undefined reference to `wgetch'
/usr/bin/ld: NcursesBoardView.cpp:(.text+0x2b5): undefined reference to `wprintw'
/usr/bin/ld: NcursesBoardView.cpp:(.text+0x2e8): undefined reference to `wprintw'
/usr/bin/ld: NcursesBoardView.cpp:(.text+0x31b): undefined reference to `wprintw'
/usr/bin/ld: NcursesBoardView.cpp:(.text+0x327): undefined reference to `wrefresh'

флаг -l<library> должен следовать после списка исходников/объектников

Draw -> Draw. (точка потеряна)
После * move: перевод строки не нужен. Перевод строки выводится перед печатью поля.

get_move у вас корректный, но слишком сложный:
getline + istringstream с проверкой состояния потока было бы достаточно.

За goto в c++ коде надо бить по рукам. Что допустимо в С, не допустимо в C++ -- в C++ есть конструкторы и goto может их перепрыгнуть. Причем деструкторы все равно вызовутся. И будет UB.

У вас 4 функции (countXXXX) имеют совершенно одинаковый код. Сделайте одну, параметризуемую направлением и стартовой точкой.

// Вопрос: как тут писать player ^= 1 (так не компилируется,
Ответ: не писать так. Не нужно в высокоуровневом коде спускаться без надобности к низкоуровневым проблемам. Оптимизатор часто достаточно сообразителен чтобы самостоятельно применить битовые операции.

// main_test.cpp
int Test::failedNum = 0;
int Test::totalNum = 0;

Это должно быть в Test.cpp

Параметризовывать View через глобальную переменную silent?! Безобразие какое-то.


18 + 2 + 9

comment:2 Changed 4 years ago by lebedev.egor

Owner: changed from lebedev.egor to Дмитрий Свиридкин
Type: ожидаются исправленияожидается проверка
Version: 1.02.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: assignedclosed
Note: See TracTickets for help on using tickets.