2012-08-23 46 views
-3

我知道它不喜歡在這裏提問這樣的問題,但我似乎無法計算出我的python腳本中的所有錯誤。它模擬一場戰爭遊戲(紙牌遊戲)。它應該完美地工作,我想。如果有人知道比我更多的python會看我的腳本,並嘗試基本上解決它,我將不勝感激。我的紙牌遊戲模擬腳本中的錯誤

import random 

cards = ['ace', 'ace', 'ace', 'ace', '1', '1', '1', '1', '2', '2', '2', '2', '3', '3', '3', '3', '4', '4', '4', '4', '5', '5', '5', '5', '6', '6', '6', '6', '7', '7', '7', '7', '8', '8', '8', '8', '9', '9', '9', '9', '10', '10', '10', '10', 'jack', 'jack', 'jack', 'jack', 'queen', 'queen', 'queen', 'queen', 'king', 'king', 'king', 'king'] 

order = ['ace', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'jack', 'queen', 'king'] 
warcardvalue0 = 0 
warcardvalue1 = 0 
print "shuffling cards" 
cards = random.shuffle(cards,random.random) 
print "lets play" 
player0 = [cards[i] for i in range(len(cards)) if i % 2 == 1] 

player1 = [cards[i] for i in range(len(cards)) if i % 2 == 0] 

while (len(player0) > 0 or len(player1) > 0): 

    nextcard0 = player0[0] 
    nextcard1 = player1[0] 

    cardplayed0 = order.index(nextcard0) 

    cardplayed1 = order.index(nextcard1) 

    if cardplayed0 > cardplayed1: 

     player0.append(nextcard0) 
     player0.append(nextcard1) 
     player0.remove(nextcard0) 
     player1.remove(nextcard1) 

    elif cardplayed0 < cardplayed1: 

     player1.append(nextcard1) 
     player1.append(nextcard0) 
     player1.remove(nextcard1) 
     player0.remove(nextcard0) 

    elif cardplayed0 == cardplayed1: 
     while warcardvalue0 == warcardvalue1: 
      if len(player0) >= 4: 
       warcard0 = 4 
      elif len(player0) < 4: 
       warcard0 = len(player0) 

      if len(player1) >= 4: 
       warcard1 = 4 
      elif len(player1) < 4: 
       warcard1 = len(player1) 


      warcardvalue0 = order.index(warcard0) 
      warcardvalue1 = order.index(warcard1) 

      if warcardvalue0 > warcardvalue1: 
       player0.append(player0[range(warcard0 + 1)]) 
       player0.append(player1[range(warcard1 + 1)]) 
       player0.remove(player0[range(warcard0 + 1)]) 
       player1.remove(player1[range(warcard1 + 1)]) 

      elif warcardvalue0 < warcardvalue1: 
       player1.append(player1[range(warcard1 + 1)]) 
       player1.append(player0[range(warcard0 + 1)]) 
       player1.remove(player1[range(warcard1 + 1)]) 
       player0.remove(player0[range(warcard0 + 1)]) 
      else: 
       print "another war!" 


if len(player1) == 0: 
    print "player1 won!" 
elif len(player0) == 0: 
    print "player0 won!" 
+2

什麼是不正確的工作特別是 –

+0

以及因爲代碼每次都執行不同,因爲卡「洗牌」有許多不同的錯誤。有很多的錯誤,其中很多我甚至都不知道 –

+2

@ A.Collins:從你知道的那一開始怎麼樣?扔我們一塊骨頭。嘗試評論洗牌代碼,以便您有一個可重複的測試。 – mhawke

回答

2

嗯,首先,我想你會想

warcardvalue0 = order.index(warcard0) 
warcardvalue1 = order.index(warcard1) 

warcardvalue0 = order.index(player0[warcard0]) 
warcardvalue1 = order.index(player1[warcard1]) 

所以你得到的戰卡的實際價值,不是數字4.

您可能還想要:

 elif len(player1) < 4: 
      warcard1 = len(player1)-1 

代替:

 elif len(player1) < 4: 
      warcard1 = len(player1) 

所以你沒有運行過你的數組末端。

你也應該增加你的戰爭卡的價值,而不是靜態設置它們,這樣就可以戰鬥多層戰爭。爲了便於閱讀,您可以考慮遞歸函數。或者這樣:

 if len(player0) >= warcard0 + 4: 
      warcard0 = warcard0+3 
     elif len(player0) < warcard0 + 4: 
      warcard0 = len(player0)-1 

(記住,數組是從零開始,所以索引3實際上返回第四要素)

而且我認爲你在年底有找片:

  player1.append(player1[0:warcard1+1]) 

你也不會考慮在戰爭期間一個玩家缺紙的情況,而另一場戰爭隨之而來。 (戰爭卡是平等的,但一個玩家沒有更多)。雖然我認爲如果你解決了以前的問題,這個問題將會得到解決,儘管有點奇怪。 (有更多卡的玩家不斷與相同的面值交戰

所以,這是一個開始,但其他人都是對的,你真的需要提供更多關於它如何破壞的信息,以便我們能夠更好地幫助你。知道這些修復是否會完成所有工作,但是他們會朝着正確的方向邁出一步。

哦,當你完成之後,也不要忘記將戰爭卡值設置回零,否則你的戰爭將會(這可能是一個有趣的功能,實際上)

+0

很酷謝謝。這真的有幫助 –