首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Uno游戏

Python Uno游戏
EN

Stack Overflow用户
提问于 2019-12-14 11:42:13
回答 1查看 3.4K关注 0票数 0

我在试着玩单刀

尝试如下:if __name__ == "main": main(),现在ı获得此错误;NameError:名称'Deck‘未定义

代码语言:javascript
复制
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()

我在Windows 10上用Anaconda写的,程序在运行时会自动关闭。我得不到任何输出..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-14 11:56:18

我觉得你做得不对。

在makeDeck函数中没有Deck变量。相反,您希望像这样将卡片添加到自身中。

代码语言:javascript
复制
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有跳过、反转和野生。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59334796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档