我已经用 C++ 实现了 2048 游戏,github 链接:2048
为了实现撤消操作,即返回到游戏的先前状态,我为先前的棋盘配置维护了一个矩阵,但是如果我连续允许许多撤消操作,我就无法维护那么多的矩阵。
有什么方法可以改进这种方法?
我认为的一种方法是只保留之前的移动(上、下、左或右),但如果我在这种方法中遗漏了某些东西,或者它可能是扩展,请建议一种方法。
最佳答案
您可以将棋盘的当前状态存储到堆栈中,因此每次用户移动时,都会改变棋盘状态,只需将其放入堆栈中,这样您就可以得到一个充满棋盘当前状态矩阵的堆栈用户的移动和从最近的移动排序在顶部。因此,当您想撤消他们的最新 Action 时,只需从堆栈中弹出即可,这将为您提供他们的最新操作。
...
std::stack<std::array<int, 16>> boardStates;
std::array<16, int> currentBoardState;
// whenever user makes a move
makeMove(currentBoardState)
//when they want to undo
tempBoardState = undoMove();
if(tempBoardState != nullptr)
{
currentBoardState = tempBoardState;
}
else
{
std::cout << "No previous move available" << std::endl
}
...
void makeMove(std::array<int, 16> currentState)
{
boardStates.push(currentState);
}
std::array<int, 16> undoMove()
{
if(!boardStates.empty())
{
return boardStates.pop();
}
return nullptr;
}
关于c++ - 2048游戏中撤销操作的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48720622/