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 или пока не будет найдено = true отображать ‘X’), и я не уверен, как дать подсказку о том, где элемент спрятан в зависимости от направления угадывания. если элемент находится севернее, где пользователь угадал свое первое начальное место (столбец и строка), он должен отобразить подсказку, основанную на этом местоположении. Как я мог реализовать это?

0

Решение

  1. Должно быть: while(guess < 9&&!found) либо условие не выполнено должен оставьте выход, так что вы останетесь в курсе, только если и то и другое встречаются … Примечание: лучше код стиль не сравнивать логические значения, просто используйте if(condition) или же if(!condition) как в состоянии фиксированной петли.
  2. Помните, что вы должны проверить границы вашей доски:
    if (col> 0)
    {
    --col;
    ++ догадка;

    Аналогично для других направлений …

  3. Вам необходимо проверить, было ли посещено поле, предназначенное для посещения. Предполагая, что поля не посещены, имеют значение 0Вы можете добавить следующее условие к проверке границы:
    if (col> 0 && массив [col - 1] [row]! = 0)

    Опять другие направления аналогично.

  4. Для подсказок рассчитайте расстояния координат между целью и текущей позицией; если отрицательный, добавьте '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]);

Север и юг, с кодом выше, все еще связаны с вертикалью, восток и запад с горизонтальным направлением …

редактировать в ответ на ваш комментарий:

  1. Вам не нужно проверять границу, от которой вы уходите …
    если (d == "e")
    {
    if (/ * col> 0 &&* / цв <= 10)
    // ^^^^^^^^^ устарел ...
    }
  2. Если ваш массив имеет размер NxNмаксимальный индекс, к которому вы можете получить доступ, N - 1, так что вы можете идти на восток, только если вы в данный момент находитесь максимально N - 2 (if(col < N-1))
  3. Если вы идете по диагонали, вы должны проверить горизонтальное и вертикальное направление:
    если (d == "sw")
    {
    если (строка < N - 1 && col> 0)
    }
  4. Если вы определили, что вы не выходите из игры с назначенным ходом, вы можете получить доступ к полю в указанном направлении:
    если (d == "sw")
    {
    if (array [row + 1] [col - 1]! = 0)
    // уже посетил; при условии, что вы инициализировали массив с 0 ...
    }

Примечание: для подсказок осталась еще не рассмотренная проблема: что, если пользователь не следует им, и из-за этого программа дает подсказку полю, которое уже было посещено ???

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]