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

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

2016-09-16 08:27:07東南大學(xué)自動(dòng)化學(xué)院魯瑜亮
電子世界 2016年12期
關(guān)鍵詞:游戲設(shè)計(jì)

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

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

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

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

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

1 引言

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

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

2 程序設(shè)計(jì)

2.1總體設(shè)計(jì)

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

圖2-01 程序流程圖

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

2.2變量初始化

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

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

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

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

2.3對(duì)戰(zhàn)部分

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

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

hTimer=timer; %定義一個(gè)定時(shí)器

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

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

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

start(hTimer);%啟動(dòng)timer

stop(hTimer); %停止timer

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

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

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

2.4鍵盤(pán)輸入部分

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

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

3 外部文件載入

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

3.1角色載入

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

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

[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]

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

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

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

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

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

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

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

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

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

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

3.3配置文件載入

為了更好的維護(hù)代碼及更新劇情,本游戲獨(dú)立設(shè)計(jì)了配置文件。配置文件的作用是指導(dǎo)系統(tǒng)如何加載對(duì)白、圖片及音樂(lè)這類的外部素材文件。我們?cè)O(shè)計(jì)了兩種配置文件,一種是初始化配置文件,用于初始化系統(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變量?jī)?chǔ)存命令指令

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

parameter=[para1,para2]; %parameter變量?jī)?chǔ)存參數(shù)

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

3.4媒體文件載入

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

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

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

play(BGM); %播放音樂(lè)

stop(BGM); %停止播放

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

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

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

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

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

猜你喜歡
游戲設(shè)計(jì)
何為設(shè)計(jì)的守護(hù)之道?
《豐收的喜悅展示設(shè)計(jì)》
流行色(2020年1期)2020-04-28 11:16:38
瞞天過(guò)海——仿生設(shè)計(jì)萌到家
設(shè)計(jì)秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
有種設(shè)計(jì)叫而專
Coco薇(2017年5期)2017-06-05 08:53:16
游戲
數(shù)獨(dú)游戲
瘋狂的游戲
飛碟探索(2016年11期)2016-11-14 19:34:47
爆笑游戲
第八章直接逃出游戲
主站蜘蛛池模板: 国模沟沟一区二区三区| 尤物成AV人片在线观看| 婷婷色在线视频| 色135综合网| 在线日韩日本国产亚洲| 一本大道视频精品人妻| 亚洲国产av无码综合原创国产| 国产日韩欧美成人| 亚洲国产成人麻豆精品| 成人精品在线观看| 一本大道香蕉中文日本不卡高清二区| 国产91特黄特色A级毛片| 日韩毛片免费| 精品一区二区三区中文字幕| 亚洲国产日韩在线成人蜜芽| 国产精品免费久久久久影院无码| 91网红精品在线观看| 国产99免费视频| 91精品小视频| 亚洲日韩AV无码精品| 亚洲精品欧美重口| 99这里只有精品6| 国产高潮流白浆视频| 中文字幕人妻无码系列第三区| 国产精品一老牛影视频| 毛片网站观看| 亚洲精品第一页不卡| 精品国产香蕉伊思人在线| 老司机久久99久久精品播放| 福利在线不卡| 五月综合色婷婷| 亚洲午夜综合网| 亚洲看片网| 不卡午夜视频| 麻豆国产原创视频在线播放| 久久伊人操| 伊人蕉久影院| 国产国产人在线成免费视频狼人色| 精品成人免费自拍视频| 国产亚洲成AⅤ人片在线观看| 精品自窥自偷在线看| 国产激情第一页| 亚洲成a人片7777| 精品国产成人a在线观看| av手机版在线播放| 欧美中日韩在线| 亚洲男人的天堂久久香蕉 | 美女潮喷出白浆在线观看视频| 日韩免费成人| 无码专区第一页| 色欲综合久久中文字幕网| 亚洲福利网址| 国产视频a| 国产91丝袜在线播放动漫| 日韩中文精品亚洲第三区| 国产精品爽爽va在线无码观看| 视频二区国产精品职场同事| 巨熟乳波霸若妻中文观看免费| 中文字幕日韩视频欧美一区| 午夜性爽视频男人的天堂| 亚洲视频无码| 日韩精品一区二区三区swag| 成人毛片在线播放| 日韩精品无码一级毛片免费| 日本黄色a视频| 午夜精品影院| 国产主播在线观看| 任我操在线视频| 日韩黄色精品| 久久综合亚洲鲁鲁九月天| 91久久性奴调教国产免费| 久青草网站| 久久综合色视频| 欧美激情第一区| 国产69囗曝护士吞精在线视频| 亚洲国产一成久久精品国产成人综合| 色成人亚洲| 伊在人亚洲香蕉精品播放| 91九色国产porny| 少妇露出福利视频| 国产精品美女免费视频大全| 国产精品嫩草影院av|