Сохраняйте координаты соседних шахт в списке

#list #tuples

#Список #кортежи

Вопрос:

Я хотел бы иметь возможность хранить пары координат (x, y), которые представляют соседей мин в приложении minesweeper. Инструкции HW

Я настроил оператор if, чтобы сначала проверить, присутствует ли шахта. Я начал создавать список координат соседей.

  private List<Tuple<int,int>> getneighbors(int x, int y)
    {
        if (isMinePresent(x,y) == true)
        {
            List<Tuple<int, int>> neighbors = new List<Tuple<int, int>> () {x 1,y},{x 1,y 1} //etc;

            {

            }

        }
    }
}
 

Я хотел бы составить список из нескольких пар координат, каждая из которых представляет соседа. К сожалению, я получил сообщение об ошибке: «C # не содержит конструктор, который принимает 2 аргумента».

Комментарии:

1. Есть ли какая-то особая причина, по которой вы решили бы сделать это таким образом?

2. Это было в HW, и я должен использовать кортеж для хранения координат.

3. Конечно, это домашнее задание. Вот почему компьютерные программы создают людей, которые понятия не имеют, как разрабатывать программное обеспечение. Я занимаюсь программным обеспечением уже 15 лет, и мне никогда не был нужен и я бы не хотел использовать кортеж.

4. И это всего лишь моя напыщенная речь против com sci. Не имеет никакого отношения к вопросу.

5. Да, мой профессор понятия не имеет, что он делает lmao. Он просто бросил в нас Кортежи, не изучив ни одной из основ.

Ответ №1:

Этот метод принимает координаты и возвращает все допустимые координаты соседей.

Вопрос, на который здесь необходимо ответить, заключается в том, как определить, каковы действительные соседи? Для этого требуется немного логики — квадрат имеет соседей в своем ряду, предыдущий ряд и следующий ряд. Потенциально возможно до 8 соседей.

Взгляните на этот стекблитц и немного поиграйте с ним. Я написал это на машинописном языке, но эти концепции непосредственно применимы к C #.

Я определяю соседа как «допустимого», если его координата находится в пределах одной из начальных координат, но НЕ выходит за пределы.

 getNeighbors(inX: number, inY: number) {

    // Get proper bounds
    var lowerX = Math.max(0, inX-1);
    var upperX = Math.min(inX 1, this.size);
    var lowerY = Math.max(0, inY-1);
    var upperY = Math.min(inY 1, this.size);

    var xCoords = Enumerable.rangeTo(lowerX, upperX);
    var yCoords = Enumerable.rangeTo(lowerY, upperY);          

    var result = new Array<Coordinate>();
    xCoords.forEach(x => {
       yCoords.forEach(y => {
         if (x !== inX || y !== inY) {
           result.push({x, y});
         }
       });
    });

    return resu<
  }