жадный алгоритм для пошаговой игры

#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 — для второй..