我正在尝试用C ++重新创建游戏2048。
我正在研究spawn
功能。它接收16个点的当前值的数组,随机扫描空点,并在该点放置2或4。
我开始使用测试数组b
。我想将这个数组传递给一个函数,该函数将改变它的一个值,我知道我需要通过传递一个指针来完成,但是在我离开函数之后没有任何改变。
有谁能看到这里有什么问题?如何正确传递数组,以便在生成函数之后保留更改?
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
void showBoard(int board[]);
void spawn(int* board);
int main() {
srand(time(NULL));
int b[16] = {2, 2, 2, 2};
int* bp = b;
showBoard(b);
spawn(bp);
showBoard(b);
}
// print out the 16 current tiles to the console
void showBoard(int board[]) {
for(int i=0; i<=15; ++i){
if(i%4==0)
cout<<'\n';
cout<<board[i]<<" ";
}
cout<<'\n';
}
void spawn(int* board) {
int x; // index
// randomly choose an index to spawn a 2 or 4:
do x=rand()%16; while(board[x]!=0);
// when found empty place (with value 0), spawn a new tile.
/* there should be a 90% chance of spawning a 2
* and a 10% chance of spawning a 4. Generate a
* random number between 0 and 9, and if it is
* 9, make the new spawn tile a 4.
*/
if (rand()%10 == 9) {
board[x] == 4;
cout << "added 4 \n";
}
else {
board[x] == 2;
cout << "added 2 \n";
}
}
输出:
2 2 2 2
0 0 0 0
0 0 0 0
0 0 0 0
added 2
2 2 2 2
0 0 0 0
0 0 0 0
0 0 0 0
所以我的cout
确认我到了if块,我将board[x]
设置为2,但是当我之后showBoard
时,没有更新数组。有什么帮助吗?
答案 0 :(得分:4)
board[x] == 2;
board[x] == 4;
需要:
board[x] = 2;
board[x] = 4;
此外,如果您将其设为2D 4x4阵列,它可能会使代码更简单。随机挑选一个正方形将成为:
int x = rand() % 16;
int board_spot = board[x%4][x/4];