python - 为比标准套牌中更复杂的扑克牌类型制作课程的好方法?
问题描述
我对面向对象编程非常陌生,并且正在尝试通过制作一个简单的纸牌游戏(这似乎是传统的!)开始学习 python。我已经完成了以下示例,它运行良好,并教我制作类的多个实例PlayingCard()
以创建类的实例Deck()
:
class PlayingCard(object):
def __init__(self, suit, val):
self.suit = suit
self.value = val
def print_card(self):
print("{} of {}".format(self.value, self.suit))
class Deck(object):
def __init__(self):
self.playingcards = []
self.build()
def build(self):
for s in ["Spades", "Clubs", "Diamonds", "Hearts"]:
for v in range(1,14):
self.playingcards.append(PlayingCard(s,v))
deck = Deck()
我现在想用更复杂的卡片制作一些东西,而不仅仅是标准的 52 套牌(它有很好的递增值)。我想到的套牌是大富翁纸牌游戏:
有 3 种基本类型的卡 - 行动卡、财产卡和金钱卡。动作卡执行不同的动作,属性卡属于不同的颜色组,金钱卡可以有不同的值。此外,属性卡可以是“通配符”,并且可以用作两组之一的一部分。最后,每张卡也有等值的货币价值(显示在每张卡的顶角)。在租借行动卡片中,卡片只能适用于卡片上注明的颜色属性。
我的问题通常是如何处理这样的情况,以及将这些不同的卡片包含在基于类的 python 程序中的好方法是什么?我是否应该保留我的单PlayingCard()
节课,并且只有很多输入,例如PlayingCard(type="PROPERTY", value="3M")
. 还是创建单独的类(例如 , 等)会ActionPlayingCard()
更好PropertyPlayingCard()
?或者,还有更好的方法?正如我所说,我在这里学习的开始,以及如何根据更高级别的设计来组织这些类型的情况。
非常感谢。
解决方案
这些就是我们所说的“设计决策”。通常,“正确”的方式是见仁见智。作为初学者,我认为尝试这两种实现以了解它们是如何工作的会很有启发性。无论您选择哪一个,都会有取舍。你必须决定哪些权衡是最重要的。随着您获得更多经验,您将了解做出这些类型的决定。
推荐阅读
- python - 根据第一行限制 CSV 列读入数据帧
- angular - 如何将值传递给子组件 Anguar?
- pandas - 用更多条件标记重叠的日期时间范围
- java - 在使用 java 的 json 操作中需要帮助
- android - jetpack compose java.lang.IllegalStateException:开始/结束不平衡
- bash - Bash 嵌套条件显示意外行为
- javascript - 如何限制从单个引用域访问 wordpress 网站的某些 url
- mysql - 使用 COUNT-“过滤器”的初级 MySQL 查询
- python - Discord.py 检查用户是否是 on_member_update 中的朋友
- c++ - 如何从 C 中“子”结构中包含的句柄转到 C++ 中的简单对象?