refactored

This commit is contained in:
2026-05-24 14:21:35 +03:00
parent b75c9581b8
commit 119b85ea31
5 changed files with 56 additions and 58 deletions
+38 -45
View File
@@ -20,11 +20,11 @@ Public methods:
*/
// PRIVATE
Line& Field::getRow(size_t rowIndex) const {
Line Field::getRow(size_t rowIndex) const {
return this->field[rowIndex];
}
Line& Field::getColumn(size_t columnIndex) const {
Line Field::getColumn(size_t columnIndex) const {
// from top to bottom
Line column;
for (size_t i = 0; i < this->FieldSize; ++i) {
@@ -63,55 +63,48 @@ void printVector(const Line &arr) {
printf("\n");
}
bool Field::moveUp() {
bool Field::move(Direction direction) {
auto oldField = this->field;
for (size_t i = 0; i < this->FieldSize; ++i) {
Line column;
column = getColumn(i);
column.process();
setColumn(i, column);
}
return this->field != oldField;
}
Line column;
Line row;
bool Field::moveDown() {
auto oldField = this->field;
for (size_t i = 0; i < this->FieldSize; ++i) {
Line column;
column = getColumn(i);
std::reverse(column.begin(), column.end());
column.process();
std::reverse(column.begin(), column.end());
setColumn(i, column);
switch (direction) {
case Direction::up:
for (size_t i = 0; i < this->FieldSize; ++i) {
column = getColumn(i);
column.process();
setColumn(i, column);
}
break;
case Direction::down:
for (size_t i = 0; i < this->FieldSize; ++i) {
column = getColumn(i);
std::reverse(column.begin(), column.end());
column.process();
std::reverse(column.begin(), column.end());
setColumn(i, column);
}
break;
case Direction::left:
for (size_t i = 0; i < this->FieldSize; ++i) {
row = getRow(i);
row.process();
setRow(i, row);
}
case Direction::right:
for (size_t i = 0; i < this->FieldSize; ++i) {
row = getRow(i);
std::reverse(row.begin(), row.end());
row.process();
std::reverse(row.begin(), row.end());
setRow(i, row);
}
default:
throw std::exception();
}
return this->field != oldField;
}
bool Field::moveLeft() {
auto oldField = this->field;
Line row;
for (size_t i = 0; i < this->FieldSize; ++i) {
row = getRow(i);
row.process();
setRow(i, row);
}
return this->field != oldField;
}
bool Field::moveRight() {
auto oldField = this->field;
Line row;
for (size_t i = 0; i < this->FieldSize; ++i) {
row = getRow(i);
std::reverse(row.begin(), row.end());
row.process();
std::reverse(row.begin(), row.end());
setRow(i, row);
}
return this->field != oldField;
}
std::vector<Position> Field::getEmptyTiles() const {
std::vector<Position> empty;
for (size_t i = 0; i < this->FieldSize; ++i) {