• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

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

      呂艷陽(yáng)

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

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

      中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):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 概述

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

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

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

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

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

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

      客戶(hù)端:開(kāi)啟8臺(tái)電腦,運(yùn)行客戶(hù)端。每人控制一名英雄角色,點(diǎn)擊鼠標(biāo)移動(dòng),按Q、W鍵使用攻擊技能、補(bǔ)血技能。

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

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

      3 客戶(hù)端功能和類(lèi)結(jié)構(gòu)

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

      游戲效果如圖3所示:

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

      程序主要包括以下類(lèi):

      紅方列表HeroArray類(lèi):存放紅方英雄和塔。

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

      技能類(lèi)SkillArray類(lèi),定義兩個(gè)對(duì)象,存放雙方陣營(yíng)發(fā)出的技能,包括攻擊技能和補(bǔ)血技能。

      程序的底層組件,包括圖片類(lèi)、移動(dòng)類(lèi)、動(dòng)畫(huà)類(lèi)、技能類(lèi)。將單個(gè)組件封裝,能存放、管理多個(gè)對(duì)象的類(lèi),包括圖片數(shù)組類(lèi),技能數(shù)組類(lèi),動(dòng)畫(huà)數(shù)組類(lèi)。

      3.2 可移動(dòng)的圖片

      可移動(dòng)的圖片(ItemPathBase類(lèi)),由兩個(gè)類(lèi)組合而成,圖片類(lèi)ItemBase和移動(dòng)類(lèi)Path,類(lèi)圖如圖5所示。

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

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

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

      3.3 動(dòng)畫(huà)

      動(dòng)畫(huà)由多幅圖片組成,依次繪制到屏幕上。

      單個(gè)動(dòng)畫(huà)的類(lèi)AniBm:

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

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

      一次補(bǔ)血技能的動(dòng)畫(huà),就是使用AniBm類(lèi)。

      用列表存放多個(gè)動(dòng)畫(huà),并實(shí)現(xiàn)動(dòng)畫(huà)的添加、刪除、刷新,就是多個(gè)動(dòng)畫(huà)的類(lèi)AniBmArray。

      動(dòng)畫(huà)的類(lèi)圖如圖6所示:

      3.4 多個(gè)英雄角色

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

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

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

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

      3.5 移動(dòng)功能

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

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

      public static int READY=1;

      public static int MOVE=2;

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

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

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

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

      3.5 攻擊技能、補(bǔ)血技能

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

      1) 技能的父類(lèi)SkillBase類(lèi):

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

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

      2) 子類(lèi),攻擊技能SkillBullet類(lèi):

      屬性:一個(gè)可移動(dòng)的子彈圖片

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

      3) 子類(lèi),補(bǔ)血技能SkillAddHp類(lèi):

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

      方法:繪制動(dòng)畫(huà);刷新動(dòng)畫(huà)幀;不需要碰撞檢測(cè)。

      類(lèi)圖如圖7所示:

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

      4.1 多種設(shè)計(jì)方案

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

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

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

      具體過(guò)程:

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

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

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

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

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

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

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

      主題類(lèi)Subject類(lèi):

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

      觀察者ClientObserverThread類(lèi):

      主要方法:

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

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

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

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

      6 結(jié)束語(yǔ)

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

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

      參考文獻(xiàn):

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

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

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

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

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

      猜你喜歡
      設(shè)計(jì)模式服務(wù)端客戶(hù)端
      仿生設(shè)計(jì)模式的創(chuàng)新應(yīng)用探索
      玩具世界(2023年6期)2024-01-29 12:14:36
      “1+1”作業(yè)設(shè)計(jì)模式的實(shí)踐探索
      交通機(jī)電工程設(shè)計(jì)模式創(chuàng)新探討
      云存儲(chǔ)中基于相似性的客戶(hù)-服務(wù)端雙端數(shù)據(jù)去重方法
      縣級(jí)臺(tái)在突發(fā)事件報(bào)道中如何應(yīng)用手機(jī)客戶(hù)端
      孵化垂直頻道:新聞客戶(hù)端新策略
      基于Vanconnect的智能家居瘦客戶(hù)端的設(shè)計(jì)與實(shí)現(xiàn)
      新時(shí)期《移動(dòng)Web服務(wù)端開(kāi)發(fā)》課程教學(xué)改革的研究
      在Windows Server 2008上創(chuàng)建應(yīng)用
      互動(dòng)式設(shè)計(jì)模式研究
      永兴县| 闸北区| 儋州市| 中卫市| 肥乡县| 营口市| 鹤岗市| 商丘市| 武隆县| 常宁市| 江孜县| 尚志市| 武山县| 手游| 定兴县| 运城市| 长宁区| 安陆市| 荔波县| 赤水市| 年辖:市辖区| 广安市| 新宁县| 德清县| 呼和浩特市| 乌兰浩特市| 邢台县| 新野县| 梁河县| 新郑市| 汾西县| 自治县| 易门县| 昌邑市| 大同市| 开远市| 互助| 措美县| 灯塔市| 徐闻县| 葵青区|