2014-12-08 114 views
-2

我正在使用5x5二維數組進行簡化的掃雷遊戲。我的部分教學是製作這樣的功能:創建掃雷遊戲

該函數的取值介於1到25之間,並將該值轉換爲行列位置。您將需要使用參考參數來完成此操作。

我該如何做到這一點?

這是到目前爲止我的代碼:

int main() 
{ 
    int input; 
    char array[5][5]; 
    initBoard(array, 5); 
    populateBombs(array, 5); 
    cout << "Enter a value between 1 and 25 to check a space " << endl; 
    cin >> input; 
    printBoard(array, 5); 
    cout << endl; 
    return 0; 
} 

void initBoard(char ar[][5], int size) 
{ 
    for (int row = 0; row < 5; row++) 
    { 
     for (int col = 0; col < size; col++) 
     { 
      ar[row][col] = 'O'; 
     } 
    } 
} 

void printBoard(const char ar[][5], int size) 
{ 
    for (int row = 0; row < size; row++) 
    { 
     for (int col = 0; col < 5; col++) 
     { 
      cout << ar[row][col] << "\t"; 
     } 
     cout << endl; 
    } 
} 

問題的第二部分是創建一個「populateBomb」功能,我需要隨機填充5位有炸彈。我必須用'*'字來表示炸彈。我可以利用任何技術來解決這些問題?

回答

0

您可以使用除法和模operators輕鬆地將索引轉換爲列和行。

// Take an index between 1 and 25 and return 0 based column and rows. 
// If you need 1 based column and rows add 1 to column and row 
void getPosition(int index, int& column, int& row) 
{ 
    row = (index - 1)/5; 
    column = (index - 1) % 5; 
} 

要選擇一個隨機的列和行使用std::rand

void getRandomPosition(int index, int& column, int& row) 
{ 
    getPosition(std::rand() % 25, column, row); 
} 
0

你說:

此功能需要1到25之間的值和值轉換爲行列位置。您將需要使用參考參數來完成此操作。

函數簽名看起來應該像:

int foo(int in, int& row, int& col); 

這不是從描述清楚rowcol需求是否是504之間1之間。很明顯,實施將基於預期產出的不同而有所不同。