2014-08-25 5 views
-2

Я пытаюсь воссоздать игру 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 потом, нет обновления массива , Любая помощь?

+0

Вы передаете массив по указателю. – haccks

+1

Это ничего не меняет в массиве: 'board [x] == 2;'. – juanchopanza

+3

Это хороший пример использования 'cout', но также позволяет вам делать выводы. Вам следовало бы изучить этот блок 'else' с помощью тонкой зубчатой ​​гребенки. –

ответ

4
board[x] == 2; 
board[x] == 4; 

Нужно быть:

board[x] = 2; 
board[x] = 4; 

Кроме того, это может сделать код более простым, если вы сделаете это 2D массив 4x4. Тогда выбор случайного квадрата станет следующим:

Смежные вопросы