【发布时间】:2017-02-22 17:45:59
【问题描述】:
我正在尝试制作基于文本的面向对象的纸牌游戏。两名玩家从一副牌中各抽一张牌,拥有最强牌的玩家获胜。我为这个游戏设置了四个类:Card、Deck、Player、Game。我的问题是:我如何比较每个玩家的牌并确定最强的牌。欢迎有关代码的所有其他建议。最好的问候 HWG。
这是我的代码:
卡片
class Card():
values = [None, None, 2, 3, 4, 5, 6, 7, 8, 9, 10, "Jack", "Queen", "King",
"Ace"]
suits = ["hearts", "spades", "diamond", "clubs"]
def __init__(self, value, suit):
self.value = value
self.suit = suit
def __repr__(self):
return str(self.values[self.value]) + " of " + str(self.suits[self.suit])
甲板
from random import shuffle
from card import Card
class Deck():
def __init__(self):
self.cards = []
for v in range(2, 15):
for s in range(4):
self.cards.append(Card(v, s))
shuffle(self.cards)
播放器
from deck import Deck
class Player():
def __init__(self, name):
self.name = name
self.card = None
self.wins = 0
游戏
from player import Player
from deck import Deck
import getch
class Game():
def __init__(self):
player1_name = input("Player One Name: ")
player2_name = input("Player Two Name: ")
self.deck = Deck()
self.player1 = Player(player1_name)
self.player2 = Player(player2_name)
self.cards = self.deck.cards
def game_loop(self):
while len(self.cards) >= 2:
print("\nPress enter to draw")
getch.getch()
player1_card = self.cards.pop()
player2_card = self.cards.pop()
【问题讨论】:
-
我认为您应该仔细考虑您的表示形式 - 值是
int和str的混合体,仅适用于str... 实际上,实际实例本身具有以下属性ints对应于Card类级变量中的索引。你看有什么问题吗?这是enum的典型用例 -
我能否以某种方式使用列表中的价值和花色索引(价值和花色)来比较两张牌?
-
是的,当然。对我来说似乎很乱。我肯定会使用
enums。您的代码将更具可读性、美观和整洁。但可以肯定的是,您可以使用索引。
标签: python python-3.x