• 
    

    
    

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

      基于Matlab GUI的RPG游戲的設(shè)計與實現(xiàn)

      2016-09-16 08:27:07東南大學(xué)自動化學(xué)院魯瑜亮
      電子世界 2016年12期
      關(guān)鍵詞:配置文件控件儲存

      東南大學(xué)自動化學(xué)院 魯瑜亮 汪 帆

      基于Matlab GUI的RPG游戲的設(shè)計與實現(xiàn)

      東南大學(xué)自動化學(xué)院魯瑜亮汪帆

      簡要介紹了RPG游戲的要素和玩法,Matlab GUI的優(yōu)點,作用和使用。本文設(shè)計的游戲立意于環(huán)境保護,通過主人公的旅途,通過四個不同的場景經(jīng)歷的故事,宣傳綠色世界的主題。本文梳理了整個游戲的總體設(shè)計和實現(xiàn),著重介紹了變量初始化,游戲?qū)?zhàn)部分,鍵盤輸入部分,外部文件的載入(包括角色,存檔,配置,媒體)。

      RPG游戲;Matlab GUI;游戲?qū)?zhàn);配置文件;存檔

      1 引言

      RPG,即角色扮演游戲(Role-playing game)。在游戲玩法上,玩家扮演一位角色在一個寫實或虛構(gòu)的世界中活動。玩家負責(zé)扮演這個角色在一個結(jié)構(gòu)化規(guī)則下通過一些行動令所扮演角色發(fā)展。MATLAB 是美國MathWorks公司出品的商業(yè)數(shù)學(xué)軟件,用于算法開發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)分析以及數(shù)值計算的高級技術(shù)計算語言和交互式環(huán)境。圖形用戶界面是指由窗口、菜單、圖標、光標、按鍵、對話框、和文本 等各種圖形對象組成的用戶界面。它讓用戶定制用戶與Matlab的交互方式,而命令窗口不是唯一與Matlab的交互方式。Matlab的GUI(圖形用戶接口設(shè)計)采用面向?qū)ο蟮募夹g(shù),MATLAB具有豐富的函數(shù)庫,強大的圖形處理能力,界面設(shè)計更加簡潔、快捷、直觀。

      本文將RPG與Matlab GUI結(jié)合,研究使用Matlab開發(fā)游戲的方法。

      2 程序設(shè)計

      2.1總體設(shè)計

      角色扮演游戲可簡化為開頭,各章節(jié)和結(jié)局,而結(jié)局在所有章節(jié)載入完成后觸發(fā)。根據(jù)這一原理我們可以設(shè)計一個程序流程。圖2-01為本程序流程圖。

      圖2-01 程序流程圖

      程序界面部分使用MATLAB的GUI來設(shè)計。MATLAB的GUI窗口化界面可方便開發(fā)。

      2.2變量初始化

      在程序第一次運行時應(yīng)初始化好一些必要變量,以便各函數(shù)作為參數(shù)調(diào)用。一些特殊的變量在初始化完成后不允許修改。這類變量在初始化時被添加到handles中,并規(guī)定除了初始化函數(shù)GAFrame_OpeningFcn,其他各函數(shù)嚴禁使用guidata函數(shù)。這可以保證這類變量不被誤修改。

      經(jīng)常需要修改的變量不儲存在handles中,而是存在各控件的UserData中。用get函數(shù)獲得變量,用set函數(shù)儲存變量。這類變量的獲取及更新代碼寫法如下所示:

      DialogData=get(handles.textDialog,'userdata'); %從UserData中獲得變量

      set(handles.textDialog,'userdata',DialogData); %儲存變量到UserData中

      2.3對戰(zhàn)部分

      任何游戲都少不了對戰(zhàn)部分。本游戲參考UNDERTALE游戲的對戰(zhàn)部分,將對戰(zhàn)環(huán)節(jié)設(shè)計為躲避類游戲。游戲中各個元素用Axes的子類Line和Patch實現(xiàn),Line可方便實現(xiàn)元素的移動,Patch便于修改元素外形。對戰(zhàn)部分流程圖可簡化為如圖2-02所示。

      游戲中使用timer作為計時器,用于定時執(zhí)行游戲操作,包括移動元素位置及進行邏輯判斷。計時器初始化、啟動及關(guān)閉的示范代碼如下所示:

      hTimer=timer; %定義一個定時器

      set(hTimer,'ExecutionMode','FixedRate'); %周期執(zhí)行模式

      set(hTimer,'Period',0.018); %周期18ms

      set(hTimer,'TimerFcn',{@ExecuteGame,handles}); %定時器的執(zhí)行函數(shù)

      start(hTimer);%啟動timer

      stop(hTimer); %停止timer

      對戰(zhàn)部分效果圖如圖2-03所示。

      圖2-02 對戰(zhàn)部分流程圖

      圖2-03 對戰(zhàn)部分效果圖

      2.4鍵盤輸入部分

      GUI自帶的回調(diào)函數(shù)KeyPressFcn在鍵盤被按下任意值時觸發(fā),用這一函數(shù)可以實現(xiàn)人機互動。當(dāng)KeyPressFcn函數(shù)響應(yīng)時,從figure的currentcharacter屬性中可獲得鍵位值。

      游戲在不同的狀態(tài)對按鍵的響應(yīng)一般是不一樣的。為了實現(xiàn)不同狀態(tài)下按鍵響應(yīng)不同,可以使用一個非只讀變量記錄當(dāng)前狀態(tài),并在KeyPressFcn函數(shù)中用switch對不同狀態(tài)值實現(xiàn)不同操作。

      3 外部文件載入

      游戲的外部文件一般與程序部分是分開的。不同的外部文件程序采用不同的載入策略。

      3.1角色載入

      作為一款角色扮演游戲,自然少不了其他角色來烘托劇情。為了將角色形象載入到游戲中,我們使用Axes控件來儲存角色圖片信息。修改Axes控件的Position屬性就可以實現(xiàn)修改角色的位置和大小。

      Axes控件本身不能載入圖片,但它的子類Image可以儲存圖片,且Image有很多實用的屬性。本程序載入角色圖片的代碼寫法如下所示:

      [A,map,transparency]=imread(NPCData.NPCPic{1});

      NPC.Image=image(A, 'parent', axesNPC{num},'visible','off');

      if(~isempty(transparency))%如果有透明度則載入透明度

      set(NPC.Image,'AlphaData',transparency);

      end

      3.2存檔載入[4]

      存檔文件可以保存游戲記錄,是游戲非常重要的一個組成部分。為了保存玩家游戲記錄,我們特別設(shè)計了用于保存游戲記錄的存檔文件。在MATLAB中我們可以用fopen函數(shù)和fclose函數(shù)打開和關(guān)閉文件句柄,用fwrite函數(shù)向文件寫入存檔信息。將存檔保存到文件的代碼寫法如下所示:

      fid=fopen(filename,'w');%打開文件句柄

      fwrite(fid,saveData.chapter); %保存章節(jié)信息

      fclose(fid); %關(guān)閉文件句柄

      存檔文件應(yīng)在游戲啟動時就載入到游戲中。MATLAB的fread函數(shù)可以實現(xiàn)從文件中讀取數(shù)據(jù)的功能。從存檔文件中讀取數(shù)據(jù)的代碼寫法如下所示:

      fid=fopen(filename,'r'); %以只讀方式打開文件

      saveData.chapter=fread(fid,1); %讀取章節(jié)信息

      fclose(fid); %關(guān)閉文件句柄

      為了保證存檔被正確載入,在存檔時,我們特意在存檔文件開頭寫入存檔文件的大小。游戲在載入存檔時先檢查一下文件大小,大小正確則繼續(xù)載入存檔,若不正確應(yīng)立即停止載入,防止程序出錯。MATLAB 的fseek函數(shù)可以設(shè)置文件指針,實現(xiàn)從文件指定位置讀數(shù)據(jù)。

      存檔文件載入成功后游戲?qū)纳弦淮瓮婕彝顺鲇螒虻牡胤介_始載入游戲。

      3.3配置文件載入

      為了更好的維護代碼及更新劇情,本游戲獨立設(shè)計了配置文件。配置文件的作用是指導(dǎo)系統(tǒng)如何加載對白、圖片及音樂這類的外部素材文件。我們設(shè)計了兩種配置文件,一種是初始化配置文件,用于初始化系統(tǒng)參數(shù)。另一種是章節(jié)配置文件,用于初始化章節(jié)信息。

      MATLAB可以用fgetl函數(shù)一次讀取一行文本內(nèi)容,用strtok函數(shù)可以提取配置文件的指令及參數(shù)。用strtok函數(shù)提取指令及參數(shù)的代碼如下所示:

      string=fgetl(fid); %一次從文本文件中獲得一行數(shù)據(jù)

      [str, remain] = strtok(string, '< >'); %str變量儲存命令指令

      [para1,para2] = strtok(remain, ‘ > = ‘);

      parameter=[para1,para2]; %parameter變量儲存參數(shù)

      提取到指令及參數(shù)后,可以用switch選擇模塊選擇不同操作。為了忽略指令的大小寫,可以用lower函數(shù)將所有接受到的指令改為小寫。

      3.4媒體文件載入

      大部分游戲都是有音樂、圖片、視頻等媒體信息的,本游戲也有音樂和圖片媒體。圖片媒體的載入與角色載入一樣,都是用Axes控件的子類Image來儲存圖片信息。至于音樂媒體,可以使用MATLAB的audioread函數(shù)讀取音頻文件,用audioplayer函數(shù)裝載音頻信息,用play函數(shù)播放音樂,用stop函數(shù)停止音樂。音頻文件載入的示范代碼如下所示:

      [y,F(xiàn)s]=audioread(inputData.BGM{index}); %讀取音頻文件

      BGM=audioplayer(y,F(xiàn)s); %裝載音頻信息

      play(BGM); %播放音樂

      stop(BGM); %停止播放

      4 結(jié)束語

      本文所實現(xiàn)的游戲,可玩性極佳,作品是多劇情多結(jié)局模式,有及時存檔功能,可切換背景音樂,滿足RPG游戲所需的所有基本要素,這個游戲最大的亮點在于腳本文件的實現(xiàn),若要擴充劇情無需修改代碼,只需要修改配置文件,不用重新編譯程序,后續(xù)的工作量能減小。

      [1]陳子為.基于Matlab GUI掃雷游戲的設(shè)計與實現(xiàn)[J].現(xiàn)代電子技術(shù),2008,24:85-88.

      [2]張賢明.MATLAB語言及應(yīng)用案例[M].南京:東南大學(xué)出版社,2014:165-195.

      魯瑜亮(1994-),男,浙江長興人,現(xiàn)就讀于東南大學(xué)自動化學(xué)院。

      猜你喜歡
      配置文件控件儲存
      食物的儲存之道
      提示用戶配置文件錯誤 這樣解決
      搭建簡單的Kubernetes集群
      互不干涉混用Chromium Edge
      忘記ESXi主機root密碼怎么辦
      關(guān)于.net控件數(shù)組的探討
      軟件(2018年7期)2018-08-13 09:44:42
      安防云儲存時代已來
      火電廠碳捕集與儲存中吸收法的應(yīng)用和改進
      就這樣玩會VBA中常見的自定義控件
      電腦迷(2012年24期)2012-04-29 00:44:03
      冬眠
      文苑(2011年11期)2011-08-09 05:24:30
      越西县| 紫金县| 温宿县| 吕梁市| 习水县| 兰坪| 三亚市| 闵行区| 林周县| 塔河县| 昭觉县| 沽源县| 陕西省| 金溪县| 青浦区| 苍山县| 敦化市| 沐川县| 富蕴县| 务川| 黄平县| 雷波县| 马尔康县| 龙川县| 厦门市| 绥阳县| 泗洪县| 新乡市| 山东| 沁水县| 基隆市| 会泽县| 资溪县| 松原市| 古浪县| 扶风县| 大邑县| 青田县| 吉木乃县| 会东县| 东乌珠穆沁旗|