首页 > 解决方案 > 当您创建的棋盘中有一个超过 1 位的数字时,您应该怎么做才能防止它影响棋盘的形状

问题描述

我是 C++ 新手。我正在尝试实现一个基于 C++ 的 2048 游戏进行练习。我正在尝试首先创建一个板。

我遇到的问题是,当数字变成两位数时,它会影响墙壁的形状,如下所示:

在此处输入图像描述

这是测试代码:

#include<iostream>
using namespace std;

int main()
{
    string gameboard[24][25];
    int p = 24 / 4;
    for (int i = 0; i < 24;i++)
    {
        for (int j = 0; j < 25; j++)
        {
            if (i == 0 || j == 0 || i == 23|| j == 24 || (i % p) == 0 || (j % p) == 0)
            {
                gameboard[i][j] = '*';
            }
            else
            {
                gameboard[i][j] = " ";
            }
        }
    }

    gameboard[3][15] = "128";
    for (int i = 0; i < 24; ++i)
    {
        for (int j = 0; j < 25; ++j)
        {
            cout << gameboard[i][j] << " ";
        }
        cout << endl;
    }
}

所以我放了一个字符串数字“128”,它会破墙。我应该怎么做才能防止这种情况发生?

标签: c++

解决方案


看起来您实际上想要一个char gameboard[24][25];而不是二维字符串数组。当电路板的每个单元格正好是 1 个字符宽时,您只需逐个字符地打印它即可获得预期的输出。

如果这样做,您需要将单个数字而不是完整数字作为字符串放置:

gameboard[3][13] = '1';
gameboard[3][14] = '2';
gameboard[3][15] = '8';

我建议将其包装在一个函数中:

void place_number(int number, int row, int col,char gameboard[24][25]) {
      int x = row * a + b;
      int y = col * c + d;
      std::string s = std::to_string(number);
      for (int i=0; i<s.size(); ++i) {
         gameboard[x][y+i] = s[i];
      }
}

使用系数a、和选择b,使得数字最终位于正确的位置。cd

进行这种格式化打印会变得相当麻烦。如果您需要更复杂的控制,我建议为此使用库,例如​​ ncurses。


推荐阅读