亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

        呂艷陽

        摘要:在程序設(shè)計課程中,學(xué)生普遍認為多人聯(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 文獻標識碼: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ù)端負責(zé)接收消息,轉(zhuǎn)發(fā)消息,讓各個客戶端的事件同步,從而畫面同步。

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

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

        游戲作為一種軟件,完全符合MVC(Model View Control)架構(gòu)。M負責(zé)數(shù)據(jù)存儲,圖片資源素材;V負責(zé)視圖顯示、圖片繪制;C負責(zé)程序控制,刷新各項數(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對象,對應(yīng)一個圖片文件;動畫狀態(tài),準備/播放/結(jié)束。

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

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

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

        動畫的類圖如圖6所示:

        3.4 多個英雄角色

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

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

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

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

        3.5 移動功能

        當點擊鼠標,設(shè)置玩家控制單位的目的地坐標,開始移動。通過游戲循環(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) 設(shè)置目的地坐標后,狀態(tài)設(shè)置為MOVE,表示開始走;

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

        3) 如果到達目的地,狀態(tài)設(shè)置為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 服務(wù)端功能和類結(jié)構(gòu)

        4.1 多種設(shè)計方案

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

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

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

        具體過程:

        當用戶觸發(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)良好,可以在程序較少改動的情況下,補充新功能。當設(shè)置好客戶端的消息格式,服務(wù)端和客戶端可以分別改進優(yōu)化,互不影響,有利于學(xué)生團隊分工協(xié)作。

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

        參考文獻:

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

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

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

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

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

        猜你喜歡
        設(shè)計模式服務(wù)端客戶端
        仿生設(shè)計模式的創(chuàng)新應(yīng)用探索
        玩具世界(2023年6期)2024-01-29 12:14:36
        “1+1”作業(yè)設(shè)計模式的實踐探索
        交通機電工程設(shè)計模式創(chuàng)新探討
        云存儲中基于相似性的客戶-服務(wù)端雙端數(shù)據(jù)去重方法
        縣級臺在突發(fā)事件報道中如何應(yīng)用手機客戶端
        傳媒評論(2018年4期)2018-06-27 08:20:24
        孵化垂直頻道:新聞客戶端新策略
        傳媒評論(2018年4期)2018-06-27 08:20:16
        基于Vanconnect的智能家居瘦客戶端的設(shè)計與實現(xiàn)
        電子測試(2018年10期)2018-06-26 05:53:34
        新時期《移動Web服務(wù)端開發(fā)》課程教學(xué)改革的研究
        在Windows Server 2008上創(chuàng)建應(yīng)用
        互動式設(shè)計模式研究
        国产伪娘人妖在线观看| 国产亚洲日本精品无码| av无码免费永久在线观看| 国产哟交泬泬视频在线播放 | 色婷婷日日躁夜夜躁| 亚洲国产日韩欧美高清片a| 亚洲一区二区懂色av| 欧美a级在线现免费观看| 真人直播 免费视频| 色综合久久久久综合999| 亚洲av免费看一区二区三区| 久久婷婷五月综合色奶水99啪| 亚洲男人的天堂在线aⅴ视频 | 日本免费一区二区久久久| 免费无码又爽又高潮视频| 成熟人妻av无码专区| 欧洲国产成人精品91铁牛tv| 亚洲女同性恋第二区av| 亚洲人精品午夜射精日韩| 少妇白浆高潮无码免费区| 国产日韩欧美视频成人| av在线不卡一区二区| 日韩国产精品无码一区二区三区 | 天天做天天爱天天综合网| 免费人人av看| 一区二区视频中文字幕| 欧美黑人群一交| 亚洲日本va99在线| 蜜桃视频永久免费在线观看| 久久精品国产字幕高潮| 久久精品久久久久观看99水蜜桃 | 无码人妻精品一区二区三区在线| 一区在线播放| 国产视频激情在线观看| 一区二区三区乱码在线 | 欧洲| 国产成人精品三级麻豆| 淫秽在线中国国产视频| 亚洲av香蕉一区区二区三区| 亚洲中文无码av在线| 农村国产毛片一区二区三区女| 日出白浆视频在线播放|