Я пытаюсь воссоздать игру 2048 на C++.Передача массива функции в C++
Я работаю над функцией spawn
прямо сейчас. Он принимает в массив текущие значения 16 пятен, случайным образом сканирует на пустой, и помещает либо 2, либо 4 в этом месте.
Я начинаю с тестового массива, b
. Я хочу передать этот массив функции, которая изменит одно из значений, которое, как я знаю, мне нужно сделать, передав указатель, но ни одно из изменений не останется после того, как я покинул функцию.
Может ли кто-нибудь увидеть, что здесь не так? Как правильно передать массив, чтобы изменения оставались после функции spawn?
#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
подтверждает, что я попал в, если блок, где я установил бы board[x]
2, но когда я showBoard
потом, нет обновления массива , Любая помощь?
Вы передаете массив по указателю. – haccks
Это ничего не меняет в массиве: 'board [x] == 2;'. – juanchopanza
Это хороший пример использования 'cout', но также позволяет вам делать выводы. Вам следовало бы изучить этот блок 'else' с помощью тонкой зубчатой гребенки. –