#algorithm #greedy
#алгоритм #жадный
Вопрос:
Мне нужно знать, как реализовать жадный алгоритм в карточной игре, используя C #. Игра представляет собой пошаговую игру. Когда ИИ должен выдать несколько карт, это должно основываться на последнем состоянии других карт, которые уже есть на столе. У кого-нибудь есть решение для этого или, может быть, ссылка для меня, чтобы начать? Заранее спасибо!
На данный момент я закончил код только для перетасовки карт:
List<int> cards = new List<int>();
for (int j = 1; j <= 2; j )
{
for (int i = 1; i <= 54; i )
{
cards.Add(i);
}
}
List<int> ShuffledCards = new List<int>();
Random random = new Random();
int iterations = cards.Count;
int index = 0;
for (int j = 1; j <= 2; j )
{
for (int i = 0; i < iterations; i )
{
index = random.Next(0, iterations - i);
ShuffledCards.Add(cards[index]);
cards.RemoveAt(index);
}
iterations = cards.Count;
index = 0;
}
ShuffledCards.Reverse(0, ShuffledCards.Count);
ShuffledCards.RemoveRange(0, 8);
ShuffledCards.Reverse(0, ShuffledCards.Count);
Комментарии:
1. Какая карточная игра? Вы знаете какой-нибудь C #? Вы сами что-нибудь пробовали? Это домашнее задание? Если да, пожалуйста, добавьте тег «домашнее задание».
2. нет, это не домашнее задание .. мне просто любопытно научиться создавать game..at на данный момент я просто создаю код для перетасовки карты и раздаю эту карту всем игрокам за столом
3. @user: Прошу прощения, если мой комментарий был немного грубым. Добро пожаловать в SO!
Ответ №1:
Эта книга похожа на библию об ИИ. Вы можете начать с чтения первых 3 частей этой книги.
Комментарии:
1. Я полностью согласен с этим ответом, это определенно библия искусственного интеллекта. Это хороший документ, который конкретно посвящен жадным алгоритмам.
Ответ №2:
Я не понимаю, что вы подразумеваете под жадным алгоритмом. Вы же не пытаетесь заставить дилера максимизировать какую-то цель или найти хорошую стратегию для чего-то, не так ли?
Это больше похоже на имитацию карточной игры. Нам нужно знать, что вы на самом деле хотите делать потом.
Псевдокод:
//Your deck state:
deck //list of cards in the deck (in top->bottom order) (initially shuffled)
i; //index of the card at the top of the deck
void dreshuffle(){
shuffle(cards);
i = 0;
}
int get_card(){
if(i >= cards.length){
//no cards left in pile
reshuffle()
}
return cards[i ];
}
Конечно, это всего лишь упрощенный пример, поскольку предполагается, что при перетасовке все карты возвращаются дилеру. Возможно, вам потребуется добавить стопку сброса или что-то подобное в соответствии с вашими правилами игры.
Кстати, ваш метод перетасовки странный. Почему вы перетасовываете дважды? Более нормальным подходом было бы
list;
n = list.count - 1 //last index in list
while(n >= 0){
i = random integer in range [0,n] (inclusive)
swap(list[i], list[n])
n -= 1
}
(Или просто используйте библиотечную функцию)
Комментарии:
1. привет, не хватает.. почему я тасую колоду дважды,,потому что по правилам игры используется 2 колоды карт, по 54 карты в каждой колоде, включая 2 joker..so цикл 1 предназначен для первой колоды, а цикл 2 — для второй..