#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<
}