下面这样的结构如何设计类?

OWLEYE 2004-04-21 03:08:07
我们公司在做棋牌类游戏,众所周知,棋牌类游戏的结构分:
游戏大厅->游戏房间{
麻将房间
象棋房间
拖拉机房间
围棋房间
五子棋房间
}
然后每一种游戏的房间又包括很多的房间,
比如: 麻将房间包括{
A房间
B房间
C房间
}

然后房间又有很多的桌子:1号桌,2号桌,3号桌等
然后每个桌子又对应不同的玩家,麻将是4个人打,就对应四个玩家的属性

我现在管理这么多数据,如何设计类,类和类之间的关系如何处理,如何交换数据,请大家给点建议???
QQ:359198713
MSN:vcclass@hotmail.com
...全文
78 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gide 2004-05-01
  • 打赏
  • 举报
回复
搬个凳子
mis98ZB 2004-04-22
  • 打赏
  • 举报
回复
BirdGu(鲲鹏):
呵呵,我误解你说的GameType了。
我以为你说的GameType是一个指示游戏类型的哑元,用来指定具体实例化的Game。又或者是java中的Class类,用newInstance来取得具体的Game对象。
呵呵……

照你新的说法,GameType实际上是一个GameRule吧。
这样也不错,可以为Table植入不同的GameRule,从而只需要一种Table就可以了。
这样的Table实际上就是一个Game,一个剥离了GameRule的Game :)
这时的Game并不控制容量,它只是询问GameRule是否已经可以开始。
erist 2004-04-22
  • 打赏
  • 举报
回复
有图就好了,可以更好的说明问题。
zengch24 2004-04-21
  • 打赏
  • 举报
回复
如果Table只是为Room提供容量管理,那可能没有存在的价值,因为在Room加一个属性就可以实现了。Table的责任,我还是认为应该负责管理Player得,因为Player会聚和在Table中。
BirdGu 2004-04-21
  • 打赏
  • 举报
回复
"麻将房间下面分为13张麻将房间、18张麻将房间……"
这个问题涉及到13张麻将和18张麻将算不算一种Game,还是在Game中要引入“亚类别”的概念。
我当时引入了一个假设,就是一个RoomSet只提供一种Game。这个假设是否成立还需要楼主来确定。
只所以要把Room, Table之类分开,就是为了是Room, Table等并无需了解自己究竟提供的是何种游戏,更无需了解游戏的具体规则。所以象任务、出牌顺序(应该是玩家做动作的顺序)等都是GameType来负责,而不是Table来负责的。

有Table,只是为了一种容量管理。比如一个房间固定100个Table,用户可以查询哪些Table空着,哪些已经有人了,哪些是“三缺一”等。如果可以无限制地开始新游戏的话,也许可以不需要Table。
erist 2004-04-21
  • 打赏
  • 举报
回复
不会,学习一下。
OWLEYE 2004-04-21
  • 打赏
  • 举报
回复
大家好,谢谢大家的光临,另外就是每个游戏有每个游戏的逻辑类。
zengch24 2004-04-21
  • 打赏
  • 举报
回复
Table就是Game,Game就是Table我个人觉得不太合理。
Table的责任就是确定玩家的配置,比如说人数、出牌顺序等。Game用于管理游戏,Game可以作为基类。
Roomset--Room--Table是has-a的关系,也就是聚集。Room对Game有一个且只有一个引用(singleton)。
mis98ZB 2004-04-21
  • 打赏
  • 举报
回复
BirdGu(鲲鹏)一语点醒梦中人啊!

不过我觉得Table就是Game,Game就是Table。
:P

RoomSet聚集Room,Room聚集Table,这无疑是最简单的设计方案。
不过这个方案不容易扩展。
比如它不能实现这样一种关系:
麻将房间下面分为13张麻将房间、18张麻将房间……

嗯,或许对所有房间做一个composite是个好主意。
BirdGu 2004-04-21
  • 打赏
  • 举报
回复
有一个隐含的概念楼主没有写出来,就是“游戏”(Game)。不同的游戏有不同的规则。而象麻将房间、象棋房间之类,它们的区别就是提供的游戏不同。
根据楼主给出的非常简单的信息,我觉得大概有这些类:
RoomSet, Room, Table, GameType, Game, Player
RoomSet, 一组提供同种类型游戏的房间的集合
Room,Table的集合。
Table,桌子。一个Table能容纳多少个Player是由其承载的游戏种类决定的。
GameType,游戏类型。包含游戏规则。包括有多少人玩。
Game,包含一次具体的游戏中的状态信息。
Player,玩家。
mis98ZB 2004-04-21
  • 打赏
  • 举报
回复
对象的抽取是很明显的了,关键是分类的问题。

我的想法是用composite模式。
大厅和所有的房间都抽象成一个room类,桌子抽象为desk类,这两个类泛化成一个space类。
不过同级别的游戏房间不能相互包含,比如麻将房间里不能有象棋房间。而且每种游戏房间的桌子是不一样的。
这个可以用工厂方法来限制……
ericylw 2004-04-21
  • 打赏
  • 举报
回复
你不是都写出来了,将其中的名词都提出来,玩家、桌、小间、大间,不就是类吗
liyujie2000 2004-04-21
  • 打赏
  • 举报
回复
搬个凳子来听听大家的看法
redguardtoo 2004-04-21
  • 打赏
  • 举报
回复
定义麻将房间的操作。
然后是象棋房间等等。

以此类推。

然后就行了吗。

如果你愿意就把他们的共通操作写在基类里面,如果不愿意多点冗余代码也没有关系。

关键是对象间的关系,这个看需求的。

1,265

社区成员

发帖
与我相关
我的任务
社区描述
软件工程/管理 管理版
社区管理员
  • 研发管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧