我正在做一个十五岁的游戏,我一直坚持关于胜利条件的数组语法。
这是我初始化瓷砖的方式:
string tile[4][4] = { { "15","14","13","12" },{ "11","10","9","8" },{
"7","6","5","4" },{ "3","1","2"," _" } };
这是我想要的获胜条件(基本上所有瓷砖都按顺序排列):
while (tile[4][4] != { {"1", "2", "3", "4"}, { "5","6","7","8" }, {
"9","10","11","12" }, { "13","14","15","_" } }) {...}
我的问题是第二个会导致语法错误。可能由括号指定值的位置而不是像第一次初始化那样的大小引起。我希望条件是整个数组,而不仅仅是该数组中的特定值。
我已尝试用条件做空括号但又无效。
如何将整个数组表达为条件?
答案 0 :(得分:2)
语法
string tile[4][4] = { ... };
声明一个内置语言数组(也称为C数组) - 或实际上是string
s的数组数组。 C数组的问题在于它们通常不会按照我们喜欢的方式运行。特别是在这种情况下,检查与另一个C数组的相等性有点痛苦。幸运的是,有一个名为std::array<T, N>
的标准库类型,它声明了一个类型T
和大小N
的数组,其行为更加规律。使用std::array
而不是C数组几乎总是更好。
因此,我们可以说string tile[4][4]
而不是std::array<std::array<string, 4>, 4> tile
。但是在任何地方输入都有点痛苦,因此我们将为该类型引入别名,我们称之为board
:
using board = std::array<std::array<string, 4>, 4>;
现在我们可以像以前一样声明board
:
board tiles = { { "15","14","13","12" },
{ "11","10","9","8" },
{ "7","6","5","4" },
{ "3","1","2"," _" } };
现在我们还要做的是声明另一个包含获胜位置的变量:
const board completed = { { "1", "2", "3", "4" }, /* etc... */ }};
(此变量为const
,因为获胜位置永远不会改变)。现在,在您的while
循环中,您可以说:
while (tiles != completed) { ... }
将按照您的喜好工作,并且比以前更容易阅读。