Python乌诺甘

2024-09-30 18:21:16 发布

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

我在试着扮演乌诺

试试这个:if __name__ == "main": main(),现在ı得到这个错误;NameError:name'Deck'没有定义

import random

class UnoCard:
    def __init__(self, c,n):
        self.color = c
        self.num = n
    def __str__(self):
        if self.c == 0:
            return "green" + str(self.n)
        if self.c == 1:
            return "yellow" + str(self.n)
        if self.c == 2:
            return "blue" + str(self.n)
        if self.c == 3:
            return "red" + str(self.n)
    def canPlay(self,other):
        if (self.num == other.num) or (self.color == other.color):
            return True
        return False 

class CollectionOfUnoCards:
    def __init__(self):
        self.l = []
    def addCard (self,c):
        self.l.append(c)
    def __str__(self):
        if(self.l):
            col_str = ""
            for i in range (0, len(self.l)):
                col_str = col_str + ' ' + str(self.l[i])
            return col_str
    def makeDeck(self):
        for num in range (1,10):
            for color in ["Yellow", "Red", "Blue", "Green"]:
                newcard = UnoCard(color,num)
                Deck.addCard(newcard)
                Deck.addCard(newcard)


    def shuffle(self):
        shuffle = random.randint(0,73)

    def getNumCards(self):
        return len(CollectionOfUnoCards)

    def getTopCard(self):
        return CollectionOfUnoCards[0]

    def canPlay(self, other):
        for card in self.l:
            if(card.canPlay(other)):
                return True
        return False        

    def getCard(self,index):
        return makeDeck(CollectionOfUnoCards)


class Uno:
    def __init__(self):
        self.Deck = CollectionOfUnoCards()
        self.Deck.makeDeck()
        self.Deck.shuffle()
        self.hand1 = CollectionOfUnoCards()
        self.hand2 = CollectionOfUnoCards()
        for i in range(7):
            self.hand1.Collection.append(deck.Collection.pop( ))
            self.hand1.Collection.append(deck.Collection.pop( ))

    def playGame(self):
        self.hand1.l.pop()
        self.lastPlayedCard = hand1.l.pop()
        while(True):
            self.playTurn(1)
            self.playTurn(2)
            if len(self.hand1.l) == 0 or len(self.hand2.l) == 0 :
                if len(self.hand1.l) == 0:
                    print("Player1 is winner")
                elif len(self.hand2.l) == 0:
                    print("player2 is winner")
                else:
                    print("The game ends in a draw")
                return False


    def playTurn(self, Player):
        if Player == 1:
            if canPlay(lastPlayedCard):
                hand1.pop()
                lastPlayedCard = hand1.pop()
            else: 
                hand1.Collection.append(deck.Collection.pop())
        else: 
            if canPlay(lastPlayedCard):
                hand2.pop()
                lastPlayedCard = hand2.pop()
            else: 
                hand2.Collection.append(deck.Collection.pop())

    def printResult(self):
        print (hand1)
        print (hand2)

def main():
    my_game = Uno()
    my_game.playGame()

我在Windows10上用Anaconda写的。 当我运行程序时,它会自动关闭。 我没有得到任何输出。。你知道吗


Tags: inselflenreturnifdefpopnum
1条回答
网友
1楼 · 发布于 2024-09-30 18:21:16

我觉得你把甲板造错了。你知道吗

makeDeck函数中没有Deck变量。相反,你想要像这样把卡片添加到它自己

def makeDeck(self):
    duplicates = 2
    for num in range (1,10):
        for color in ["Yellow", "Red", "Blue", "Green"]:
            newcard = UnoCard(color,num)
            for _ in range(duplicates):
                self.addCard(newcard)

另外,color必须是一个数字而不是字符串,这样self.c == 0行才能工作,实际上应该是self.color == 0。没有self.cself.n

注意:UNO有跳过、反转和wilds

相关问题 更多 >