c++ - 如何在 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;
}
解决方案
经过各种各样的启发,我找到了自己问题的答案,所以在这里供其他人将来参考。
正确的功能如下:
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;
}
推荐阅读
- reactjs - 当我尝试添加圆圈时反应传单我的地图是白色的
- export - 如何控制Stata中使用asdoc将判别分析结果导出为word的格式?
- python - 返回 NUMA 节点 0 TensorFlow
- reactjs - 尽管使用了 connect 和 mapDispatchToProps,调度操作并未触发减速器
- oauth-2.0 - Dropbox api Oauth 响应“不能为此应用授予任何范围请求”
- wordpress - 在事件日历插件中使用 Timber 和更新的日历设计
- typescript - 如何要求一个类型是一个排序的数组,而不仅仅是一个数组
- bootstrap-4 - 我如何在 nuxtjs 上安装引导程序
- flutter - 是否有任何解决方案可以使此代码正常工作
- flutter - 我如何在颤动中进行 2 对齐