Java 一款纸牌游戏的OOP设计问题
我对自己的编程技能越来越有信心,所以我决定重新开始以前开始的纸牌游戏。这个程序的要点是,现在我已经很好地掌握了程序流程、变量、条件等,我想加深对OOP的理解 所以我需要一些关于面向对象设计的建议 我的纸牌游戏将有5个等级:Java 一款纸牌游戏的OOP设计问题,java,class,oop,interface,Java,Class,Oop,Interface,我对自己的编程技能越来越有信心,所以我决定重新开始以前开始的纸牌游戏。这个程序的要点是,现在我已经很好地掌握了程序流程、变量、条件等,我想加深对OOP的理解 所以我需要一些关于面向对象设计的建议 我的纸牌游戏将有5个等级: 主要 卡片 卡片组(has-a卡片阵列列表) 玩家(has-从牌组对象接收的牌对象列表) 经销商 我想知道将Dealer类作为接口是否是合适的OOP。所有玩家都应该能够扮演庄家的角色,但不用说,每轮牌只有一个庄家。让玩家类实现庄家可以执行的方法(例如dealGame())可以
这在很大程度上取决于程序是如何工作的,你期望每个类能够做什么,以及每个对象的生命周期是如何工作的(例如,玩家能否在以后的回合中成为庄家)
你写的第一印象是,你需要一个基类“person”,玩家和庄家从中继承,但这只是根据有限的信息进行猜测。庄家并不是一种特殊类型的玩家。这只是一个球员在同一时间有特殊责任的例子。我认为你在正确的轨道上,但你可能想为你正在玩的特定游戏创建一个类
假设你在写一个扑克游戏。在这种情况下,经销商偶尔会影响比赛顺序(取决于风格)。但如果你在打仗,庄家只是一个发牌的人,你真的不在乎。在这种情况下,“谁是庄家”和“庄家应该如何处理游戏”的概念是游戏本身的责任,而不是玩家的责任。你有很好的方法,但仍有一些工作要做:)。所有的课程都很好,但德莱尔不是 首先-如果玩家是一轮庄家,第二轮是另一个庄家,我看不到扩展类或接口的意义 事实上,一开始,我不会让任何球员成为庄家,这会让事情变得复杂 处理这个问题的最简单和最好的方法是创建5.0版游戏。游戏有牌组和所有玩家,它的工作方式和庄家类似。它等待玩家响应,在应该的时候显示卡片等等 如果你真的想让玩家成为经销商,那就更复杂了:)。你也需要游戏类,因为
游戏
必须决定谁作为经销商开始,它应该剥夺或给予玩家经销商的权利(我不明白这有什么意义,但如果你想…:)
如何做到这一点?游戏
有玩家庄家
变量。If应该有类似于registerDealer(Player)
的方法。然后,您需要某种接口来在游戏
和玩家
之间进行通信。
如果希望玩家
对游戏
负全部责任,可以使用访客模式
。(它允许<代码>庄家代码>在游戏实例中“潜入”并执行任何公共方法可以执行的操作)
否则,您可以让游戏
询问经销商
该做什么,然后等待玩家输入。应该通过调用类似于dealer.askWhatToDo()
的方法并使用返回值来执行操作。它允许验证输入。。。然而,如果我是对的,扑克中的有效输入总是只有一个,所以我看不出有什么区别,如果游戏本身决定做什么
我看到的唯一原因是,如果庄家可以洗牌或提高底牌或诸如此类的东西,那么它就可以做到。。。或者,如果您想与扑克玩家和经销商模拟扑克游戏,他们可以做一些无效的事情,如在现实生活中:)。您似乎基本上走上了正确的道路。不过,我对经销商的级别不太清楚。也许一个更好的主意可能是一个游戏
类,它跟踪元内容。它处理牌组中的牌的实际交易,跟踪哪些玩家已经折叠,等等,哪个玩家是庄家,记录分数等等。我知道在现实生活中玩家交易,但这在现实生活的模拟中是必要的吗?我的意思是,玩家作为玩家的身份是否与他们作为dealerFor的身份有关?对于我来说,dealGame()等方法属于其他与游戏相关的类。玩家是否是庄家只是一个布尔标志的问题,这将允许他们在某种游戏或桌面对象上调用这些方法。事实上,第9个实体可以独立于8个玩家中的任何一个进行交易。这似乎是最好的方式。游戏的想法有一个玩家类型的经销商实例变量是非常有意义的,其他想法也是如此。谢谢你的建议!