2016-03-02 173 views
-3

所以我正在做一个益智游戏,我来到一个问题。我的董事会稍后将在该计划中进行争夺。我想在它被炒作之前制作一份它的副本,以便在我的游戏的胜利条件下使用它。我的想法是每次用户移动一个图块时,将复制的棋盘与炒盘进行比较,看看它们是否成功(赢)。但我有点不确定如何做板的复制构造函数。这是我所做的(不按照它应该做的那样工作)。复制构造函数[数组] C++

Board::Board(int userInput) { this->gameSize = userInput; int zeroPos[2] = { 0, 0 }; SetTileNumbers(); } void Board::SetTileNumbers() { const int sizeOfGame = gameSize; //Size given from user when the board was created. int tileNumber = 0; //The value given to each Tile.Number. int row, column; boardOfTiles = new Tile* [sizeOfGame]; for (int i = 0; i < sizeOfGame; i++) { boardOfTiles[i] = new Tile [sizeOfGame]; //The doublepointer is given an additional dimension } for (row = 0; row < sizeOfGame; row++) { for (column = 0; column < sizeOfGame; column++) { boardOfTiles[row][column].number = tileNumber; //Loops that goes through the entirety to instantiate the board of tiles. tileNumber++; } } } void Board::SetTileNumbers(const Board& copy) { const int sizeOfGame = copy.gameSize; int row , column; boardOfTiles = new Tile*[sizeOfGame]; for (int i = 0; i < sizeOfGame; i++) { boardOfTiles[i] = new Tile[sizeOfGame]; } for (row = 0; row < sizeOfGame; row++) { for (column = 0; column < sizeOfGame; column++) { boardOfTiles[row][column].number = copy.boardOfTiles[row][column].number; } } }

+0

它以什么方式不按预期工作? – ZivS

+1

如何使用'std :: array'让你的生活更轻松? –

+0

你的问题是什么?您发布的代码不是复制构造函数。 – interjay

回答

0

我希望这听起来不偏离主题,但拷贝构造之外,我认为你可能有一个不同的问题:你的解决方案决定的方式是非常低效的。你浪费CPU时间,浪费你的内存。

对于每一个比较两个NxN板的步骤都是一样的。您可以尝试一种不同的方法:为板上的每个位置分配一个数字,并且您知道解决方案是将数字按特定顺序排序。

对于3x3的板“的”溶液将如下所示:

1 2 3 
4 5 6 
7 8 9 

此外,一个二维数组存储在存储器中作为一个连续阵列,则可以处理该溶液作为数组:

1 2 3 4 5 6 7 8 9 

其他任何安排都不代表解决方案。 检查天气阵列排序是一个更容易解决的问题。最糟糕的情况下,你仍然在看O(n^2)来检查数组是否排序,但没有内存开销。另外我相信你可以找出一个更有效的算法来检查数组是否被排序。

我希望这可以帮助...