纸牌游戏计划:设计

时间:2015-10-18 12:55:29

标签: python-2.7 design-patterns

首先是一些背景......

我目前正致力于“练习项目”,以保持并提高我的编程技巧。该项目是纸牌游戏系统(类似于MTG和其他交易卡游戏)。我目前实施了以下概念:

可以创建/保存/加载播放器,其中包含配置文件信息,赢/输统计信息以及 Deck 列表。每个 Deck 都包含一个 Cards 列表(它们实际上是四种不同的 Card 类型的实例,而不是抽象的 > s自己),具有游戏所需的所有属性。

问题......

保存播放器 Deck 是不必要的冗余。如果有多个具有相同 Deck 或具有类似 Deck 的多个 Player ,则程序将一遍又一遍地保存相同的例如:如果卡A 非常受欢迎,那么播放器将把多个副本放入多个 Deck 中。因此,同一张卡片将一次又一次地保存。

概念解决方案......

这个想法是 Player Deck 是唯一的,但 Card 来自公共池(一个集合或集合,每个人都可以用来构建 Deck 。因此,我创建了一个目录,用于保存/加载 Player 及其 Deck ,以及一个单独的目录,用于存储单独的 Card s一套。我想保存和加载播放器 Deck 以使用 ID,然后引用用于加载和实例化实际对象的目录。此外,保存时需要反向(不使用保存 Deck ,但使用 ID)。

问题......

我是否应该使用设计模式来帮助基于ID进行保存/加载?我应该将 Deck 分解为 Deck 用于游戏和 Deck 列表进行存储吗?我应该使用 DeckList 创建和存储 PlayerProfile 并使用它们来保存/加载播放器 Deck

注意: 如果您想查看代码,请与我们联系。在这里张贴太多了。

1 个答案:

答案 0 :(得分:2)

您正在寻找的是flyweight设计模式。你只需要存储5C,8D等内容,而不是存储任何卡片的完整副本。你的应用程序应该能够将其解码为完整的对象。