![基于嵌入式系統(tǒng)的游戲程序設(shè)計(jì)_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-5/1/65781d7c-57df-4ab9-9883-7814ff0e7617/65781d7c-57df-4ab9-9883-7814ff0e76171.gif)
![基于嵌入式系統(tǒng)的游戲程序設(shè)計(jì)_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-5/1/65781d7c-57df-4ab9-9883-7814ff0e7617/65781d7c-57df-4ab9-9883-7814ff0e76172.gif)
![基于嵌入式系統(tǒng)的游戲程序設(shè)計(jì)_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-5/1/65781d7c-57df-4ab9-9883-7814ff0e7617/65781d7c-57df-4ab9-9883-7814ff0e76173.gif)
![基于嵌入式系統(tǒng)的游戲程序設(shè)計(jì)_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-5/1/65781d7c-57df-4ab9-9883-7814ff0e7617/65781d7c-57df-4ab9-9883-7814ff0e76174.gif)
![基于嵌入式系統(tǒng)的游戲程序設(shè)計(jì)_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-5/1/65781d7c-57df-4ab9-9883-7814ff0e7617/65781d7c-57df-4ab9-9883-7814ff0e76175.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、基于嵌入式系統(tǒng)的游戲程序設(shè)計(jì)0引言隨著近年來計(jì)算技術(shù)、通信技術(shù)的飛速發(fā)展,特別是互聯(lián)網(wǎng)的迅速普及和3c(計(jì)算機(jī)、通信、消費(fèi)電子)合一的加速,微型化和專業(yè)化成為發(fā)展的新趨勢,嵌入式產(chǎn)品成為信息產(chǎn)業(yè)的主流。嵌入式系統(tǒng)被定義為以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟件硬件可裁剪,適應(yīng)應(yīng)用系統(tǒng)對功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。嵌入式系統(tǒng)是面向用戶、面向產(chǎn)品、面向應(yīng)用。而廣泛用于制造工業(yè)、過程控制、通信、儀器、儀表等,消費(fèi)類產(chǎn)品,如果獨(dú)立于應(yīng)用自行發(fā)展,則會失去市場。嵌入式處理器在功耗、體積、成本、可靠性、速度、處理能力、電磁兼容性等方面均受到應(yīng)用要求的制約,這些也是各個(gè)半導(dǎo)體廠商之
2、間的競爭熱點(diǎn)。嵌入式處理器的應(yīng)用軟件是實(shí)現(xiàn)嵌入式系統(tǒng)功能的關(guān)鍵。軟件要求固化存儲,軟件代碼要求高質(zhì)量、高可靠性。1開發(fā)平臺一個(gè)完整的嵌人式系統(tǒng)結(jié)構(gòu)如圖1所示,設(shè)計(jì)中采用的硬件平臺為基于IntelXscale架構(gòu)的PXA255開發(fā)板,CPU運(yùn)算速度為400MHz,FLASH為32MB容量的IntelStrataFLASH,SDRM容量為64MB,USBSlave支持USB1.1,LCD支持640X480分辨率。由圖1可以看出,一個(gè)完整的嵌入式系統(tǒng)不僅包含有硬件平臺,還有運(yùn)行于該硬件平臺的操作系統(tǒng)和基于該操作系統(tǒng)的應(yīng)用軟件,而嵌入式LinUX只是眾多嵌入式操作系統(tǒng)中的一個(gè)。從20世紀(jì)80年代末開始
3、,陸續(xù)出現(xiàn)了一些嵌入式操作系統(tǒng),例如比較著名的有Vxwork,pSOSNeculeus,QNX,ECOSLYNXPalmOS和WindowsCE,這些專用操作系統(tǒng)者B是商業(yè)化產(chǎn)品,其高昂的價(jià)格使許多低端產(chǎn)品的小公司望而卻步;而且源代碼的封閉性也大大限制了開發(fā)者的積極性。另外,結(jié)合國內(nèi)實(shí)情,當(dāng)前國家對自主操作系統(tǒng)的大力支持,也為源碼開放的Linux推廣提供廣闊的發(fā)展前景。再者,對上層應(yīng)用開發(fā)者而言,嵌入式系統(tǒng)需要的是一套高度簡練,界面友善,質(zhì)量可靠,應(yīng)用廣泛,易開發(fā)、多任務(wù),并且價(jià)格低廉的操作系統(tǒng)?;谝陨锨闆r,采用嵌入式Linux操作系統(tǒng)作為開發(fā)的軟件平臺。2交叉編譯工具鏈在嵌入式系統(tǒng)軟件的開
4、發(fā)過程中,交叉編譯工具鏈?zhǔn)菢O為重要的一環(huán),設(shè)計(jì)并制作良好的交叉編譯工具鏈?zhǔn)琼樌麑?shí)現(xiàn)軟件開發(fā)的重要保障。2.1ARM-Linux的gcc交叉工具鏈設(shè)計(jì)采用的Linux操作系統(tǒng)是經(jīng)過修改與裁剪的ARM-Linux;使用的開發(fā)工具是非圖形開發(fā)工具gcc。gcc交叉編譯工具一般情況下需自行制作,制作方法較為簡單,這里不做詳細(xì)介紹。制作一條比較完整的ARM-Linuxgcc交叉工具鏈主要用到如下軟件包:binutils工具包(/gnu/binutils);gcc編譯器(ftp://gnu/gcc);glibc函數(shù)庫(ftp://
5、gnu/glibc);glibc-linuxthreads包(/gnu/glibe);linux內(nèi)核(ftp://pub/linux/kernel)。如果Linux內(nèi)核低于2.6版本,還應(yīng)下載相應(yīng)的內(nèi)核補(bǔ)丁。(.uk/pub/linux/arm/kernel/v2.4/)2.2SDL圖形庫為使程序運(yùn)行的界面更加友好和美觀,在設(shè)計(jì)中要使用到圖形函數(shù)接口,這就意味著要向前面的工具鏈(采用gcc工具鏈版本為3.3.2)添加第三方的圖形函數(shù)庫。設(shè)計(jì)中采用的SDL(SimpleDirectMediaL
6、ayer)圖形庫為免費(fèi)的跨平臺多媒體應(yīng)用編程接口,具有豐富的函數(shù)庫,便于開發(fā)者使用。2.2.1SDL常用到的開發(fā)包(1)SDL_Image:提供顯示多種格式的圖彳顯示接口,它支持bmp,png,jpeg,gif,tiff等;(2)SDL_Draw:提供畫點(diǎn)線圓等幾何圖形的接口(SDL_g僅也含有這樣的功能http:/(3)SDL_ttf:提供顯示TTF文字的接口;(4)SDL_mixer:提供播放各種聲音文件的接口。把SDL編譯到工具鏈用的并非PC機(jī)本身帶的gcc編譯器,而是要用到第2.1節(jié)已經(jīng)做好了的交叉編譯工具鏈。其中使用的pkg-Config工具版本要在0.15.0版本或以上。SDL以及
7、與SDL安裝相關(guān)或有依賴關(guān)系的軟件有:alsa-lib-1.0.15,audiofile-0.2.6,esound-0.2.38,freetype-2.1.9,jpegsrc.v6b,libid3tag-0.15.1b,libmad-0.15.1b,libpng-1.2.22,madplay-0.15.2b,SDL-1.2.12,SDL_draw-1.2.11,SDL_g僅-2.0.15,SDL_image-1.2.6,sdl_mad-0.1,SDL_mixer-1.2.8,SDL_ttf-2.0.9,tiff-3.8.2,tslib-1.3,zlib-1.2.3。2.2.2交叉編譯的主要步驟
8、主要步驟為:(1)設(shè)定環(huán)境變量:PREFIX安裝目錄;CROSSEARM-Linux-;PKG_CONFIG_PATHbpkgcon-fig的路徑;ARCH在這里設(shè)成ARM;HOST注意要是ARM-Linux,而不是i386-linux(這與前面做ARM-Linux-gcc不一樣);BUILD設(shè)置為i386-linux。編譯時(shí)一定要指定CC,NM,AR等變量,讓它們跟交叉編譯器對應(yīng)的工具關(guān)聯(lián)起來,否則編譯時(shí)將會采用PC機(jī)Linux的gcc編譯器進(jìn)行編譯,不能達(dá)到交叉編譯的目的。(2)按順序依次編譯如下軟件:zlib編譯命令行:./configuresharedprefix=$PREFIXmak
9、e;makeinstallofreetype編譯命令行:./configurehost=$(HOST)-build=$(BUILD)-pre巾x=$PREFIXmake;makeinstallolibpng編譯命令行:./configurehost=$(HOST)build=$(BUILD)-prefix=$PREFIX;make;makeinstallolibtiff編譯命令行:/configurehost=$(HOST)build=$(BUILD)-prefix=$(PREFIX)/usr-without-x-enable-zlib-with-zlib-include-dir=$(PREF
10、IX)/includewith-zlib-lib-dir=$(PREFIX)/lib-with-jpeg-include-dir=$(PREFIX)/includewith-jpeg-lib-dir=$(PREFIX)/lib;make;makeinstall。tslib編譯命令行:/configurehost=$(HOST)一build=$(BUILD)-prefix=$(PREFIX)-cache-file=$(ARCH)-linux.cache-sysconfdir=$(PREFIX/etc-enable-static&&make;makeinstall。Libmad編譯
11、命令行:./configurehost=$(HOST)-build=$(BUILD)-prefix=$(PREFIX)make;makeinstalllibid3tag編譯命令行:./configurehost=$(HOST)-build=$(BUILD)-prefix=$(PREFIX)makemakeinstallmadplay編譯命令行:./configure-host=$(HOST)-build$(BUILD)-prefix=$(PREFIX);make;makeinstallalsa編譯命令行:configure-host=$(HOST)-build=$(BUILD)-prefix=
12、$(PREFIX)-disable-esd-disable-video-di-rectfb;make;makeinstalloaudiofile編譯命令行:./configure-host=$(HOST)-build=$(BUILD)-prefix=$(PREFIX)-disable-esd-disable-video-di-rectfb;make;makeinstalloesound編譯命令行:./configure-host=$(HOST)-build=$(BUILD)-prefix=$(PREFIX)-disable-esd-disable-video-di-rectfb;make;ma
13、keinstalloSDL編譯命令行:./configure-host=$(HOST)-build=$(BUILD)-prefix=$(PREFIX)-with-esd-exec-prefix=$(PREFIX)-disable-video-directfb;make;makeinstallosdl_image編譯命令行:./configure-host=$(HOST)-build=$(BUILD)-prefix=$(PREFIX)-with-sdl-exec-prefix=$(PREFIX)-enable-sdhest;make;makeinstallosdl_tff編譯命令行:./conf
14、igure-host=$(HOST)-build=$(BUILD)-prefix=$(PREFIX)-with-freetype-exec-prefix=$(PREFIX);make;makeinstallosdl_draw編譯命令行:./configure-host=$(HOST)-build=$(BUILD)prefix=$(PREFIX)-with-sdl-exec-prefix=$(PREFIX);make;makeinstallsdl_mixer編譯命令行:./configure-host=$(HOST)-build=$(BUIUD)-prefix=$(PREFIX)-with-sd
15、l-exec-prefix=$(PREFIX)make;makeinstallsdl_mad編譯命令行:/configure-host=$(HOST)-build$(BUILD)-prefix=$(PREFIX)-with-sdl-exec-pre巾x=$(PREFIX);make;makeinstall至此,整個(gè)工具鏈就制作完成,打包并做好備份。這個(gè)工具鏈并不限于只用于制作該工具的Linux操作系統(tǒng)上使用,同樣可用于別的Linux環(huán)境。3開發(fā)環(huán)境設(shè)置嵌入式系統(tǒng)通常為一個(gè)資源受限的系統(tǒng),直接在嵌入式系統(tǒng)的硬件平臺上編寫軟件比較困難,有時(shí)甚至是不可能的。一般嵌入式軟件開發(fā)采用的辦法是先在通用計(jì)算
16、機(jī)上編寫程序,然后通過交叉編譯,生成目標(biāo)平臺上可運(yùn)行的二進(jìn)制代碼格式,最后下載到目標(biāo)平臺上的特定位置上運(yùn)行。僅安裝好Linux系統(tǒng)和開發(fā)工具,還沒有真正完成設(shè)計(jì)所需要的開發(fā)環(huán)境。SDL只是一個(gè)圖形的函數(shù)庫,它向上提供圖形函數(shù)接口,向下調(diào)用系統(tǒng)圖形引擎來畫圖。它支持的圖形引擎有很多,這里采用Linux內(nèi)核自帶的FrameBuffer,代碼簡潔,十分適用于嵌入式軟件開發(fā)。如果在開發(fā)板上的Linux的/dev/目錄及其子目錄下沒有找到fb0或fb1或其他類似名稱的設(shè)備時(shí),則很有可能正在使用的內(nèi)核沒有FrameBuffer驅(qū)動(dòng)。此時(shí)只能重新定制內(nèi)核,選擇對FrameBuffer支持和相關(guān)的驅(qū)動(dòng),再進(jìn)行
17、內(nèi)核編譯。4主要解決問題對于一個(gè)人機(jī)對弈的嵌入式五子棋游戲來說,主要應(yīng)解決圖形顯示、人工智能算法、鍵盤事件處理3個(gè)問題。4.1圖形顯示圖形顯示問題包括如何設(shè)計(jì)友好的人機(jī)交互界面;如何將光標(biāo)和棋子顯示在正確的位置上;如何在棋盤移動(dòng)光標(biāo)時(shí)去掉舊位置上的光標(biāo)痕跡;如何在光標(biāo)與棋子疊加時(shí)去除光標(biāo)痕跡;如何進(jìn)行下棋后的圖像處理問題;如何從方形圖片得到圓形棋子;如何進(jìn)行漢字的顯示問題由于采用的開發(fā)板LCD規(guī)格為640X480像素,根據(jù)這個(gè)規(guī)格設(shè)計(jì)所使用的背景圖片、黑棋子、白棋子、光標(biāo)。為了使界面更加友好,采用圖片字體顯示,而不使用SDL_ttf中的字體。棋盤與棋子采用3D效果,黑、白棋子與光標(biāo)三者的圖片大
18、小一致,都是25X25像素,且背景色的色度空間都選用RGB(255,0,255),也就是粉紅色。通過調(diào)用SDL函數(shù)庫中的SDL_SetColorKey函數(shù)把粉紅色作為過濾色。因此在顯示這些圖片時(shí),看不到粉紅色的背景,看起來就像圖片做了切割一樣。光標(biāo)在新的位置重畫后,即使使用SDL_UpdateRect函數(shù)把整個(gè)屏幕都刷新,原來的位置仍然還有光標(biāo)的圖像存在,一直到程序的退出。解決這個(gè)問題采用的辦法是當(dāng)光標(biāo)要在某個(gè)位置顯示時(shí),先把這個(gè)位置上與光標(biāo)圖片大小一樣的區(qū)域記錄起來,再顯示光標(biāo),當(dāng)光標(biāo)移動(dòng)時(shí),把記錄起來的圖片重新畫回到原來的位置,然后在畫光標(biāo)之前記錄新的目標(biāo)區(qū)域,如此重復(fù)。用上面的方法解決光
19、標(biāo)的重畫還存在一些問題,也就是當(dāng)下棋時(shí),光標(biāo)離開這個(gè)位置時(shí),使用下棋之前所記錄的圖片來重畫了這個(gè)位置,結(jié)果就是當(dāng)光標(biāo)離開時(shí),這個(gè)位置的棋子突然消失。一個(gè)簡單而又實(shí)用的方法就是在選擇下棋時(shí),同時(shí)把棋子畫到棋盤還有先前記錄區(qū)域的圖片上。這樣就算棋盤上的棋子擦掉了,還可以從記錄區(qū)域的圖片上將它重新畫出來。4. 2對弈算法對于一個(gè)對弈游戲來說,算法的智能性是非常重要的,但高智能的算法往往意味著要花費(fèi)更多的CPU資源和更多的內(nèi)存資源,而這兩項(xiàng)對嵌入式系統(tǒng)來說,往往都是非常缺乏的。由于嵌入式硬件資源的限制,使用了一個(gè)較簡單的算法。利用一個(gè)15X15的二維全局?jǐn)?shù)組來記錄下棋的情況,1表示是人下的棋子;2表示
20、是機(jī)器下的棋子,0表示是空位。當(dāng)機(jī)器下棋時(shí),使用4個(gè)函數(shù)linex,liney,line45,linel35從水平、垂直、45°角、135°角4個(gè)方向搜索,遇到對手的棋子就把分?jǐn)?shù)加10。記錄每個(gè)方向上可下棋位置的分?jǐn)?shù),選擇分?jǐn)?shù)高的位置下棋子。4. 3鍵盤事件處理鍵盤事件響應(yīng)問題包含如何及時(shí)響應(yīng)鍵盤敲擊,如何得到鍵值,如何作出正確的響應(yīng)??紤]到軟件的可移植性,沒有直接使用Linux系統(tǒng)的事件處理函數(shù)來處理鍵盤事件,而是采用SDL本身的鍵盤響應(yīng)事件函數(shù),代碼簡潔清晰。5五子棋游戲設(shè)計(jì)與實(shí)現(xiàn)main主函數(shù)主要調(diào)用初始化函數(shù)InitGraph()與控制函數(shù)GameControl()
21、,這兩個(gè)都是全局函數(shù),返回類型都是void。InitGraph()主要進(jìn)行程序初始化和圖片裝載;GameControl()是主要的游戲控制函數(shù)。5. 1InitGraph()函數(shù)InitGraph()先調(diào)用SDL_Init(SDL_INIT_AUDI-OISDI_INIT_VIDEO初始化一個(gè)終端屏幕,再使用SDL_SetVideoMode(640,480,16,SDL_SWSUR-FACE)它設(shè)置成合適的模式。其中的“640,480”表示這是個(gè)640X480像素的屏幕;16代表的是色深。SDL中使用SDI_Surface結(jié)構(gòu)來記錄屏幕區(qū)域或圖片,過程用到的所有圖片都使用這個(gè)結(jié)構(gòu)來存取。SDL
22、_CreateRGBSurfaceE數(shù)用來創(chuàng)J建一個(gè)SDL_Surface實(shí)例,而IMG_Load函數(shù)則可以把一張圖片裝載到一個(gè)SDI_Surface中去,接著使用SDL_SetColor-Key函數(shù)來設(shè)置透明色,這里把RGB(255,0,255)設(shè)置成透明色。因此,顯示出來的圖片中顏色為RGB(255,0,255)的區(qū)域都成了透明的。SDL_BlitSurface函數(shù)用來把一個(gè)SDL_Surface的某一部分或全部畫至U另一個(gè)SDL_Surface±去。如果目標(biāo)SDL_Surface是屏幕,那就是要在屏幕上顯示此SDL_Surface,當(dāng)然要使用SDL_UpdateRect把這個(gè)區(qū)
23、域刷新一下才能看到結(jié)果。因?yàn)榻?jīng)常要顯示圖片和擦除圖片,所以這也比較麻煩,再加上要光標(biāo)移動(dòng)時(shí)不僅要畫出光標(biāo),更是要在畫之前保存這塊區(qū)域的圖片。所以把SDL_BlitSurface包裝成一個(gè)可以保存區(qū)域圖片的畫圖函數(shù)ShowPicture。5. 2GameControl()函數(shù)GameControl()是程序的主要控制模塊。SDL_Event是記錄事件的數(shù)據(jù)結(jié)構(gòu),通過SDL_PollEvent(&event)可以得到鍵盤和鼠標(biāo)事件。對event結(jié)構(gòu)的判斷可得到想要的按鍵值和按鍵的動(dòng)作。電腦下棋的位置主要是通過調(diào)用ComputerThink函數(shù)得到的。CornputerThink函數(shù)采用第4.2節(jié)的對弈算法,調(diào)用linex,liney,Iine45,line135對某個(gè)位置進(jìn)行水平、垂直、45°角和135°角4個(gè)方向的5個(gè)棋子內(nèi)的范圍進(jìn)行掃描。如掃描水平這條線時(shí),先從這個(gè)點(diǎn)向左
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育培訓(xùn)機(jī)構(gòu)與老師簽的合同樣書7篇
- 1+x郵輪內(nèi)裝工藝職業(yè)技能等級證書(中級)理論考試題庫及答案
- 2025年沙洲職業(yè)工學(xué)院高職單招高職單招英語2016-2024歷年頻考點(diǎn)試題含答案解析
- 2025年江西水利職業(yè)學(xué)院高職單招語文2018-2024歷年參考題庫頻考點(diǎn)含答案解析
- 專題04《海底兩萬里》真題精練(單一題)
- 滬教版(上海)七年級地理第一學(xué)期中國區(qū)域篇(上)2《自主學(xué)習(xí) 認(rèn)識區(qū)域-廣西壯族自治區(qū)》聽課評課記錄
- 幼兒園綜合語言活動(dòng)策劃方案五篇
- 學(xué)校炊事員聘用合同書年
- 簡單的個(gè)人勞務(wù)承包合同范本
- 環(huán)境監(jiān)測技術(shù)應(yīng)用合同
- 山東省濰坊市2024-2025學(xué)年高三上學(xué)期1月期末 英語試題
- 春節(jié)節(jié)后收心會
- 《榜樣9》觀后感心得體會四
- 七年級下冊英語單詞表(人教版)-418個(gè)
- 交警安全進(jìn)校園課件
- 潤滑油過濾培訓(xùn)
- 內(nèi)蒙自治區(qū)烏蘭察布市集寧二中2025屆高考語文全真模擬密押卷含解析
- 浙江省紹興市2023-2024學(xué)年高一上學(xué)期期末考試物理試題(含答案)
- 《住院患者身體約束的護(hù)理》團(tuán)體標(biāo)準(zhǔn)解讀課件
- 2024年中考物理科技創(chuàng)新題型(教師版)
- 唐山市重點(diǎn)中學(xué)2024-2025學(xué)年全國高考大聯(lián)考信息卷:數(shù)學(xué)試題試卷(3)含解析
評論
0/150
提交評論