关于拖拉机游戏的类设计

发布时间: 2007-05-21 09:43    作者: 未知    来源: 未知    浏览:    评论

我不会拖拉机这种玩法,只能就一般牌类的玩法来谈谈我对这个的看法。首先,既然我们要用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_objMatch.Resume() ;
   }

  ///停止游戏,如有用户断线超过规定时间或一方胜利或协议结束
  public void ResumeMatch()
  {
    m_objMatch.Save() ;
    m_objMatch.Stop() ;
  }
}//end class declaretion


三,比赛类(Match class)
public Class Match
{
    //成员变量
   private  int m_intMatchNo ;              //唯一标志
   private User a_objTop ;             //上家
   private User a_objDown ;                //下家
   private User a_objLeft ;                   //左家
   private User a_objRight ;                //右家
   
   private DateTime m_datBegin ;     //开始时间
   private DateTime m_datEnd ;        //结束时间

    private int m_intPoints ;                       //比分,可以根据正负来决定那方领先

    private ArrayList m_arrSets ;        //牌局数组,一场比赛可能有多局,m_intPoints就是多局之和
   。。。。
   
   ///方法,见table类中调用的那些,我就不祥述了
   .......
  }

四,牌局类(Set class)
public class Set
{
  //成员变量
   private DateTime m_datBegin ;     //开始时间
   private DateTime m_datEnd ;        //结束时间
   
   private int m_intPoints ;                  //这局的比分

   private ArrayList m_arrInializeCards ; //牌局中初始发牌数组
   
   private ArrayList m_arrPlayCards ;      //游戏中出牌数组,对规则我不了解,所以不知一次出多少张牌,
                                                                    //所以这个数组的每个元素都是一个每手出的牌数组,

   //方法
   public void GenerateCards()
   {
      //利用随机函数产生开始发牌的顺序,填充到m_arrInializeCards数组中
   }

  //出牌
   public void SendCard()
  {
   // 根据用户出牌构造一个临时牌数组,添加到m_arrPlayCards数组中
  }

  //算分,牌出完后根据规则来算分。
  public void Caculation()
  {
    m_intPoints = ??? ;
  }  
   
}//end class


五、牌类(Card)
public class Card()
{
  //先定义一个枚举变量,代表花色
   public enum CardType
   {
       方片,草花 , 黑桃 , 红心 ;    //用英语吧,我不会,呵呵
   }

   //成员变量
  private int m_intPoint ;                  //牌点,1-15
  private CardType  m_intCardType ;  //牌花色

  //方法
  没有什么特殊的方法,set,get一类的   
}//end class


六、用户类(User)
public Class User()
{
  成员变量
  private string m_strName ;                //姓名
  .......很多诸如此类的属性。

//方法
.....没有什么特殊的方法,set,get一类的
}



好了,看看,是不是已经完成了?要注意的是不要在这些类中加入比如画图、操作数据库一类的操作,而应该继承以后再和具体的系统环境结

合。







TAG

Smile Big Smile Surprise Stick out tongue Wink Sad Tongue Tied Indifferent Crying Embarrassed Cool Angry Angel Devil [8-|] [:#] [:-*] [:^)] [<:o)] [|-)] Yes Beer Left Hug Music Star Time Snail Pizza Automobile Umbrella Computer Storm [mo] [8o|] [^o)] [+o(] [*-)] [8-)] Coffee No Drinks [Z] Right Hug Cake Broken Heart Gift Wilted Flower Movie Dog Idea Sleep Email Travel Paradise
呢称:

加粗 斜体 下划线 链接 图片 代码 邮件地址 引用 列表

最多只能输入100个字符

Tags

SQL 数据库 asp.net C# XML 控件 .NET教程 程序 事件 数据 安全 代码 Server 客户端 验证 数据库专栏 接口 文件 Oracle DataSet 函数 DataGrid 问题 .net return C#语言 JavaScript 服务 IIS 对象 语句 windows 继承 时间 web.config 设计 开发 参数 变量 解决 字符 ADO.net 环境 VB.Net语言 web 异常 工具 服务器 计算 实例 OLEDB Application VB Word WebService insert asp net 安装 记录

精华推荐

更多

精品下载

更多