Я новичок в программировании, и я пытаюсь добавить случайное движение бота в небольшую игру, которую я сделал. Моя идея заключалась в том, чтобы составить список кортежей всех допустимых ходов, а затем выбрать случайный кортеж из этого списка, чтобы затем деконструировать и изменить значение в 2D-массиве. Я просмотрел весь Интернет и нашел способ составить список кортежей (я думаю), но не смог выбрать случайный элемент из этого списка.
Вот что я пробовал:
List<Tuple<int, int>> legalMoves; // To make the list of tuples
// Later on in a double for-loop that iterates through all the rows and columns of the 2D-array I check if that certain row and column combination is a legal move and then add it to the list like so:
legalMoves.Add(Tuple.Create(row, col));
//Then in a different method I try to pick a random element from that list (this doesn't work)
Random random = new Random();
int randomIndex = random.Next(legalMoves.Count);
(int, int) randomMove = legalMoves[randomIndex];
В последней строке выдает следующую ошибку: Ошибка CS0029 Не удается неявно преобразовать тип «System.Tuple<int, int>» в «(int, int)»
Есть ли способ заставить это работать?
Заранее спасибо!
Если у вас есть сомнения, объявите его как var randomMove = legalMoves[randomIndex];
и посмотрите, какой тип выводится
Пожалуйста, перечитайте минимально воспроизводимый пример, чтобы ваши будущие вопросы были лучше - т.е. нет абсолютно ничего о случайных числах, связанных с вопросом, который вы задаете - (int, int) randomMove = Tuple.Create(1,2);
это весь код, необходимый для того, чтобы задать этот вопрос... (что также получить шанс предоставить лучшее название).
Синтаксис (int, int)
определяет ValueTuple<int,int>
, а не Tuple<int,int>
. Измените определение списка на:
List<ValueTuple<int, int>> legalMoves;
и Tuple.Create
к ValueTuple.Create
Это, казалось, решило мою первоначальную проблему, но когда я попытался запустить его, это дало мне следующую ошибку в том месте, где он добавляет допустимые ходы в список кортежей: «Ссылка на объект не установлена на экземпляр объекта».
@ Джаспер, ты инициализировал List<>
?
Спасибо большое, теперь все исправлено!
Правильный тип — ValueTuple, а не Tuple.