我不会拖拉机这种玩法,只能就一般牌类的玩法来谈谈我对这个的看法。首先,既然我们要用oo的设计方法,那么就必须从顶至下来设计。
让我们先来分析一下联众这个游戏的流程,首先,我们进入游戏大厅,然后选定一个牌桌,人凑齐后就可以玩了,可以玩很多局,直至这桌全
部人离开。这样的话从顶至下分析就可以构造一下类:
一、大厅类(Hall class)
这个类并不复杂,可以这样定义
public class Hall
{
//私有成员变量
//大厅本身属性
private String m_strName ; //大厅名称
private String m_strDescription ; //大厅描述
private String m_strServerIP ; //大厅主机ip,联网访问的ip,具体协议看需要
......... //其它需要的属性
//大厅包含的对象
private ArrayList m_arrUsers ; //用户数组
private ArrayList m_arrConnections; //对应每个用户的连接,可以是udp或tcp,看需要。
pirvate ArrayList m_arrTables ; //桌子类数组
private ArrayList m_arrMatchs ; //每局游戏类,对应每一局游戏
//属性
public String Name ....
....
//以下为方法
//construction
public Hall()
{
起服务器winservice...
}
///为每一个用户建立一条socket连接
///主要作用是取得user的ip建立socket然后把这个user加入到在线用户数组
///<parameter>a_objUser , 一个User对象,</parameter>
public void Connect(User a_objUser)
{
...
}
///和上面方法相反,踢出用户或用户自然断线
public void Disconnect(User a_objUser)
{
。。。。。
}
//还有很多这种方法,略过 ……
}
二、棋桌类 (Table class)
大厅类构造好了,现在来看棋桌(Table)类。
public class Table
{
//私有成员变量
private int m_intTableNo ; //棋桌号,唯一标志
private String m_strName ; //棋桌名称,如果有必要
.....其它类似变量
private ArrayList m_arrUsers ; //现在在这桌的用户,包括正在玩的和观战的
private Match m_objMatch ; //当前进行的一局游戏
private bool m_bPlayingFlag ; //标志,说明是否牌局正在进行中
//method
//加入这桌 , 根据m_bPlayingFlag来决定是否可以加入
public void Join(User a_objUser)
{
//把这个用户加入到m_arrUsers中,并且根据m_arrUsers中玩家的多少决定该用户的属性,是上、下、左、右那一家或观战
}
///如果人够了,就可以开始一局游戏了
public void StartMatch()
{
m_objMatch.Play() ;
}
///暂停游戏,如有用户断线或用户共同协议封牌
///保存棋局
public void PauseMatch()
{
m_objMatch.Pause() ;
m_objMatch.Save() ;
}
///继续游戏,用户重新连线或协议继续进行已封的牌
public void ResumeMatch()
{
m_objMatch.Load() ;
m_ob