井字游戏 BIG 板使用功能和 2D 阵列

Tic-Tac-Toe BIG board using functions and 2D arrays

本文关键字:功能 2D 阵列 游戏 BIG      更新时间:2023-10-16

我已经尝试解决这个问题一个多星期了。我的任务是cout(显示)一个看起来像这样的大井字棋板:

0000 | 1111 | 2222
0000 | 1111 | 2222
0000 | 1111 | 2222
0000 | 1111 | 2222
------------------
3333 | 4444 | 5555
3333 | 4444 | 5555
3333 | 4444 | 5555
3333 | 4444 | 5555
------------------
6666 | 7777 | 8888
6666 | 7777 | 8888
6666 | 7777 | 8888
6666 | 7777 | 8888

说明中建议的一些功能是:"填充 BigArray()//用 vales 0-8 填充 12X12 数组 assignValueToBigArray()//用于填充 12X12 数组的 4X4 部分,该部分对应于人类或计算机的特定移动"

我觉得我理解 2D 数组,并且能够打印一个 4x4 的数字块。但是,我尝试的所有内容都会导致块直接向下打印,而不是以 3x3 结构或所有数字打印在一长行中。

我得到的最接近的是下面的功能,但是,它并不完全使用2D数组,这是任务的重点,我知道一旦玩家选择一个点,就试图操纵一个点。

//Global constants
const int BOARD_ROWS = 3;
const int BOARD_COLS = 3;
int main()
{
    displayBoard();
    return 0;
}
    void displayBoard()
    {
        int spot = 0;
        for (int row = 0; row < BOARD_ROWS; row++)
        {
            for (int col = 0; col < BOARD_COLS; col++)
            {
                cout << spot << spot << spot << spot
                    << " | " << (spot + 1) << (spot + 1) << (spot + 1) << (spot + 1)
                    << " | " << (spot + 2) << (spot + 2) << (spot + 2) << (spot + 2)
                    << endl;
            }
            cout << "------------------" << endl;
            spot = spot + 3;
        }
    }//end displayBoard

我绝对是一个新手,感谢任何帮助。谢谢!!!

好吧,你没有编写建议的函数,也没有使用 2D 数组,正如你所说,"这是赋值的重点"......

也许您可以从 2D 数组开始,看看函数可能是什么样子的:

#include <iostream>
using std::cout;
const int BOARD_SIZE = 3;
const int SECTION_SIZE = 4;
constexpr int BIG_ARRAY_DIM = BOARD_SIZE * SECTION_SIZE;
void populateBigArray( int b[][BIG_ARRAY_DIM] );
void assignValueToBigArray( int b[][BIG_ARRAY_DIM], int r, int c, int val );
void printBigArray( int b[][BIG_ARRAY_DIM] );
int main() {
    int board[BIG_ARRAY_DIM][BIG_ARRAY_DIM];
    populateBigArray(board);
    printBigArray(board);
    return 0;
}

然后,您可以实现这些函数,从如下所示的内容开始:

void populateBigArray( int b[][BIG_ARRAY_DIM] ) {
    int k = 0;
    for ( int i = 0; i < BOARD_SIZE; ++i ) {
        for ( int j = 0; j < BOARD_SIZE; ++j ) {
            assignValueToBigArray(b,i,j,k);
            ++k;
        }
    }
}
void assignValueToBigArray( int b[][BIG_ARRAY_DIM], int r, int c, int val ) {
    int row = r * SECTION_SIZE;
    int col = c * SECTION_SIZE;
    for ( int i = 0; i < SECTION_SIZE; ++i ) {
        for ( int j = 0; j < SECTION_SIZE; ++j ) {
            b[row + i][col + j] = val;
        }
    }
}
void printBigArray( int b[][BIG_ARRAY_DIM] ) {
    for ( int i = 0, l = 1; i < BIG_ARRAY_DIM; ++i, ++l ) {
        for ( int j = 0, k = 1; j < BIG_ARRAY_DIM; ++j, ++k ) {
            cout << b[i][j];
            if ( k == SECTION_SIZE ) {
                if ( j == (BIG_ARRAY_DIM - 1) ) {
                    cout << 'n';
                } else {
                    cout << " | ";
                    k = 0;
                }
            }
        }
        if ( l == SECTION_SIZE  &&  i != (BIG_ARRAY_DIM - 1) ) {
            cout << "------------------n";
            l = 0;
        }
    }
}