Python牌游戏

2024-10-01 15:33:44 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,脚本运行,但我没有得到任何错误的,它不能正常工作。更具体地说,这个程序应该处理卡片,然后制作一个字典,根据等级和套装给每张卡片一个值。牌被洗牌,发牌,然后分类。谁先有3C先发。计算机是如何挑选卡片的,它检查它的卡片列表,如果它找到一张比前一张卡片价值更高的卡片,它就会播放它。好吧,这有时有用,但如果我玩一张牌(通常是T(10)或更高),它就不起作用了,计算机会打出一张价值更低的牌。感谢阅读:D

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()

Tags: keynameinforifdefcardplayer
1条回答
网友
1楼 · 发布于 2024-10-01 15:33:44

要确定计算机是否应该玩一张牌,可以使用

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

但你的牌只是像“3C”和“TD”这样的字符串。因此,当您使用“>;”比较时,它将它们作为字符串进行比较。但是作为字符串'TD'>;'QD'等,您可能应该编写一个小函数来确定一张卡的值,并使用其结果。在

附言:你能看到下面的其他问题吗?在

^{pr2}$

相关问题 更多 >

    热门问题