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

多人聯(lián)機對戰(zhàn)游戲的設(shè)計與實現(xiàn)

2018-01-09 14:45:15呂艷陽
電腦知識與技術(shù) 2017年34期
關(guān)鍵詞:游戲

呂艷陽

摘要:在程序設(shè)計課程中,學(xué)生普遍認(rèn)為多人聯(lián)機對戰(zhàn)游戲制作難度大,一般選擇休閑小游戲作為綜合實踐項目。制作一款包含客戶端、服務(wù)端的多人聯(lián)機對戰(zhàn)游戲,可以綜合應(yīng)用各種程序設(shè)計技術(shù)、網(wǎng)絡(luò)編程技術(shù)以及設(shè)計模式,提高學(xué)生專業(yè)實踐能力。

關(guān)鍵詞:多人聯(lián)機; 游戲; 網(wǎng)絡(luò)編程; 設(shè)計模式; 客戶端; 服務(wù)端

中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2017)34-0081-03

Abstract: In the program design course, the students are generally believed that Multiplayer Online Battle Game is difficult to develop, usually choose little recreational game as comprehensive practical project. Make a Multiplayer Online Battle Game including client and server, can practice various technology, such as programming technology, network technology and design patterns, to improve students' professional practical ability.

Key words: Multiplayer Online; Game; network programming; design patterns; client; server

1 概述

騰訊運營的多人對戰(zhàn)游戲,取得了巨大的市場成功。這款游戲是一個典型的C/S結(jié)構(gòu)的網(wǎng)絡(luò)游戲,包含客戶端部分和服務(wù)端部分。在教學(xué)工作中,把這樣的題目作為綜合實踐項目,多數(shù)學(xué)生都覺得制作難度大,一般會選擇休閑小游戲。

即使學(xué)生學(xué)習(xí)了程序設(shè)計、socket網(wǎng)絡(luò)編程、設(shè)計模式等課程,學(xué)生很難綜合應(yīng)用各門專業(yè)課程,制作一款多個用戶聯(lián)機、對戰(zhàn)競技、包含服務(wù)端、客戶端的對戰(zhàn)游戲。

該游戲的開發(fā),綜合使用了MVC架構(gòu)、多線程、socket網(wǎng)絡(luò)編程和消息處理、設(shè)計模式等技術(shù),程序耦合較低,架構(gòu)良好,實現(xiàn)了多人聯(lián)機對戰(zhàn)的主要流程和功能。

2 游戲結(jié)構(gòu)

該游戲使用MVC架構(gòu)、JAVA語言制作,不依賴第三方引擎,適合課程教學(xué)。游戲主要功能:

服務(wù)端:在一臺計算機上運行服務(wù)端程序。服務(wù)端負(fù)責(zé)接收消息,轉(zhuǎn)發(fā)消息,讓各個客戶端的事件同步,從而畫面同步。

客戶端:開啟8臺電腦,運行客戶端。每人控制一名英雄角色,點擊鼠標(biāo)移動,按Q、W鍵使用攻擊技能、補血技能。

勝負(fù)規(guī)則:雙方陣營各4人,每方有一個防御塔,摧毀對方塔則獲勝。實際部署效果如圖1、圖2所示。

游戲作為一種軟件,完全符合MVC(Model View Control)架構(gòu)。M負(fù)責(zé)數(shù)據(jù)存儲,圖片資源素材;V負(fù)責(zé)視圖顯示、圖片繪制;C負(fù)責(zé)程序控制,刷新各項數(shù)據(jù)。良好的程序架構(gòu),就是這三部分分工協(xié)作。

3 客戶端功能和類結(jié)構(gòu)

3.1 總體結(jié)構(gòu)

游戲效果如圖3所示:

客戶端總體程序、事件關(guān)系如圖4所示:

程序主要包括以下類:

紅方列表HeroArray類:存放紅方英雄和塔。

藍(lán)方列表EnemyArray類:存放藍(lán)方英雄和塔。

技能類SkillArray類,定義兩個對象,存放雙方陣營發(fā)出的技能,包括攻擊技能和補血技能。

程序的底層組件,包括圖片類、移動類、動畫類、技能類。將單個組件封裝,能存放、管理多個對象的類,包括圖片數(shù)組類,技能數(shù)組類,動畫數(shù)組類。

3.2 可移動的圖片

可移動的圖片(ItemPathBase類),由兩個類組合而成,圖片類ItemBase和移動類Path,類圖如圖5所示。

圖片類ItemBase:包含一個玩家單位的基本數(shù)據(jù)和素材圖片(java的Image類)。

移動類Path:包含一次移動的基本數(shù)據(jù),例如起始/結(jié)束坐標(biāo)、方向向量等。由父類Path保存公共的數(shù)據(jù),Path的子類實現(xiàn)不同的移動方式:A點到B點, A點朝B點方向移動。

一個英雄角色,一個發(fā)出的子彈,一個塔,都是使用ItemPathBase類。

3.3 動畫

動畫由多幅圖片組成,依次繪制到屏幕上。

單個動畫的類AniBm:

屬性:Imgae對象,對應(yīng)一個圖片文件;動畫狀態(tài),準(zhǔn)備/播放/結(jié)束。

方法:繪制圖片,當(dāng)前幀加1,設(shè)置輸出坐標(biāo)。

一次補血技能的動畫,就是使用AniBm類。

用列表存放多個動畫,并實現(xiàn)動畫的添加、刪除、刷新,就是多個動畫的類AniBmArray。

動畫的類圖如圖6所示:

3.4 多個英雄角色

把多個游戲單位以及碰撞檢測,封裝成一個類ItemArrayBase類。多個英雄、塔,都使用這個類。

屬性:列表ArrayList,存放多個游戲單位。

方法:繪制人物圖片的函數(shù),繪制生命條,碰撞檢測,如果碰到敵方技能,該英雄減少血量。一方塔被摧毀,則對方獲勝。

用戶控制的單位是列表中的某一個元素。不同客戶端,操縱不同英雄角色,實現(xiàn)了多人對戰(zhàn)。

3.5 移動功能

當(dāng)點擊鼠標(biāo),設(shè)置玩家控制單位的目的地坐標(biāo),開始移動。通過游戲循環(huán),不斷地刷新坐標(biāo),實現(xiàn)移動功能。

移動類Path類,用一個整數(shù)表示當(dāng)前狀態(tài),狀態(tài)集合包括停、走兩種狀態(tài):

public static int READY=1;

public static int MOVE=2;

狀態(tài)改變過程:

1) 設(shè)置目的地坐標(biāo)后,狀態(tài)設(shè)置為MOVE,表示開始走;

2) 如果狀態(tài)是MOVE,刷新坐標(biāo)數(shù)據(jù);

3) 如果到達(dá)目的地,狀態(tài)設(shè)置為READY,表示一次移動結(jié)束。

3.5 攻擊技能、補血技能

基本的父類包含公共數(shù)據(jù)、技能狀態(tài),子類實現(xiàn)不同技能。

1) 技能的父類SkillBase類:

屬性:技能狀態(tài),準(zhǔn)備/發(fā)出/結(jié)束;

方法:繪制,啟動技能,刷新數(shù)據(jù),是否進(jìn)行碰撞檢測。

2) 子類,攻擊技能SkillBullet類:

屬性:一個可移動的子彈圖片

方法:繪制子彈;刷新子彈坐標(biāo);需要碰撞檢測。

3) 子類,補血技能SkillAddHp類:

屬性:圖片數(shù)組,存放一段動畫素材;

方法:繪制動畫;刷新動畫幀;不需要碰撞檢測。

類圖如圖7所示:

4 服務(wù)端功能和類結(jié)構(gòu)

4.1 多種設(shè)計方案

某方案A:服務(wù)端實現(xiàn)業(yè)務(wù)邏輯功能,不斷地發(fā)送各個畫面。這樣的數(shù)據(jù)量太大,對于對戰(zhàn)游戲,會有延遲。

某方案B:實時地發(fā)送所有游戲角色的坐標(biāo)、屬性數(shù)據(jù),客戶端收到數(shù)據(jù)后,繪制一幅畫面。這樣發(fā)送的數(shù)據(jù)量大,發(fā)送次數(shù)多。

該游戲服務(wù)端的實現(xiàn)方案:使用socket網(wǎng)絡(luò)編程,轉(zhuǎn)發(fā)事件消息。

具體過程:

當(dāng)用戶觸發(fā)一個事件,例如玩家移動、發(fā)出技能Q或者W,以字符串形式,打包成一條消息。

服務(wù)端接收消息,轉(zhuǎn)發(fā)給其他客戶端。客戶端解析消息,完成對應(yīng)操作,實現(xiàn)事件同步,從而畫面同步。

服務(wù)端界面,只有一個文本框,顯示網(wǎng)絡(luò)消息。如圖8所示:

4.2 服務(wù)端監(jiān)聽客戶端連接

服務(wù)端設(shè)置端口號,建立ServerSocket后,采用多線程技術(shù),每成功連接一個客戶端,開啟一個新線程類ClientObserverThread類。

4.3 事件消息轉(zhuǎn)發(fā)

使用設(shè)計模式的觀察者模式。每個監(jiān)聽線程作為觀察者,收到消息后,轉(zhuǎn)發(fā)給其他觀察者。類圖如圖9所示:

主題類Subject類:

用ArrayList 存放多個監(jiān)聽線程。轉(zhuǎn)發(fā)消息時,調(diào)用某個觀察者的update函數(shù)。

觀察者ClientObserverThread類:

主要方法:

1) run函數(shù):用循環(huán)不斷地接收消息。

2) update函數(shù):調(diào)用send發(fā)送消息,作為觀察者模式的觀察者接口。

5 網(wǎng)絡(luò)消息

客戶端產(chǎn)生的消息采用逗號分隔的字符串。消息如表1所示:

6 結(jié)束語

充分利用設(shè)計模式,使程序架構(gòu)良好,可以在程序較少改動的情況下,補充新功能。當(dāng)設(shè)置好客戶端的消息格式,服務(wù)端和客戶端可以分別改進(jìn)優(yōu)化,互不影響,有利于學(xué)生團隊分工協(xié)作。

多人聯(lián)機對戰(zhàn)游戲的開發(fā),使學(xué)生知道,綜合利用所學(xué)課程,可以設(shè)計實現(xiàn)商業(yè)級游戲的流程和功能。通過實戰(zhàn)鍛煉,改善程序架構(gòu),提高專業(yè)技術(shù)能力。

參考文獻(xiàn):

[1] 楊衛(wèi)紅.坦克大戰(zhàn)游戲設(shè)計實例[J].電腦知識與技術(shù),2016,12(16):215-216.

[2] 電腦編程技巧與維護(hù)雜志社.《電腦編程技巧與維護(hù)》合訂本[J].電腦編程技巧與維護(hù),2011(8).

[3] 相潔,呼克佑.Java語言程序設(shè)計[M].北京:人民郵電出版社,2013.

[4] 陳銳,夏敏捷,葛麗萍.java游戲編程原理與實踐教程[M].北京:人民郵電出版社,2013.

[5] 李源.Java程序設(shè)計經(jīng)典300例[M].北京:電子工業(yè)出版社,2013.

猜你喜歡
游戲
做游戲
夜間游戲
游戲
送信游戲
數(shù)獨游戲
瘋狂的游戲
飛碟探索(2016年11期)2016-11-14 19:34:47
爆笑游戲
第八章直接逃出游戲
第八章 直接逃出游戲
游戲五計算
主站蜘蛛池模板: 欧美日本在线观看| 毛片网站在线看| 国产精品99r8在线观看| 欧美福利在线观看| 亚洲综合婷婷激情| 国产午夜精品一区二区三| 久久久久久国产精品mv| 伊人AV天堂| 国产成人一级| 精品国产成人高清在线| 在线免费观看AV| 青草视频久久| 欧美色丁香| 夜精品a一区二区三区| 超碰aⅴ人人做人人爽欧美 | 久草视频精品| 97在线公开视频| 亚洲国产一区在线观看| 亚洲午夜福利在线| 久久美女精品| 97精品久久久大香线焦| 欧美日韩国产精品综合| 97精品国产高清久久久久蜜芽| 国产欧美日韩va| 在线日韩一区二区| 久久免费观看视频| 日韩无码精品人妻| 国产一级妓女av网站| 女人一级毛片| 凹凸精品免费精品视频| 91系列在线观看| 国产精品爽爽va在线无码观看 | 日韩欧美视频第一区在线观看| 国产一级小视频| 日韩无码黄色| 美女一区二区在线观看| 国产极品美女在线| 99在线视频免费观看| 在线观看欧美国产| 亚洲性一区| 国产成人欧美| 成人午夜亚洲影视在线观看| 小蝌蚪亚洲精品国产| 国产办公室秘书无码精品| 狠狠色丁香婷婷综合| 污网站在线观看视频| 亚洲aaa视频| 91久久大香线蕉| 97色伦色在线综合视频| 亚洲国产看片基地久久1024| 国产精品手机视频| 欧美三级视频网站| 亚瑟天堂久久一区二区影院| 国产精品手机在线播放| 日韩无码视频专区| 欧美精品v| 亚洲天堂伊人| 无码粉嫩虎白一线天在线观看| 国产精品爽爽va在线无码观看| 国产AV无码专区亚洲A∨毛片| 尤物国产在线| 99精品国产自在现线观看| 日本三区视频| 国产精品jizz在线观看软件| 国产女人在线观看| 国产日韩久久久久无码精品| 日韩精品欧美国产在线| 亚洲第一色网站| 熟女视频91| 日本免费一区视频| 欧美区国产区| 国产高清在线观看91精品| 在线免费不卡视频| 夜精品a一区二区三区| 六月婷婷激情综合| 亚洲欧洲日本在线| 色视频久久| 视频一本大道香蕉久在线播放| 国产在线视频欧美亚综合| 小说 亚洲 无码 精品| 老司国产精品视频91| 真实国产乱子伦高清|