国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

2018-01-09 14:45呂艷陽
電腦知識與技術(shù) 2017年34期
關(guān)鍵詞:設計模式服務端客戶端

呂艷陽

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

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

中圖分類號:TP311 文獻標識碼: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)絡游戲,包含客戶端部分和服務端部分。在教學工作中,把這樣的題目作為綜合實踐項目,多數(shù)學生都覺得制作難度大,一般會選擇休閑小游戲。

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

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

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

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

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

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

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

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

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

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

游戲效果如圖3所示:

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

程序主要包括以下類:

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

藍方列表EnemyArray類:存放藍方英雄和塔。

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

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

3.2 可移動的圖片

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

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

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

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

3.3 動畫

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

單個動畫的類AniBm:

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

方法:繪制圖片,當前幀加1,設置輸出坐標。

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

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

動畫的類圖如圖6所示:

3.4 多個英雄角色

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

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

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

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

3.5 移動功能

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

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

public static int READY=1;

public static int MOVE=2;

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

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

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

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

3.5 攻擊技能、補血技能

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

1) 技能的父類SkillBase類:

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

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

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

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

方法:繪制子彈;刷新子彈坐標;需要碰撞檢測。

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

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

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

類圖如圖7所示:

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

4.1 多種設計方案

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

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

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

具體過程:

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

服務端接收消息,轉(zhuǎn)發(fā)給其他客戶端??蛻舳私馕鱿?,完成對應操作,實現(xiàn)事件同步,從而畫面同步。

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

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

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

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

使用設計模式的觀察者模式。每個監(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)絡消息

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

6 結(jié)束語

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

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

參考文獻:

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

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

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

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

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

猜你喜歡
設計模式服務端客戶端
“1+1”作業(yè)設計模式的實踐探索
三維協(xié)同設計模式下的航天項目管理實踐與展望
交通機電工程設計模式創(chuàng)新探討
云存儲中基于相似性的客戶-服務端雙端數(shù)據(jù)去重方法
縣級臺在突發(fā)事件報道中如何應用手機客戶端
孵化垂直頻道:新聞客戶端新策略
基于Vanconnect的智能家居瘦客戶端的設計與實現(xiàn)
新時期《移動Web服務端開發(fā)》課程教學改革的研究
在Windows Server 2008上創(chuàng)建應用
互動式設計模式研究