【发布时间】:2013-11-02 10:43:02
【问题描述】:
我对自己的编程技能越来越有信心,所以我决定重新开始我之前开始的纸牌游戏。这个程序的重点是现在我对程序流程、变量、条件等有了不错的把握,想加深对OOP的理解
所以我需要一些关于面向对象设计的建议
我的纸牌游戏将有 5 个类:
- 主要
- 卡
- 卡组(有卡片数组列表)
- 玩家(拥有从 Deck 对象接收到的 Card 对象的 Card ArrayList)
- 经销商
我想知道将 Dealer 类设置为接口是否适合 OOP。所有玩家都应该可以扮演庄家的角色,但不用说,每轮牌只有一个庄家。是否可以让 Player 类实现经销商可以执行的方法(例如 dealGame()),即使在任何给定回合中 8 个 Player 对象中有 7 个不会使用他们实现的方法,而且,不是被视为当时的经销商?还是让dealGame() 方法属于Deck 类并调用Deck 来处理游戏会更好?抱歉,如果这是一个愚蠢的问题,但我对 OOP 的原则有点粗略,希望得到一些建议,以便在第一时间学会正确地做。
我也想过让 Dealer 扩展 Player,但我认为那是错误的,因为我需要玩家即时承担 Dealer 的角色,而不是以不可更改的方式被声明为 Dealer 对象。在这种情况下——如果 Dealer 扩展 Player——我想我需要将游戏中的所有玩家声明为 Dealers。
所以基本上我在问:
- 如果您要使用这 5 个类制作纸牌游戏,您是否会将 Dealer 类设为接口,而将其余类设为常规类?为什么?
- 我在 OOP 方面大体上是在正确的轨道上还是我完全迷路了?
【问题讨论】:
-
你似乎大部分都在正确的轨道上。不过,我不确定
Dealer课程。也许一个更好的主意可能是一个Game类,它跟踪元数据。它处理牌堆中纸牌的实际处理,跟踪哪些玩家弃牌等,以及哪个玩家是庄家,记分等。 -
我知道在现实生活中玩家进行交易,但在这种对现实生活的模拟中,这真的很重要吗?我的意思是玩家作为玩家的身份与他们作为经销商的身份有任何联系
-
对我来说,诸如 dealGame() 之类的方法属于其他一些与游戏相关的类。玩家是否是庄家只是一个布尔标志的问题,这将允许他们在某种 Game 或 Table 对象上调用这些方法。