Я работаю над программой, которая скрывает число в сетке (двумерный массив, 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 или пока не будет найдено = true отображать ‘X’), и я не уверен, как дать подсказку о том, где элемент спрятан в зависимости от направления угадывания. если элемент находится севернее, где пользователь угадал свое первое начальное место (столбец и строка), он должен отобразить подсказку, основанную на этом местоположении. Как я мог реализовать это?
while(guess < 9
&&!found
) либо условие не выполнено должен оставьте выход, так что вы останетесь в курсе, только если и то и другое встречаются … Примечание: лучше код стиль не сравнивать логические значения, просто используйте if(condition)
или же if(!condition)
как в состоянии фиксированной петли.if (col> 0) { --col; ++ догадка;
Аналогично для других направлений …
0
Вы можете добавить следующее условие к проверке границы:
if (col> 0 && массив [col - 1] [row]! = 0)
Опять другие направления аналогично.
'n'
или же 'w'
к вашей подсказке для вертикального или горизонтального направления соответственно, если положительный, 's'
или же 'e'
в противном случае, нет подсказки для соответствующего направления (самый простой вариант, сначала предпочтительнее диагональные направления).Примечание array[col][row]
Обычно вы называете индексы массива наоборот: array[row][col]
; при итерации вы используете внешний цикл для строк, внутренний цикл для столбцов (для извлечения выгоды из локальности данных):
for(r = 0; r < rows; ++r)
for(c = 0; c < cols; ++c)
std::cout << getCharFor(array[r][c]);
Север и юг, с кодом выше, все еще связаны с вертикалью, восток и запад с горизонтальным направлением …
редактировать в ответ на ваш комментарий:
если (d == "e") { if (/ * col> 0 &&* / цв <= 10) // ^^^^^^^^^ устарел ... }
NxN
максимальный индекс, к которому вы можете получить доступ, N - 1
, так что вы можете идти на восток, только если вы в данный момент находитесь максимально N - 2
(if(col < N-1)
)если (d == "sw") { если (строка < N - 1 && col> 0) }
если (d == "sw") { if (array [row + 1] [col - 1]! = 0) // уже посетил; при условии, что вы инициализировали массив с 0 ... }
Примечание: для подсказок осталась еще не рассмотренная проблема: что, если пользователь не следует им, и из-за этого программа дает подсказку полю, которое уже было посещено ???
Других решений пока нет …