我在试着玩单刀
尝试如下:if __name__ == "main": main(),现在ı获得此错误;NameError:名称'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()我在Windows 10上用Anaconda写的,程序在运行时会自动关闭。我得不到任何输出..。
发布于 2019-12-14 11:56:18
我觉得你做得不对。
在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.c或self.n
注意: UNO有跳过、反转和野生。
https://stackoverflow.com/questions/59334796
复制相似问题