2011-05-03 72 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#嗎?你有沒有嘗試過自己?這是作業嗎?如果是這樣,請添加作業標籤。 – 2011-05-03 11:18:34

+0

不,這不是家庭作業..我只是好奇學習創造一個遊戲..在這一刻,我只是創建代碼洗牌和分發該卡爲所有球員在桌上 – 2011-05-03 11:28:37

+0

@用戶:我很抱歉,如果我的評論是有點粗魯。歡迎來到SO! – 2011-05-03 11:50:53

回答

4

This本書就像是一個關於AI聖經。您可以先閱讀本書的前三部分。

+0

我完全同意這個答案,這絕對是AI的聖經。一個專注於貪婪算法的好文檔是[this](http://www.cs.berkeley.edu/~vazirani/algorithms/chap5.pdf)。 – phuibers 2011-05-03 11:22:45

+0

感謝所有,,我現在就開始.. :) – 2011-05-03 11:37:55

0

我不明白貪婪算法的含義。你不是想讓經銷商最大限度地實現某個目標,或者爲你找到一個好的策略?

這看起來更像是一個模擬紙牌遊戲的問題。我們需要知道你事後想要做什麼。

僞代碼:

//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張牌,每張牌54張牌,包括2 joker..so循環1是第一個甲板和第二個甲板的循環2。 – 2011-05-04 09:34:22