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
+3 -6
View File
@@ -19,8 +19,8 @@ private:
size_t FieldSize = 4;
std::vector<Line> field;
Line& getRow(size_t rowIndex) const;
Line& getColumn(size_t columnIndex) const;
Line getRow(size_t rowIndex) const;
Line getColumn(size_t columnIndex) const;
void setRow(size_t rowIndex, const Line &line);
void setColumn(size_t columnIndex, const Line &line);
@@ -31,10 +31,7 @@ public:
Field(size_t fieldSize);
bool canMove() const;
bool moveUp();
bool moveDown();
bool moveLeft();
bool moveRight();
bool move(Direction direction);
std::vector<Position> getEmptyTiles() const;
bool spawnTile(const std::vector<Position> &empty);
+7
View File
@@ -2,3 +2,10 @@
using Tile = unsigned long long int;
using Score = unsigned long long int;
enum class Direction {
up,
down,
left,
right
};
+5 -4
View File
@@ -3,6 +3,7 @@
#include <algorithm>
#include "field.h"
using Tile = unsigned long long int;
int main() {
@@ -15,19 +16,19 @@ int main() {
switch (action)
{
case 'w':
field.moveUp();
field.move(Direction::up);
field.spawnTile(field.getEmptyTiles());
break;
case 's':
field.moveDown();
field.move(Direction::down);
field.spawnTile(field.getEmptyTiles());
break;
case 'a':
field.moveLeft();
field.move(Direction::left);
field.spawnTile(field.getEmptyTiles());
break;
case 'd':
field.moveRight();
field.move(Direction::right);
field.spawnTile(field.getEmptyTiles());
break;
default:
+26 -33
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,44 +63,35 @@ 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;
}
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);
}
return this->field != oldField;
}
bool Field::moveLeft() {
auto oldField = this->field;
Line row;
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);
}
return this->field != oldField;
}
bool Field::moveRight() {
auto oldField = this->field;
Line row;
case Direction::right:
for (size_t i = 0; i < this->FieldSize; ++i) {
row = getRow(i);
std::reverse(row.begin(), row.end());
@@ -108,10 +99,12 @@ bool Field::moveRight() {
std::reverse(row.begin(), row.end());
setRow(i, row);
}
default:
throw std::exception();
}
return this->field != oldField;
}
std::vector<Position> Field::getEmptyTiles() const {
std::vector<Position> empty;
for (size_t i = 0; i < this->FieldSize; ++i) {
+2 -2
View File
@@ -8,12 +8,12 @@ Fields:
Line::Line() {
this->line.clear();
this->line.reserve(4);
this->line.resize(4);
}
Line::Line(size_t length) {
this->line.clear();
this->line.reserve(length);
this->line.resize(length);
}
void Line::process() {