非常抱歉,如果时间太长-昨天我发布了一个有关我要编写的游戏程序的问题,在一些人的帮助下,我很快就弄清了所有问题。
程序的绝大多数已经完成,但是我还有最后一个奇怪的任务要完成。我编写了一个函数printGrid,该函数从char数组中的每16个字符束中打印一个随机元素。例如(非常难看-请原谅我的初学者代码):
char gameZero[outer_size][inner_size] = {
{'A','A','C','I','O','T'}, {'A','H','M','O','R','S'},
{'E','G','K','L','U','Y'}, {'A','B','I','L','T','Y'}, {'A','C','D','E','M','P'},
{'E','G','I','N','T','V'}, {'G','I','L','R','U','W'}, {'E','L','P','S','T','U'},
{'D','E','N','O','S','W'}, {'A','C','E','L','R','S'}, {'A','B','J','M','O','Q'},
{'E','E','F','H','I','Y'}, {'E','H','I','N','P','S'}, {'D','K','N','O','T','U'},
{'A','D','E','N','V','Z'}, {'B','I','F','O','R','X'}
};
void printGrid() {
mt19937 gen(time(nullptr));
uniform_int_distribution<int> random_inner(0, inner_size - 1);
int n = random_inner(gen);
cout << "+---+---+---+---+\n";
for (int i = 0; i < 4; i++)
cout << "| " << gameZero[i][n] << " ";
cout << "\n+---+---+---+---+\n";
for (int i = 4; i < 8; i++)
cout << "| " << gameZero[i][n] << " ";
cout << "\n+---+---+---+---+\n";
for (int i = 8; i < 12; i++)
cout << "| " << gameZero[i][n] << " ";
cout << "\n+---+---+---+---+\n";
for (int i = 12; i < 16; i++)
cout << "| " << gameZero[i][n] << " ";
cout << "\n+---+---+---+---+\n";
}
这将打印一个4x4游戏板,供用户查看。我现在正在尝试编写一种toString函数,该函数采用在printGrid中生成的随机数并将它们打印到没有空格的单行字符串中。我想解决的问题是,我有各种各样的角色,每次玩家开始新游戏时,角色都会改变。这16个字符来自16个骰子的固定数组,每个数组包含6个字符。是唯一可行的方法来将这些新随机选择的字符存储到一个空数组中,以便用户在需要时可以使用toString函数简单地打印它们吗?然后我要解决的另一个障碍是,每次用户想要再次开始时都删除该数组。如果是这种情况,我可以将它们存储在向量中并使用诸如vector :: clear之类的方法来解决吗?
printGrid函数的当前输出:
+---+---+---+---+
| T | M | E | L |
+---+---+---+---+
| A | V | L | S |
+---+---+---+---+
| E | A | Qu| F |
+---+---+---+---+
| E | D | N | O |
+---+---+---+---+
我想创建的toString函数的所需输出:
TMELAVLSEAQuFEDNO
非常抱歉,如果阅读太多或感到困惑-我几乎整天都在做这件事,此刻我的大脑有点发呆了。任何提示,不胜感激!
您具有选择字符的逻辑,例如:
for (int i = 0; i < 4; i++)
cout << "| " << gameZero[i][n] << " ";
您可以使用std::string
和运算符+=
将字符附加到字符串:std :: string all_letters;
for (int i = 0; i < 4; ++i)
{
all_letters += gameZero[i][n];
}
编辑1:扩展循环由于不需要按行打印,因此可以遍历整个数组:
std::string all_letters;
for (int i = 0; i < 16; ++i)
{
all_letters += gameZero[i][n];
}