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

基于Matlab GUI的RPG游戲的設計與實現

2016-09-16 08:27:07東南大學自動化學院魯瑜亮
電子世界 2016年12期
關鍵詞:游戲設計

東南大學自動化學院 魯瑜亮 汪 帆

基于Matlab GUI的RPG游戲的設計與實現

東南大學自動化學院魯瑜亮汪帆

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

RPG游戲;Matlab GUI;游戲對戰;配置文件;存檔

1 引言

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

本文將RPG與Matlab GUI結合,研究使用Matlab開發游戲的方法。

2 程序設計

2.1總體設計

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

圖2-01 程序流程圖

程序界面部分使用MATLAB的GUI來設計。MATLAB的GUI窗口化界面可方便開發。

2.2變量初始化

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

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

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

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

2.3對戰部分

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

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

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

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

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

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

start(hTimer);%啟動timer

stop(hTimer); %停止timer

對戰部分效果圖如圖2-03所示。

圖2-02 對戰部分流程圖

圖2-03 對戰部分效果圖

2.4鍵盤輸入部分

GUI自帶的回調函數KeyPressFcn在鍵盤被按下任意值時觸發,用這一函數可以實現人機互動。當KeyPressFcn函數響應時,從figure的currentcharacter屬性中可獲得鍵位值。

游戲在不同的狀態對按鍵的響應一般是不一樣的。為了實現不同狀態下按鍵響應不同,可以使用一個非只讀變量記錄當前狀態,并在KeyPressFcn函數中用switch對不同狀態值實現不同操作。

3 外部文件載入

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

3.1角色載入

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

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]

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

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

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

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

存檔文件應在游戲啟動時就載入到游戲中。MATLAB的fread函數可以實現從文件中讀取數據的功能。從存檔文件中讀取數據的代碼寫法如下所示:

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

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

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

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

存檔文件載入成功后游戲將從上一次玩家退出游戲的地方開始載入游戲。

3.3配置文件載入

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

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

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

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

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

parameter=[para1,para2]; %parameter變量儲存參數

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

3.4媒體文件載入

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

[y,Fs]=audioread(inputData.BGM{index}); %讀取音頻文件

BGM=audioplayer(y,Fs); %裝載音頻信息

play(BGM); %播放音樂

stop(BGM); %停止播放

4 結束語

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

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

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

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

猜你喜歡
游戲設計
何為設計的守護之道?
現代裝飾(2020年7期)2020-07-27 01:27:42
《豐收的喜悅展示設計》
流行色(2020年1期)2020-04-28 11:16:38
瞞天過海——仿生設計萌到家
藝術啟蒙(2018年7期)2018-08-23 09:14:18
設計秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
有種設計叫而專
Coco薇(2017年5期)2017-06-05 08:53:16
游戲
數獨游戲
瘋狂的游戲
飛碟探索(2016年11期)2016-11-14 19:34:47
爆笑游戲
第八章直接逃出游戲
小學科學(2015年7期)2015-07-29 22:29:00
主站蜘蛛池模板: 亚洲第一中文字幕| 中日无码在线观看| 亚洲va在线∨a天堂va欧美va| 中美日韩在线网免费毛片视频| 亚洲男人天堂网址| 波多野结衣视频一区二区| 亚洲日韩欧美在线观看| 久久久久人妻精品一区三寸蜜桃| 免费观看亚洲人成网站| 精品三级在线| 色综合天天视频在线观看| 久久亚洲国产最新网站| 日韩在线播放中文字幕| av性天堂网| 国产成人综合亚洲欧美在| 国产一区二区人大臿蕉香蕉| 国产小视频网站| a级毛片免费网站| 美女无遮挡拍拍拍免费视频| 亚洲一级毛片在线观| 尤物午夜福利视频| 另类欧美日韩| 欧美人人干| 玖玖精品视频在线观看| 白浆免费视频国产精品视频| 真实国产精品vr专区| 91精品久久久久久无码人妻| 呦视频在线一区二区三区| 亚洲香蕉在线| 99久久免费精品特色大片| 国产精品国产三级国产专业不| 国产性爱网站| 欧美h在线观看| 国产精品综合久久久| 亚洲午夜福利精品无码| 久久公开视频| 麻豆精品在线播放| 国产国语一级毛片在线视频| 五月天综合婷婷| 99久久国产综合精品女同| 高清免费毛片| 国产精品精品视频| 欧美精品影院| 国产成人免费手机在线观看视频| 99九九成人免费视频精品| 欧美成a人片在线观看| 在线观看视频一区二区| 99偷拍视频精品一区二区| 欧美一级在线| 毛片基地美国正在播放亚洲 | 成人韩免费网站| 日本在线亚洲| 午夜福利无码一区二区| 国产一区二区三区在线无码| 日韩色图区| 国产又色又爽又黄| 999精品视频在线| 香蕉视频在线观看www| 九九香蕉视频| 欧美精品成人| 久久国产精品麻豆系列| 91小视频在线观看免费版高清| 在线看片中文字幕| 日韩精品成人在线| 久久永久精品免费视频| 亚洲看片网| 伊人久久青草青青综合| a色毛片免费视频| 国产97色在线| 全免费a级毛片免费看不卡| 91无码网站| Aⅴ无码专区在线观看| 欧美日韩一区二区三区四区在线观看| 亚洲国产欧美中日韩成人综合视频| 国产在线97| 国产sm重味一区二区三区| 国产区成人精品视频| 在线亚洲小视频| 欧美成人h精品网站| 99这里只有精品免费视频| 国产精品免费露脸视频| 国产精品第5页|