我正在开发一个隐藏网格中数字的程序(2d数组,10列和10行,标有数组,上面填充了。或 - 等字符)并将网格打印到屏幕上。
行和列的num是随机生成的,并以“X”形式保存到数组中,仅在找到时显示
用户输入行和列....然后将用户对网格的猜测显示为屏幕上的字符。之后,选择要移动的方向...并提供关于该项目的随机位置在十次尝试总计或更少内的数组中隐藏的提示(用户无法转到在程序期间播放的先前猜测)。
例如:
while (guess <9 || found == false){
cout << "Enter your next move....n, e, s, w, ne, nw, se, sw";
cin >> d;
if (d == 'E' || d == 'e')
{
col++;
guess++;
array[col][row] = guess;
cout << "moved east";
}
else if (d == 'W' || d == 'w')
{
col--;
guess++;
array[col][row] = guess;
cout << "west...";
}
....etc
else {
guess++;
cout << "not valid move. turn is incremented";
}
然后在所有这些之后的整个while循环之后,我再次显示数组但是我不能让第一步以外的动作出现(需要它做1,2,3 ...... 10或直到found = true显示'X')并且不确定如何根据猜测方向给出隐藏项目隐藏位置的提示。如果项目位于用户猜测其第一个起始位置(列和行)的上方,则应显示基于该位置的提示。我怎么能实现呢?
答案 0 :(得分:0)
while(guess < 9
&amp;&amp; !found
),任何条件未满足 将离开,因此您只能留在如果两个都符合循环...旁注:代码样式更好的是不比较布尔值,只需使用if(condition)
或if(!condition)
作为在固定循环条件下。if(col > 0) { --col; ++guess;类似于其他方向......
0
,您可以将以下条件添加到边界检查:if(col > 0 && array[col - 1][row] != 0)同样,其他方向类似。
'n'
或'w'
,如果为正,'s'
或'e'
,否则,不提示相应方向(最简单)变体,首先倾向于对角线方向。)旁注array[col][row]
:通常,您将数组的索引命名为:array[row][col]
;如果迭代,则使用外部循环表示行,内部循环表示cols(从数据位置获利):
for(r = 0; r < rows; ++r)
for(c = 0; c < cols; ++c)
std::cout << getCharFor(array[r][c]);
北部和南部,上面的代码仍然与垂直,东部和西部以及水平方向相关联......
修改以回应您的评论:
if(d == "e") { if(/*col > 0 &&*/ col <= 10) //^^^^^^^^^ obsolete... }
NxN
,则您可以访问的最大索引为N - 1
,因此如果您当前位于N - 2
位置,则只能向东行进({ {1}})if(d == "sw") { if(row < N - 1 && col > 0) }
if(d == "sw") { if(array[row + 1][col - 1] != 0) // visited already; assuming you have initialized the array with 0... }
旁注:对于提示,还有一个未经考虑的问题:如果用户没有遵循它们,那么,由于这个原因,程序会给已经访问过的字段提示? / p>