【问题标题】:I am creating a sudoku game in C++ and i need to diplay the game board. How can i display an Array with charcters sectioned off?我正在用 C++ 创建数独游戏,我需要显示游戏板。如何显示一个带有分隔字符的数组?
【发布时间】:2016-06-23 04:16:06
【问题描述】:

我的任务是在我的编程课上使用数组创建一个数独游戏。

我做了一个非常混乱的尝试,试图在 3x3 方块之间显示带有“-”的 9x9 数组。

代码可以编译,但是板子的显示是关闭的,“-”出现在不应该出现的地方,有时应该出现的地方却不出现。

我是 C++ 新手,感谢您的帮助!这是我的显示功能:

for (int x = 0; x < 11; x++)
{
for (int y = 0; y < 11; y++)
{
    if(board[x][y] == 0)
    {
        cout << setw(2) << "   ";
    }
    else
    {
     if (x > 3 && x < 7 && y > 3 && y < 7 && board[x-1][y-1] != 0)
    {
        cout << setw(2) << board[(x-1)][(y-1)] << " ";
    }
    else if (x > 3 && x < 7 && y < 3  && board[x-1][y] != 0)
    {
        cout << setw(2) << board[(x-1)][(y)] << " ";
    }
    else if (x > 7 && y < 3 && board[x-2][y] != 0)
    {
        cout << setw(2) << board[(x-2)][(y)] << " ";
    }
    else if (x < 3 && y > 3 && y < 7 && board[x][y-1] != 0)
    {
        cout << setw(2) << board[(x)][(y-1)] << " ";
    }
    else if (x < 3 && y > 7 && board[x][y-2] != 0)
    {
        cout << setw(2) << board[(x)][(y-2)] << " ";
    }
        else if (x > 3 && x < 7 && y > 7 && board[x-1][y-2] != 0)
    {
        cout << setw(2) << board[(x-1)][(y-2)] << " ";
    }
    else if (x > 7 && y > 7 && board[x-2][y-2] != 0)
    {
        cout << setw(2) << board[(x-2)][(y-2)] << " ";
    }
    else if (x > 7 && y > 3 && y < 7 && board[x-2][y-1] != 0)
    {
        cout << setw(2) << board[(x-2)][(y-1)] << " ";
    }

    else if (x < 3 && y < 3)
    {
        cout << setw(2) << board[x][y] << " ";
    }
    else 
    {
        cout << setw(2) << "-" << " ";
    }
    }
}
cout << endl;
}

【问题讨论】:

  • 找出程序不工作原因的最佳方法是使用调试器
  • 你说你的程序是一个 9x9 数组,那为什么你的 for 循环是从 0 到 11 呢?
  • 您需要将数据的 view 与它的 model 分开。棋盘应存储为整数,这就是数独数字。具体来说,一个 9x9 网格。然后,您应该编写一个函数来将此网格转换为您想要的格式。

标签: c++ arrays sorting display


【解决方案1】:

我不明白其中的复杂性:

static const char row_separator[] =
    "+---+---+---+---+---+---+---+---+---+\n";
for (unsigned int board_row = 0; board_row < 9; ++board_row)
{
    std::cout << row_separator;
    cout << "| ";
    for (unsigned int board_column = 0;
         board_column < 9;
         ++board_column)
    {
       std::cout << board[board_row][board_column] << " |";
    }
    cout << "\n";
}
std::cout << row_separator;

许多sudoko板被声明为:

unsigned int board[9][9];

因为它是一个二维数组,所以可以使用 2 个for 循环打印所有插槽。

使板子成为一个包含空格和其他字符的字符数组会使程序复杂化。为 printing 函数留出间距。

【讨论】:

  • 应该 std::cout &lt;&lt; board[board_row][board_column] &lt;&lt; " |";std::cout &lt;&lt; board[board_row][board_column] &lt;&lt; " | ";,在 | 之后有一个空格使对齐正确?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
  • 2011-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多