c++ - 当您创建的棋盘中有一个超过 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”,它会破墙。我应该怎么做才能防止这种情况发生?
解决方案
看起来您实际上想要一个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
,使得数字最终位于正确的位置。c
d
进行这种格式化打印会变得相当麻烦。如果您需要更复杂的控制,我建议为此使用库,例如 ncurses。
推荐阅读
- github - Github 操作:[!] 错误:找不到模块 'rollup-plugin-commonjs'
- css - 如何用 CSS 覆盖 SVG 路径
- primefaces - p:fileIUpload 更新后未在 liferay 中调用监听器
- google-cloud-platform - 使用字符识别时,谷歌云视觉 API 是否输出置信度?
- makefile - 如何根据命令行输入更新生成文件变量?
- protractor - 大页面对象文件量角器的最佳实践
- latex - 方程列表中不同章节标签之间的垂直间距调整
- amazon-cloudformation - 部署 AWS SAM 应用程序不会为 Lambda 部署依赖项
- c# - 什么时候需要数字后缀 L(长)?
- python - 如何在接受输入时检查python中的范围?