2011-05-03 6 views
3

카드 게임에서 욕심 많은 알고리즘을 구현하는 방법을 알고 싶습니다. C#을 사용하십시오. 이 게임은 차례 기반 게임입니다. AI가 일부 카드를 발행해야하는 경우, 이 이미 테이블에있는 다른 카드의 최신 상태를 기반으로해야합니다. 누구든지이 문제에 대한 해결책이 있습니까, 아니면 어쩌면 나를 시작할 수있는 참조일까요? 미리 감사드립니다!게임 기반의 게임에 대한 욕심 많은 알고리즘

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); 
+0

카드 게임 (또는 라이브러리 함수를 사용) 것입니까? C#을 아십니까? 너 혼자 해봤 니? 이 숙제는 무엇입니까? 그렇다면 숙제 태그를 추가하십시오. –

+0

아니요 숙제가 아니라 .. 궁금한 점은 게임을 만드는 법을 배우는 것입니다.이 순간 나는 카드를 섞어서 모든 플레이어에게 카드를 배포하는 코드를 작성합니다 –

+0

@user : 내 의견이 있으면 죄송합니다. 조금 무례하다. SO에 오신 것을 환영합니다! –

답변

4

This 책은 AI에 대한 성경과 같다 : 지금은

나는 단지 카드를 셔플하는 코드를 마쳤다. 이 책의 처음 세 부분을 읽는 것으로 시작할 수 있습니다.

+0

나는이 답변에 완전히 동의한다. 그것은 확실히 AI 성경이다. 욕심 많은 알고리즘에 초점을 맞춘 훌륭한 문서는 [this] (http://www.cs.berkeley.edu/~vazirani/algorithms/chap5.pdf)입니다. – phuibers

+0

고마워요, 이제 시작하겠습니다. :) –

0

욕심 많은 알고리즘이 무슨 뜻인지 알지 못합니다. 당신은 딜러가 어떤 목표를 최대화 시키거나 뭔가를 위해 좋은 전략을 찾도록 노력하지 않고 있습니까?

이것은 카드 게임을 시뮬레이션하는 것과 같습니다. 우리는 당신이 실제로하고 싶은 것을 나중에 알 필요가 있습니다.

는 의사 코드 : 그가 reshuffles 때 딜러가 다시 모든 카드가 가정하기 때문에 물론

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

+0

안녕하세요. 실종입니다. 왜 2 번 덱을 섞으세요. 게임 규칙에서 2 개의 카드 덱을 사용하고 각 덱에서 54 개의 카드를 사용하기 때문에 2 개의 조커가 포함됩니다. 첫번째 갑판을위한 것이고 두번째 갑판을위한 루프 2입니다. –

관련 문제