基于MATLAB的連連看開發(fā)_第1頁
基于MATLAB的連連看開發(fā)_第2頁
基于MATLAB的連連看開發(fā)_第3頁
基于MATLAB的連連看開發(fā)_第4頁
基于MATLAB的連連看開發(fā)_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

課程設(shè)計基于Matlab的連連看開發(fā):***班級:**********:**********指導(dǎo)教師:***西北工業(yè)大學(xué)測控技術(shù)與儀器自動化學(xué)院2016年10月摘要在MATLAB的根底上,利用Simulink的現(xiàn)有庫monlyUsedBlocks中的各類常用模塊,使用一些根底編程代碼,完成連連看的游戲設(shè)計。如果將同一模塊的輸入端與輸出端連接之后,雖然從信號線判斷其源和目的所連接的模塊類型一樣,應(yīng)該注釋掉;但是由于句柄一致,可以判斷出二者實際上是一個模塊,此時也將信號線自動刪除,并告知玩家連接的是同一個模塊。本次游戲設(shè)計中使用了一個主函數(shù)創(chuàng)立一個含有double模塊的模型系統(tǒng)。callback回調(diào)函數(shù)delete_pair_blocks.m,判斷連線兩端模塊類型是否一樣。利用寄時器callback回調(diào)函數(shù)delete_pair_bl.m設(shè)置模塊屬性。關(guān)鍵詞:Simulink,MATLAB,跳轉(zhuǎn)回調(diào)函數(shù),timer目錄摘要I目錄I一、游戲概述11.1連連看游戲簡介1根本概述1特點處理11.2Simulink介紹11.2.1Simulink簡介11.2.2Simulink的啟動11.2.3Simulink的模塊庫介紹1二、程序介紹12.1主函數(shù)Link_and_Delete.m1程序代碼1程序描述12.2回調(diào)函數(shù)delete_pair_blocks.m1程序代碼1程序描述12.3回調(diào)函數(shù)delete_pair_bl.m1程序代碼1程序描述1三、設(shè)計過程13.1設(shè)計思路13.2設(shè)計特色描述1通過timer產(chǎn)生callback回調(diào)函數(shù)delete_pair_bl.m設(shè)置模塊1四、運行結(jié)果14.1創(chuàng)立新模型14.2連線14.3連線完成14.4運行缺陷〔待解決〕1已存在link_delete.sl*情況1首次運行情況1五、總結(jié)1參考資料1一、游戲概述1.1連連看游戲簡介根本概述連連看,在散亂的模塊陣中,將兩個一樣的模塊連線后消除。運行Link_and_Delete.m程序,自動創(chuàng)立模型,模型中隨機分布不同種類的模塊(位置隨機)。用戶識別一樣的模塊,并連線。當所有模塊都兩兩相連的時候,系統(tǒng)判斷用戶獲勝。特點處理(1)、模塊兩兩連線后虛化模塊兩兩連線成功后,系統(tǒng)出現(xiàn)提示“Youfindonepaircorrectly〞,模塊整體虛化。保存模塊在模型中,便于用戶了解模型中使用的全部模塊。(2)、模塊連線失敗后無法后退模塊連接失敗后無法后退,刪除連線時出現(xiàn)“Error〞警告。每一個模塊都有輸入輸出兩端口,允許一次失敗。1.2Simulink介紹1.2.1Simulink簡介Simulink是Matlab軟件的擴展,它是實現(xiàn)動態(tài)系統(tǒng)建模和仿真的一個軟件包,它與Matlab語言的主要區(qū)別在于,其與用戶交互接口是基于Windows的模型化圖形輸入,其結(jié)果是使得用戶可以把更多的精力投入到系統(tǒng)模型的構(gòu)建,而非語言的編程上。所謂模型化圖形輸入是指Simulink提供了一些按功能分類的根本的系統(tǒng)模塊,用戶只需要知道這些模塊的輸入輸出及模塊的功能,而不必考察模塊部是如何實現(xiàn)的,通過對這些根本模塊的調(diào)用,再將它們連接起來就可以構(gòu)成所需要的系統(tǒng)模型〔以.mdl文件進展存取〕,進而進展仿真與分析。1.2.2Simulink的啟動〔1〕在Matlab命令窗口中輸入simulink結(jié)果是在桌面上出現(xiàn)一個稱為SimulinkLibraryBrowser的窗口,在這個窗口中列出了按功能分類的各種模塊的名稱。〔2〕通過Matlab主窗口的快捷按鈕來翻開SimulinkLibraryBrowser窗口?!?〕在MATLAB命令窗口中輸入simulink3結(jié)果是在桌面上出現(xiàn)一個用圖標形式顯示的Library:simulink3的Simulink模塊庫窗口。1.2.3Simulink的模塊庫介紹Simulink模塊庫按功能進展分為以下8類子庫:Continuous〔連續(xù)模塊〕Discrete〔離散模塊〕Function&Tables〔函數(shù)和平臺模塊〕Math〔數(shù)學(xué)模塊〕Nonlinear〔非線性模塊〕Signals&Systems〔信號和系統(tǒng)模塊〕Sinks〔接收器模塊〕Sources〔輸入源模塊〕二、程序介紹2.1主函數(shù)Link_and_Delete.m程序代碼mdl_name='link_delete';mdl_fullname=[mdl_name,'.sl*'];ife*ist(mdl_fullname,'file')trydelete(mdl_fullname);catchclose_system(mdl_fullname);delete(mdl_fullname);endendnew_system(mdl_name);save_system(mdl_name);open_system(mdl_name);block_lib_path='Simulink/monlyUsedBlocks/';lib_block_name={'Gain','Integrator','DataTypeConversion','Saturation','Delay','Discrete-TimeIntegrator'};block_type_num=length(lib_block_name);blocks_num=5;en_num=500;forii=1:blocks_numind=randi(block_type_num,[11]);src_str=strcat(block_lib_path,lib_block_name(ind));dst_str=strcat(mdl_name,'/',lib_block_name(ind));block_handle=add_block(src_str{:},dst_str{:},'MakeNameUnique','on');pos=get_param(block_handle,'position');add_block(src_str{:},dst_str{:},'MakeNameUnique','on','position',pos+en_num*rand);endblocks_handle=find_system(gcs,'findall','on','type','block');forii=1:blocks_num*2prop=get(blocks_handle(ii));set(prop.PortHandles.Inport,'ConnectionCallback','delete_pair_blocks');end程序描述=1\*GB1⒈建立一個新的模型并命名mdl_name='link_delete';mdl_fullname=[mdl_name,'.sl*'];=2\*GB1⒉容錯處理:判斷當前模型是否是一個已存在模型,假設(shè)是,刪除已有模型,并重新翻開新的模型〔或先關(guān)閉已翻開模型〕ife*ist(mdl_fullname,'file')trydelete(mdl_fullname);catchclose_system(mdl_fullname);delete(mdl_fullname);endend=3\*GB1⒊后臺新建和保存模型,翻開新模型new_system(mdl_name);save_system(mdl_name);open_system(mdl_name);=4\*GB1⒋在新建的模型中放入模塊=1\*GB2⑴將模塊所在的庫的字符串'Simulink/monlyUsedBlocks/'存入庫變量block_lib_path中;將所需模塊種類放入變量lib_block_name中block_lib_path='Simulink/monlyUsedBlocks/';lib_block_name={'Gain','Integrator','DataTypeConversion','Saturation','Delay','Discrete-TimeIntegrator'};=2\*GB2⑵選擇模塊數(shù)量;en_num:模塊像素位置的擴大倍數(shù),錯開copy的兩個模塊,視覺上識別模塊block_type_num=length(lib_block_name);blocks_num=5;en_num=500;=3\*GB2⑶for循環(huán),實現(xiàn)模塊的分布:同一個種類的模塊不同copy分別存放如模型的不同位置,五次循環(huán),實現(xiàn)10個模塊的copyforii=1:blocks_numend=1\*GB3①創(chuàng)立一個1*1隨機數(shù),從五個模塊索引中隨機產(chǎn)生一個整數(shù),選擇一個種類ind=randi(block_type_num,[11]);=2\*GB3②字符串拼接模塊全名,得到源模塊和目標模塊,add_block得到每一個unique的模塊名稱src_str=strcat(block_lib_path,lib_block_name(ind));dst_str=strcat(mdl_name,'/',lib_block_name(ind));=3\*GB3③獲取第一個模塊的位置句柄,pos+en_num*rand產(chǎn)生第二個模塊的位置句柄〔大小不變,位置起點變化〕,完成copyblock_handle=add_block(src_str{:},dst_str{:},'MakeNameUnique','on');pos=get_param(block_handle,'position');add_block(src_str{:},dst_str{:},'MakeNameUnique','on','position',pos+en_num*rand);=5\*GB1⒌模塊端口屬性配置回調(diào)函數(shù)ConnectionCallbackblocks_handle=find_system(gcs,'findall','on','type','block');=1\*GB2⑴find_system找到10個既存模塊的句柄放入數(shù)組blocks_handle〔10*1〕中forii=1:blocks_num*2end=2\*GB2⑵獲取blocks_handle屬性,再獲取模塊端口句柄prop=get(blocks_handle(ii));=3\*GB2⑶每個模塊的設(shè)置ConnectionCallback,觸發(fā)delete_pair_blocks.m,判斷是否匹配相連的兩個模塊set(prop.PortHandles.Inport,'ConnectionCallback','delete_pair_blocks');2.2回調(diào)函數(shù)delete_pair_blocks.m程序代碼functiondelete_pair_blocks(port)persistenttport_prop=get(port);line_prop=get(port_prop.Line);src_bh=line_prop.SrcBlockHandle;dst_bh=line_prop.DstBlockHandle;src_block=get(src_bh);dst_block=get(dst_bh);ifstrcmp(src_block.BlockType,dst_block.BlockType)disp('Youfindonepaircorrectly');ifisempty(t)t=timer;endset(t,'StartDelay',0.1,'TimerF',{delete_pair_bl,src_bh,dst_bh});start(t);elsedisp('Youfindonepairworingly');ifisempty(t)t=timer;endset(t,'StartDelay',0.3,'TimerF',{delete_pair_line,line_prop.Handle});start(t);end程序描述創(chuàng)立函數(shù)delete_pair_blocks.m,獲取連線與連線的端口模塊,并判斷模塊種類,假設(shè)種類一樣,則虛化相應(yīng)模塊及連線。=1\*GB1⒈通過port獲取連線delete_pair_blocks(port)=2\*GB1⒉通過句柄,獲取連線端口的相應(yīng)屬性port_prop=get(port);line_prop=get(port_prop.Line);=3\*GB1⒊尋找端口模塊的源和目標句柄,獲得相應(yīng)參數(shù)src_bh=line_prop.SrcBlockHandle;dst_bh=line_prop.DstBlockHandle;src_block=get(src_bh);dst_block=get(dst_bh);=4\*GB1⒋判斷源和目標模塊的種類屬性是否一致,strcmp比照;顯示相應(yīng)信息,并通過timer產(chǎn)生callback回調(diào)函數(shù)delete_pair_bl.m設(shè)置模塊對mentedifstrcmp(src_block.BlockType,dst_block.BlockType)disp('Youfindonepaircorrectly');ifisempty(t)t=timer;endset(t,'StartDelay',0.1,'TimerF',{delete_pair_bl,src_bh,dst_bh});start(t);elsedisp('Youfindonepairworingly');ifisempty(t)t=timer;endset(t,'StartDelay',0.3,'TimerF',{delete_pair_line,line_prop.Handle});start(t);end2.3回調(diào)函數(shù)delete_pair_bl.m程序代碼functiondelete_pair_bl(obj,event,src,dst)set_param(src,'mented','on');set_param(dst,'mented','on');ifisempty(find_system(gcs,'Includemented','off','type','block'))ans_str=questdlg('YouWin!Congratulations!Anothertry"','YouWin','Yes','No','Yes');bdclose(gcs);ifstrcmp(ans_str,'Yes')Link_and_Delete;endendend程序描述創(chuàng)立一個timer的callback的回調(diào)函數(shù)=1\*GB1⒈注釋src和dst的模塊屬性set_param(src,'mented','on');set_param(dst,'mented','on');=2\*GB1⒉判斷是否所有模塊都被連接,游戲是否已完畢ifisempty(find_system(gcs,'Includemented','off','type','block'))ans_str=questdlg('YouWin!Congratulations!Anothertry"','YouWin','Yes','No','Yes');bdclose(gcs);end=3\*GB1⒊同時用戶可選擇是否重新開場新的模型游戲ifstrcmp(ans_str,'Yes')Link_and_Delete;end三、設(shè)計過程3.1設(shè)計思路3.2設(shè)計特色描述通過timer產(chǎn)生callback回調(diào)函數(shù)delete_pair_bl.m設(shè)置模塊Simulink在執(zhí)行callback時不能修改任一的模塊,即仿真進展時不能動態(tài)注釋模塊。故在delete_pair_blocks.m中不使用set_param修改,而選擇定時器。ifisempty(t)t=timer;endset(t,'StartDelay',0.1,'TimerF',{delete_pair_bl,src_bh,dst_bh});start(t);定時器啟動0.1秒延遲,定時器由Matlab提供,延時后callback回調(diào)函數(shù)delete_pair_bl.m,并將src_bh、dst_bh作為輸入?yún)?shù)。set_param(src,'mented','on');set_param(dst,'mented','on');延遲的作用在于執(zhí)行完成主函數(shù)callback回調(diào)函數(shù)delete_pair_blocks.m,同時啟動timer的callback,回調(diào)函數(shù)delete_pair_bl.m中注釋源與目標模塊,實現(xiàn)多線程并發(fā),提高執(zhí)行速度。四、運行結(jié)果4.1創(chuàng)立新模型方法一:在Matlab命令窗口中輸入Link_and_Delete方法二:翻開Link_and_Delete.m文件,點擊運行快捷按鍵4.2連線連接兩模塊的輸入與輸出端口,系統(tǒng)判斷假設(shè)連線兩端的模塊屬性一致,則在Matlab命令窗口中顯示Youfindonepaircorrectly;假設(shè)連線兩段的模塊屬性不一致,則在Matlab命令窗口中顯示Youfindonepairworingly由于每個模塊都有一個輸出與一個輸入端口,則每個模塊的連線有一次錯誤的時機,故設(shè)計連線過程無法后退,連線無法刪

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論