對于拖拉機游戲的類設計
發表時間:2023-08-07 來源:明輝站整理相關軟件相關文章人氣:
[摘要]我不會拖拉機這種玩法,只能就一般牌類的玩法來談談我對這個的看法。首先,既然我們要用oo的設計方法,那么就必須從頂至下來設計。讓我們先來分析一下聯眾這個游戲的流程,首先,我們進入游戲大廳,然后選定一個...
我不會拖拉機這種玩法,只能就一般牌類的玩法來談談我對這個的看法。首先,既然我們要用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 ; //現在在這桌的用戶,包括正在玩的和觀戰的
privateMatch 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
{
//成員變量
privateint 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 CardTypem_intCardType ;//牌花色
//方法
沒有什么特殊的方法,set,get一類的
}//end class
六、用戶類(User)
public Class User()
{
成員變量
private string m_strName ;//姓名
.......很多諸如此類的屬性。
//方法
.....沒有什么特殊的方法,set,get一類的
}
好了,看看,是不是已經完成了?要注意的是不要在這些類中加入比如畫圖、操作數據庫一類的操作,而應該繼承以后再和具體的系統環境結
合。