2012-01-28 93 views
-1

那么脚本运行,但我没有得到任何错误,它不能正常工作。更具体地说,该程序应该发卡,然后制作一个字典,根据等级和花色给每张卡片一个值。牌洗牌,处理,然后排序。谁曾经从3C开始。计算机如何选择卡片是通过它的卡片列表,如果它找到一个具有较高值的​​卡片,则它将播放它。那么有时候有效,但如果我玩一张卡(通常是T(10)或更高),它不起作用,电脑会播放一张价值较低的卡。感谢您的阅读:dPython卡片游戏错误

import random 

class player(): 
    def __init__(self, hand, name): 
     self.hand = hand 
     self.passed = False 
     self.name = name 

#computer ai for playing   
def complay(player): 
    if '3C' in player.hand: 
     playCard(player, '3C') 
     return 
    else: 
     print previous[-1] 
     for i in player.hand: 
      if i > previous[-1]: 
       playCard(player, i) 
       return 
      else: 
       print 'Nothing higher', i, key[i] 

#human options for playing a card 
def humplay(player): 
    if preplayer[-1] == 'player1': 
     print 'hi' 
     return 
    else: 
     done = False 
     low = 0 
     while done == False: 
      print player.hand 
      if low > 1: 
       choose = raw_input('That card is to low, what card do you want to play?\n') 
      else: 
       choose = raw_input('What card do you want to play?\n') 
       if choose not in player.hand: 
        print 'not in' 
        continue 
       if key[choose] > key[previous[-1]]: 
        playCard(player, choose) 
        done = True 
       else: 
        low == 1 


#Function for playing a card 
def playCard(player, card): 
    place = player.hand.index(card) 
    playcard = player.hand.pop(place) 

    print player.name, 'has played the', playcard 
    previous.append(playcard) 
    preplayer.append(player.name) 

#sorts the cards in hand   
def sort(player): 
    for n in range(len(player.hand)): 
     for i in player.hand: 
      place = player.hand.index(i) 
      try: 
       if key[i] > key[player.hand[place + 1]]: 
        player.hand.insert(place + 1, player.hand.pop(place)) 
      except IndexError: 
       pass 

def main(): 
    global previous 
    global preplayer 
    global key 
    suits = 'CSHD' 
    mark = '3456789TJQKA2' 
    deck = [] 
    players = [] 
    previous = ['3l'] 
    preplayer = [] 

    for card in mark: 
     for suit in suits: 
      deck.append(card+suit) 

    key = {} 
    for i in range(len(deck)): 
     key[deck[i]] = i 

    key['3l'] = -1 

    for i in deck: 
     print i, '\t\t', key[i] 

    random.shuffle(deck) 
    player1 = player(deck[0::2], 'player1') 
    player2 = player(deck[1::2], 'player2') 
    player3 = player(deck[2::4], 'player2') 
    player4 = player(deck[3::4], 'player3') 

    players = [player1, player2, player3, player4] 

    sort(player1) 
    sort(player2) 
    sort(player3) 
    sort(player4) 

    if '3C' in player1.hand: 
     preplayer.append(player2.name) 
    if '3C' in player2.hand: 
     preplayer.append(player1.name) 

    while len((player1.hand or player2.hand or player3.hand or player4.hand)) != 0: 
     if preplayer[-1] == 'player1': 
      complay(player2) 
     if preplayer[-1] == 'player2': 
      humplay(player1) 


main() 
+3

缩进代码,你可以选择区域和打大括号键“{}”(或控制类型-K)。 – DSM 2012-01-28 21:39:45

+0

您可以随时在文本编辑器和标签所做的一切输入您的密码,给它是正确的格式。 – Makoto 2012-01-28 21:40:46

+0

它必须是一个文本编辑器,它可以将制表符转换为空格,例如emacs – 2012-01-28 22:08:56

回答

2

要确定计算机是否应该打出一张牌,你用

for i in player.hand: 
    if i > previous[-1]: 
     playCard(player, i) 
     return 

但你的卡是单纯地喜欢“3C”和“TD”字符串。所以当你使用“>”比较时,它将作为字符串进行比较。但是作为一个字符串'TD'>'QD'等等。你应该写一个小函数来确定卡片的价值并使用它的结果。

PS:你能看到下面的其他问题吗?

player1 = player(deck[0::2], 'player1') 
player2 = player(deck[1::2], 'player2') 
player3 = player(deck[2::4], 'player2') 
player4 = player(deck[3::4], 'player3') 
+0

>。<对不起,原本应该是(可以在注释中执行代码)for我在player.hand中:if key [i]>键[上一个[-1]]><我很抱歉任何经历过这个的人。尽管感谢您的快速回复。 – GnarGnar 2012-01-28 22:33:39