2013-10-23 79 views
3

我对编程技巧越来越有信心,所以我决定重新开始我以前开始的纸牌游戏。这一方案的关键是现在我有程序流程,变量,条件体面的把握等等,我想加深我OOP用纸牌游戏OOP设计Quesiton

的理解

所以我需要在面向对象的设计

一些建议我卡牌游戏将有5类:

  1. 主要
  2. 甲板(具有-A卡的ArrayList)
  3. 播放器(具有-A卡的卡的ArrayList对象REC从甲板对象eived)
  4. 经销商

我想知道如果这将是适当的OOP使经销商类的接口。所有玩家都应该能够扮演经销商的角色,但不用说,每张牌只有一个经销商。即使在任何给定回合中的8个Player对象中有7个不会使用他们实现的方法,并使玩家类实现经销商可以执行的方法(例如dealGame())当时被认为是经销商?或者,让dealGame()方法属于Deck类并调用套牌来处理游戏会更好吗?对不起,如果这是一个愚蠢的问题,但我有点粗略的OOP的原则,并希望一些建议,学会做的第一次。

我也想过让经销商扩展玩家,但我认为这是错误的,因为我需要玩家在飞行中承担经销商的角色,而不是以不可变的方式声明为经销商对象。在这种情况下 - 如果经销商延伸播放器 - 我想我需要宣布游戏的所有玩家为经销商。

所以基本上我问:

  1. 如果你犯了个纸牌游戏,这5类,你会令经销商类的接口,其余的普通班,为什么或者为什么不呢?
  2. 我一般在OOP的正确轨道还是完全失去了?
+1

你似乎大多在正确的轨道上。虽然我不确定'Dealer'类。也许一个更好的想法可能是一个'Game'类,它跟踪元元素。它处理卡组的实际交易情况,跟踪哪些玩家已经折叠等等,以及哪个玩家是经销商,保持得分等。 – nhgrif

+0

我在现实生活中知道玩家交易,但是实际上是否存在交易在这个真实生活的模拟中?我的意思是玩家身份作为玩家以任何方式与他们的身份作为经销商联系在一起 –

+1

对于我来说,dealGame()等方法属于其他一些与游戏相关的类。玩家不是经销商就只是布尔标志的问题,这会让他们有权在某种Game或Table对象上调用这些方法。 –

回答

3

你有很好的方法,但仍有一些工作要做:)。所有的课都很好,但德莱尔不是。

首先 - 如果玩家是经销商一个人,其他人是经销商,我没有看到扩展类或接口的一个点。其实,从一开始,我就不会让任何玩家成为经销商,这让事情变得复杂。

如何处理这个问题的最简单和最好的方法是创建5.Game。游戏有甲板和所有的球员,它的工作原理与经销商类似。它等待玩家回应,当它应该显示卡片等。

如果你真的想让玩家成为经销商,它会更复杂:)。那么你也需要游戏类,因为Game必须决定谁作为经销商开始,它应该带走或给玩家经销商的权利(以及我没有看到它的重点,但如果你想... :)) 。

如何做到这一点? GamePlayer dealer变量。如果应该有类似registerDealer(Player player)的方法。然后你需要某种接口在GamePlayer之间进行通信。 如果您想要Player拥有Game的所有责任,您可以使用Visitor pattern。 (它允许dealer“潜入”游戏实例内部并执行任何公共方法可以做的事情)。

否则,您可以让Game询问dealer该做什么并等待玩家输入。它应该通过调用方法如dealer.askWhatToDo()并使用返回的值来执行操作。它允许验证输入...但是如果我是对的,扑克中的有效输入总是只有一个,所以我没有看到任何区别,如果Game本身决定要做什么......

我看到的唯一原因是如果dealer可以洗牌或提高基数或类似的东西,那么它可以完成...或者,如果你想用扑克模拟扑克游戏,玩家和经销商可以在现实生活中做非有效的事情:)。

+1

事实上,第9个实体可以从8个玩家中的任何一个完成单独处理 –

+0

这似乎是继续进行的最佳方式。 Game的想法有 - 一个类型为Player的经销商实例变量是非常有意义的,其余的想法也是如此。感谢您的建议! – Justin

1

这真的取决于很多程序如何工作的,你希望每个班能够做什么,以及如何每个对象的作品的生命周期(例如可以在播放器成为后来的几轮经销商)。

我对你写的第一印象是,你需要一个“玩家”和“经销商”继承的基类“人”,但这只是一个猜测,处理有限的信息。

1

经销商并不是真正的特殊类型的玩家。这只是玩家一次有特殊责任的一个例子。我认为你在正确的轨道上,但是你可能想为你正在玩的特定游戏创建一个类。

假设你正在写一个扑克游戏。在这种情况下,经销商偶尔会影响比赛的顺序(取决于风格)。但是如果你在玩War,那么庄家只是一个交出牌而你真的不在乎的人。在这种情况下,“谁是经销商”和“经销商应该如何处理游戏”的概念是游戏本身的责任,而不是玩家。