999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

設計模式在游戲多人對戰平臺中的應用

2008-12-31 00:00:00楚王輝宮一凡
電腦知識與技術 2008年26期

摘要:文章以網絡游戲對戰平臺為背景,介紹了設計模式在網絡游戲中的應用。在傳統的面向過程或者面向對象的編程中,各個不同的角色從產生到銷毀的全過程,主要使用數組或鏈表或集合來進行控制,程序邏輯復雜而不易修改和擴展。該文引入了設計模式的概念,使得控制游戲中各個角色的操作更加簡便、更加富有邏輯性。該文對從事設計模式研究、游戲制作的技術人員有一定幫助,實現代碼采用微軟的C#語言。

關鍵詞:設計模式;網絡游戲;C#

中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)26-1620-03

The Appliation of the Design Pattern in Online Games

CHU Wang-hui, GONG Yi-fan, CHEN Yun

(Shenzhen Institute of Technology, Shenzhen 518045, China)

Abstract: According to the background of the network battle game system built, the paper introduces the Application of Design Pattern technology in Online Games. In the traditional programming of process-oriented or object-oriented, mainly use the array or collection or chain to control the entire process from generation to the destruction of various roles. This paper introduces the Design Patterns. The Design Patters can controls the various roles more convenient, more full of logic. The paper is availability to the man who engages on the programming of game or the research of Design Patterns.

Key words: design pattern; online games; C#

1 引言

在傳統的面向對象或者面向過程的教學中,很多人都難于明白為什么要使用面向對象技術,教師也只能按照書上的示例給大家生搬硬套的講解面向對象,難以講解清楚使用面向對象技術的好處,在某些書籍的講解示例中,用面向過程技術很快能實現的功能非要套上面向對象的光環,使得學生很難理解面向對象技術的實際作用。此時,在國外很多計算機專家的努力下,總結出了很多成功應用面向對象的范例,并提出了設計模式的概念。在此背景下,本文闡述了使用設計模式技術制作多人對戰平臺的方法,望能起到拋磚引玉之用。

2 系統設計

網絡游戲設計的難點在于:每個游戲角色都需要知道在當前屏幕范圍內存在多少個其他角色,而其他角色可能是和登陸角色一樣的游戲玩家,也可能是游戲當中的怪物或者其他劇情人物。如下圖所示:

由前面描述和上面的圖形我們可以得出以下幾點:

1) 當角色新登入對戰平臺,此時,新登陸的角色應該能夠知道屏幕中已經存在了哪些角色,同時,屏幕中已經存在的角色也應該能夠知道新登陸的角色的信息。

2) 當角色退出系統時,屏幕中的所有其他角色都能夠知道哪個角色退出了系統。

3) 當角色產生了動作,如攻擊、移動等,其他角色能夠得知該角色的具體方位,和角色攻擊對自己產生的影響。

上面的需求類似于.net的ui框架設計,在.net窗體程序中,可以任意的在Form中添加文本框TextBox,標簽Lable,按鈕Button,數據綁定控件DataGrid等。不管添加了哪種類型的控件。.net框架都能夠自知。并且,當單擊了Button按鈕時,.net框架能夠感知事件的發生,這和網絡游戲當中當一個角色發動攻擊時,其他角色能夠感知攻擊是一樣的道理。基于以上分析,查閱了net框架事件的實現,得知.net框架采用了委托來實現事件機制,而委托采用了設計模式當中的Observer模式,于是,決定對Observer模式進行改進,實現多人網絡對戰。

4) Observer模式。

Observer模式意圖的描述是:“定義對象間的一種一對多依賴關系,使得每當一個對象改變裝態,則其相關依賴對象皆得到通知并自動更新。”

在軟件的構建過程中,我們常常要為一些對象建立一種通知依賴關系:當一個對象(Subject)的狀態發生改變或某一特定事件發生時,所有的依賴對象(Observer)都需要得到通知。由于需求的變化,需要得到通知的Observer對象可能會發生變化,這時我們就需要使用面向對象的設計方法來封裝這種變化,使觀察者和被觀察者形成一種松散的耦合關系。

基于Observer模式的描述,我們可以對其進行改進,實現網絡游戲對戰。具體描述如下:每當一個角色登陸游戲服務器,即把該角色添加到屏幕中現存角色的依賴關系中,同時把屏幕上的所有角色添加到登陸角色的依賴關系當中,這樣就達到了多對多依賴的效果。

有了這種多對多的依賴關系,當其中一個角色狀態發生改變時,就能夠通知屏幕中現存的所有對象,使其產生相應的動作。

當一個角色誕生的時候、我們使用Add(Role role)函數把它添加到屏幕集合中。

當角色發生事件、例如角色移動位置、發動攻擊,則調用NotifyRole()函數通知所有其他相關對象。

當角色消亡、調用Remove(Role role)函數把角色從屏幕集合中清除。

具體UML圖如下所示。

3 具體實現

1) 根據以上分析,建立ScreenObject類。

public class ScreenObject {

private static ArrayList _list_Roles = new ArrayList();

public static void Add(IRole role){ //實現添加角色到當前屏幕

_list_Roles.Add(role);}

public static void Remove(IRole role) {//實現從屏幕中移除角色

_list_Roles.Remove(role);}

public string GetState() { return 1; }//獲取角色狀態

public string SetState() { return 1; }//設置角色狀態

public void NotifyRole() {//通知所有角色

foreach (IRole role in _list_Roles){

role.Update(this);}

throw new System.NotImplementedException();}}

2) 建立角色接口。并更加此接口定義派生人物、怪物等不同角色類。

public interface IRole { //接口

void Update(ScreenObject sObj); //當角色發生改變,能通知到所有其他角色}

public abstract class Roles:IRole{ //基類

public abstract void Update(ScreenObject sObj);}

public abstract class PersonRole :Roles{//人物類

public PersonRole() { }

public override void Update(ScreenObject sObj){}}

public class MainRole:PersonRole{//具體類

public override void Update(ScreenObject sObj) {}}

4 結束語

在面向對象概念面世以后,很多人都研究他、探索他,但后來發現很多程序用結構化程序設計方法比面向對象技術來得更加簡便、特別是沒有大項目開發經驗的人對面向對象技術深感迷惑。直到設計模式面世以后。才發現學習面向對象技術最好從設計模式學起,只有從學習設計模式技術開始,才能真正理解掌握面向對象,并喜歡上面向對象。本文采用設計模式中的一些技術對網絡游戲的設計進行了探討,忘能拋磚引玉。

參考文獻:

[1] Eric J Braude.軟件設計[M].李仁發,譯.北京:電子工業出版社,2007.

[2] Alan Shalloway.設計模式解析[M].許言聲,譯.北京:人民郵電出版社,2006.

[3] 云風.游戲之旅——我的編程感悟[M].北京:電子工業出版社,2005.

[4] Martin L Shoemaker.UML實戰教程[M].高猛,譯.北京:清華大學出版社,2006.

主站蜘蛛池模板: 永久天堂网Av| 在线99视频| 亚洲视频a| 国产喷水视频| 青青青国产精品国产精品美女| 婷婷五月在线| 国产微拍精品| 波多野结衣中文字幕久久| 久久99精品久久久大学生| 欧美色视频在线| 97在线观看视频免费| 国产真实乱了在线播放| 成年片色大黄全免费网站久久| 欧美视频在线第一页| 久久精品视频亚洲| 丰满人妻中出白浆| 97狠狠操| 亚洲精品第一页不卡| 91在线高清视频| 911亚洲精品| 九九热视频精品在线| 久久香蕉国产线看观| 女人18毛片一级毛片在线| 青青国产成人免费精品视频| 国产成人一区免费观看| 五月婷婷伊人网| 五月六月伊人狠狠丁香网| 国产9191精品免费观看| 国产精品综合久久久| 色老二精品视频在线观看| 日本免费一级视频| 成人日韩精品| 奇米影视狠狠精品7777| 中文字幕无码中文字幕有码在线| aa级毛片毛片免费观看久| 国产精品片在线观看手机版| 无码专区在线观看| 一级做a爰片久久毛片毛片| 三上悠亚在线精品二区| 国产高清又黄又嫩的免费视频网站| 亚洲无卡视频| 国内精品伊人久久久久7777人| 亚洲欧美另类视频| 日本精品影院| 亚洲视频四区| 日韩无码视频网站| 一级全免费视频播放| 国产99在线观看| 国产制服丝袜91在线| 人妻中文字幕无码久久一区| 日韩精品毛片人妻AV不卡| 思思热在线视频精品| 中文字幕久久精品波多野结| 91精品最新国内在线播放| 女人18毛片水真多国产| 91精品国产91久无码网站| 91久久国产热精品免费| 香蕉eeww99国产在线观看| 亚洲日本在线免费观看| 久久亚洲国产视频| 欧美三级不卡在线观看视频| 精品无码国产自产野外拍在线| 高清视频一区| 久久精品免费国产大片| 无码丝袜人妻| 91精品国产91欠久久久久| 99re在线视频观看| 午夜福利网址| 素人激情视频福利| 波多野结衣在线一区二区| 国产精品综合久久久| 大陆精大陆国产国语精品1024| 国产91精品调教在线播放| 亚洲国产精品久久久久秋霞影院| 亚洲无线观看| 国产精品午夜电影| 国产成人做受免费视频 | 国产无人区一区二区三区| h视频在线播放| 亚洲bt欧美bt精品| 天堂网亚洲系列亚洲系列| 午夜一级做a爰片久久毛片|