首页 > 解决方案 > 如何在 bool true 参数上使用函数更改数组的值

问题描述

我的作业/项目旨在创建一个记忆游戏,其中包含随机分配给 4x4 数组的二维字符数组 AE。

我们必须使用函数来完成程序的大部分繁重工作。一旦用户正确猜测,4x4 可见数组位置猜测必须使用从“X”到其隐藏值的相应正确值进行更改。

我设法在大部分代码中绊倒并崩溃了,但这部分让我陷入了循环。

我显示的隐藏数组仅用于测试目的。完成后将被删除。

到目前为止,唯一似乎有意义的事情是使用一些 if/if else 语句来检查 x、y 值是否等于行和列值,如果是,则 make visibleArray[row][col] = hidden[row][col]

但这似乎抓住了随机值,有时甚至没有被输入猜到。

下面是出现问题的bool函数和void函数。

*** 更新:放置整个代码以帮助查看数组是如何初始化的。

#include <iostream>
#include <ctime>
#include <cstdlib>
#include <stdio.h>



using namespace std;

const int PAIRS = 10;
const int ARRAY_SIZE = 4;

//BLANK HIDDEN ARRAY
void startArray(int size) {
    char hiddenArray[ARRAY_SIZE][ARRAY_SIZE];

    for (int row = 0; row < size; row++) {
        for (int col = 0; col < size; col++) {
            hiddenArray[row][col] = 'X';
        }

    }

}
//DISPLAYED ARRAY
void dispArray (char visibleArray[][ARRAY_SIZE], int size){
    for (int row = 0; row < ARRAY_SIZE; row++){
        for (int col = 0; col < ARRAY_SIZE; col++){
            visibleArray[row][col] = 'X';
        }
    }
    cout << "  1 2 3 4" << endl;
    for (int i = 0; i < ARRAY_SIZE; i++){
        cout << i+1 << " ";
        for (int j = 0; j < ARRAY_SIZE; j++){
            cout << visibleArray[i][j] << " ";
        }
        cout << endl;
    }
}

//RANDOM LETTER GENERATION
char secretLetters(int arr) {
    char secrets[PAIRS] = { 'A','A','B','B','C','C','D','D','E','E' };

    for (int i = arr; i <= 9; i++) {
        char temp;
        temp = secrets[i];
        secrets[i] = 'X';
        return temp;
        temp = 0;
    }

}
//POPULATE ARRAY WITH RANDOM VALUES
void initArray (char hiddenArray[][ARRAY_SIZE], int size) {


    for (int i = 0; i <= PAIRS - 1; i++){
        int index1 = rand() % ARRAY_SIZE;
        int index2 = rand() % ARRAY_SIZE;
        if (hiddenArray[index1][index2] == 'X'){
            hiddenArray[index1][index2] = secretLetters(i);
        }
        else {
            --i;
        }
    }
}

int userChoiceX (){
    int x;
    cout << "Please select a row value:";
    cin >> x;
    return x;
}
int userChoiceY (){
    int y;
    cout << "Please select a column value:";
    cin >> y;
    return y;
}

bool check (char visibleArray[][ARRAY_SIZE], char hiddenArray [][ARRAY_SIZE], int x1, int y1, int x2, int y2){

    bool result = false;
    if (visibleArray[x1][y1] == hiddenArray[x2][y2]){
        result = true;
    }
    else if (visibleArray[x1][y1] == 'X' || hiddenArray[x2][y2] == 'X'){
        result = false;
    }
    return result;
}

void updateArray (char visibleArray[][ARRAY_SIZE], char hiddenArray [][ARRAY_SIZE], bool correct, int x1, int y1, int x2, int y2){

    if (correct != 0){//Update Array
        cout << "  1 2 3 4" << endl;
        for(int row = 0; row < ARRAY_SIZE; row++){
            cout << row + 1 << " ";
            for (int col = 0; col < ARRAY_SIZE; col++){
                if (row == x1 && col == y1){
                    visibleArray[row][col] = hiddenArray[row][col];
                    cout << visibleArray[row][col] << " ";
                }
                else if (row == x2 && col == y2){
                    visibleArray[row][col] = hiddenArray[row][col];
                    cout << visibleArray[row][col] << " ";
                }
                else{
                    cout << visibleArray[row][col] << " ";
                }
            }
            cout << endl;
        }
    }
    else {//Show Answers
        cout << "  1 2 3 4" << endl;
        for (int row = 0; row < ARRAY_SIZE; row++){
            cout << row + 1 < " ";
            for (int col =  0; col < ARRAY_SIZE; col++){
                if(row == x1 && col == y1){
                    cout << hiddenArray[row][col] << " ";
                }
                else if (row == x2 && col == y2){
                    cout << hiddenArray[row][col] << " ";
                }
                else {
                    cout << visibleArray[row][col] <<  " ";
                }
            }
            cout << endl;
        }
    }

}


int main() {

    srand(time(0));

    int arr[PAIRS];
    int x1, x2, y1, y2;

    char hiddenArray[ARRAY_SIZE][ARRAY_SIZE];
    char visibleArray[ARRAY_SIZE][ARRAY_SIZE];
    int guessArray[ARRAY_SIZE][ARRAY_SIZE];

    for (int row = 0; row < ARRAY_SIZE; row++) {
        for (int col = 0; col < ARRAY_SIZE; col++) {
            hiddenArray[row][col] = 'X';
        }

    }



    //TO SEE THE TEMP ARRAY -- DELETE BEFORE SUBMISSION
/*  for (int row = 0; row < ARRAY_SIZE; row++) {
        for (int col = 0; col < ARRAY_SIZE; col++) {
            cout << hiddenArray[row][col] << " ";
        }
        cout << endl;
    }

    cout << endl;
*/
/*  for (int i = 0; i <= PAIRS - 1; i++) {
        int index1 = rand() % ARRAY_SIZE;
        int index2 = rand() % ARRAY_SIZE;
        if (hiddenArray[index1][index2] == 'X') {
            hiddenArray[index1][index2] = secretLetters(i);
        }
        else {
            --i;
        }
    }
*/
    initArray(hiddenArray, ARRAY_SIZE);
    //REVEAL HIDDEN AREA
    for (int row = 0; row < ARRAY_SIZE; row++) {
        for (int col = 0; col < ARRAY_SIZE; col++) {
            cout << hiddenArray[row][col] << " ";
        }
        cout << endl;
    }
    cout << endl;
    dispArray(visibleArray, ARRAY_SIZE);
    int tries = 0;
    bool correct = 0;
    do{
        int x1, y1, x2, y2;
        x1 = userChoiceX();
        y1 = userChoiceY();
        x2 = userChoiceX();
        y2 = userChoiceY();
        correct =  check (visibleArray, hiddenArray, x1, y1, x2, y2);
        updateArray (visibleArray, hiddenArray, correct, x1, y1, x2, y2);
        if (correct != 0){
            cout << "Good Job! You guessed correct!" << endl;
            cout << "You have " << 9 - tries << " to guess the rest!" << endl;
        }
        else {
            cout << "Sorry! You guessed wrong." << endl;
            cout << "You have " << 9 - tries << " to guess the rest!" << endl;
        }
        tries++;
    }
    while (tries != 9);

    return 0;
}

标签: c++

解决方案


经过各种各样的启发,我找到了自己问题的答案,所以在这里供其他人将来参考。

正确的功能如下:

bool check (char hiddenArray [][ARRAY_SIZE], int x1, int y1, int x2, int y2){
    bool result = false;

    if (hiddenArray[x1][y1] == hiddenArray[x2][y2] && hiddenArray[x1][y1] != 'X' && hiddenArray[x2][y2]){
        result = true;
    }
    else if (hiddenArray[x1][y1] > ARRAY_SIZE || hiddenArray[x2][y2]){
        result = false;
    }
    return result;
}

//UPDATES ARRAY WITH CORRECT ANSWERS
void updateArray (char visibleArray[][ARRAY_SIZE], char hiddenArray [][ARRAY_SIZE], int x1, int y1){
    visibleArray[x1][y1] = hiddenArray[x1][y1];
}

我还发现了一个错误,它在我的用户输入函数中返回了奇怪的值,它们也在下面得到更正,以免混淆用户:

//USER CHOICE FUNCTIONS
int userChoiceX (){
    int x;
    cout << "Please select a row value:";
    cin >> x;
    return x-1;
}

int userChoiceY (){
    int y;
    cout << "Please select a column value:";
    cin >> y;
    return y-1;
}

推荐阅读