Tetris Okhrimenko v1.0#9
Conversation
Из проблем на данный момент: 1) Нужно показывать следующую фигуру 2) Исправить код стайл 3) Проверить код на наличие лишнего "мусора" 4) Корректно обрабатывать проигрыш(сейчас немного не в тот момент срабатывает сигнал)
hBuzzy
left a comment
There was a problem hiding this comment.
Исправить замечания. Убрать ненужные классы, желательно все же выделить фигуры хотя бы в один отдельный класс. Убрать комментарии.
| void SetColumnNumber(uint newColumnsCount); | ||
|
|
||
| void SetFigurePosition(int row, int column); | ||
|
|
||
| void spawnNextFigure(); | ||
| void updateGameGrid(); | ||
|
|
||
| bool CheckCollision(); | ||
|
|
||
| bool CheckCollisionMoveLeft(); | ||
| bool CheckCollisionMoveRight(); | ||
| bool CheckCollisionRotate(); |
There was a problem hiding this comment.
Либо все методы с большой (как принято в код стиле у нас), либо все с маленькой, придерживаясь стиля QT.
Check - всегда плохое слово, которое почти никогда достаточно не погружает в контекст того, что мы проверяем. Кроме того, методы / переменные / поля типа bool должны задавать вопрос, на который мы можем ответить строго "Да" или "Нет". У вас вопросов нет вообще, только утвердительные формы.
В создании вопроса нам помогают Is, Has, Have и т.д. CheckCollision -> HasCollisions() и т.д.
| bool CheckCollisionRotate(); | ||
|
|
||
| QVector<QVector<int>> GetCurrentFigure(); | ||
| QVector<QVector<int>> GetRotateCurrentFigure(); |
There was a problem hiding this comment.
Rotate - глагол.
Если вы хотите получить поворот, то это rotation. Плюс нужно соблюдать порядок слов. GetCurrentFigureRotation. Технически, конечно, стоит все же выделить ваши наборы фигур в класс фигура хотя бы, чтобы не было такой каши в названиях.
Тогда бы у вас было что-то около: Figure::GetRotation.
|
|
||
| QVector<QVector<int>> currentFigure_; | ||
|
|
||
| QVector<QVector<int>> GameGrid_; // Поле с информацией о заполнении поля фигурами |
| uint currentFigureRow_; | ||
| uint currentFigureColumn_; | ||
|
|
There was a problem hiding this comment.
Опять же, выделив все хотя бы в класс фигура, такой каши не будет.
| uint currentFigureRow_; | ||
| uint currentFigureColumn_; | ||
|
|
||
| QColor colorFigure; |
There was a problem hiding this comment.
QColor colorFigure; -> QColor figureColor_;
|
|
||
| QTimer *timer; | ||
| GameField *gamefield; | ||
| ModalDialog *modaldialog; |
|
|
||
|
|
||
|
|
||
| void Tetris::openEndGameDialog() { |
| for (int i = 0; i < rowsNumber_;i++) { | ||
| for (int j = 0; j < columnsNumber_;j++) { |
| if(!isGameOver) { | ||
| // Проверка, не касается ли текущая фигура нижней границы поля | ||
| if (currentFigureRow_ + currentFigure_.size() < rowsNumber_) { | ||
| bool isHaveCollision = CheckCollision(); |
There was a problem hiding this comment.
isHaveCollision -> hasCollision(-s)
| void GameField::updateGameGrid() { | ||
| for (int i = 0; i < currentFigure_.size(); ++i) { | ||
| for (int j = 0; j < currentFigure_[0].size(); ++j) { | ||
| if (currentFigure_[i][j] == 1) { | ||
| int x = currentFigureRow_ + i; | ||
| int y = currentFigureColumn_ + j; | ||
|
|
||
| CheckLine(); | ||
| //CheckColumn(); | ||
| GameGrid_[x][y] = 1; | ||
| } | ||
| } | ||
| } | ||
| } | ||
|
|
||
| bool GameField::CheckCollision() { | ||
| for (int i = 0; i < currentFigure_.size(); i++) { | ||
| for (int j = 0; j < currentFigure_[0].size(); j++) { | ||
| if (currentFigure_[i][j] == 1) { | ||
| int x = currentFigureRow_ + i + 1; | ||
| int y = currentFigureColumn_ + j; | ||
|
|
||
| if (x < rowsNumber_ && GameGrid_[x][y] == 1) { | ||
| return true; | ||
| } | ||
| } | ||
| } | ||
| } | ||
| return false; | ||
| } | ||
|
|
||
|
|
||
| bool GameField::CheckCollisionMoveLeft() { | ||
| for (int i = 0; i < currentFigure_.size(); i++) { | ||
| for (int j = 0; j < currentFigure_[0].size(); j++) { | ||
| if (currentFigure_[i][j] == 1) { | ||
| int x = currentFigureRow_ + i; | ||
| int y = currentFigureColumn_ + j - 1; | ||
|
|
||
| if (y < 0 || (x < rowsNumber_ && GameGrid_[x][y] == 1)) { | ||
| return true; | ||
| } | ||
| } | ||
| } | ||
| } | ||
| return false; | ||
| } |
There was a problem hiding this comment.
Все 3 методы передвижения (проверки передвижения?) - дубляж кода. Выделите общую логику в отдельный метод.
Исправлены замечания. Корректное отображение следующей фигуры, очков и всего что необходимо по заданию.
Из проблем на данный момент: