




已閱讀5頁(yè),還剩41頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2011203講師曾繁政物理與電子信息工程系07106171232007級(jí)電氣工程及其自動(dòng)化基于單片機(jī)的俄羅斯方塊游戲設(shè)計(jì)基于單片機(jī)的俄羅斯方塊游戲設(shè)計(jì)基于單片機(jī)的俄羅斯方塊游戲設(shè)計(jì)獨(dú) 創(chuàng) 性 聲 明本人鄭重聲明:所呈交的畢業(yè)論文(設(shè)計(jì))是本人在指導(dǎo)老師指導(dǎo)下取得的研究成果。除了文中特別加以注釋和致謝的地方外,論文(設(shè)計(jì))中不包含其他人已經(jīng)發(fā)表或撰寫(xiě)的研究成果。與本研究成果相關(guān)的所有人所做出的任何貢獻(xiàn)均已在論文(設(shè)計(jì))中作了明確的說(shuō)明并表示了謝意。簽名: 年月日授權(quán)聲明本人完全理解賀州學(xué)院有關(guān)保留、使用本科生畢業(yè)論文(設(shè)計(jì))的規(guī)定,即:學(xué)院有權(quán)保留并向國(guó)家有關(guān)部門(mén)或機(jī)構(gòu)送交畢業(yè)論文(設(shè)計(jì))的復(fù)印件和磁盤(pán),允許畢業(yè)論文(設(shè)計(jì))被查閱和借閱。本人授權(quán)賀州學(xué)院可以將畢業(yè)論文(設(shè)計(jì))的全部或部分內(nèi)容編入有關(guān)數(shù)據(jù)庫(kù)進(jìn)行檢索,可以采用影印、縮印或掃描等復(fù)制手段保存、匯編論文(設(shè)計(jì))。本人論文(設(shè)計(jì))中有原創(chuàng)性數(shù)據(jù)需要保密的部分為(如沒(méi)有,請(qǐng)?zhí)顚?xiě)“無(wú)”):簽 名: 年月日指導(dǎo)教師簽名: 年月日基于單片機(jī)的俄羅斯方塊游戲設(shè)計(jì)摘 要俄羅斯方塊是一款風(fēng)靡全球的益智游戲。它規(guī)則簡(jiǎn)單,容易上手,且游戲過(guò)程變化無(wú)窮,使用戶在游戲中得到樂(lè)趣。本文討論了一種基于增強(qiáng)型單片機(jī)硬件平臺(tái)和實(shí)時(shí)操作系統(tǒng)的智能俄羅斯方塊游戲的設(shè)計(jì)與實(shí)現(xiàn)。該設(shè)計(jì)選用的處理器型號(hào)為STC12C5A60S2的單片機(jī),實(shí)時(shí)操作系統(tǒng)采用適用于8051處理器的RTX51 Tiny多任務(wù)實(shí)時(shí)操作系統(tǒng)。重點(diǎn)從軟件工程角度論述了俄羅斯方塊模型構(gòu)造,圖形旋轉(zhuǎn),坐標(biāo)變換,雙人游戲中多任務(wù)實(shí)時(shí)操作的設(shè)計(jì)法方,以及背景音樂(lè)的處理等技術(shù)。同時(shí),該設(shè)計(jì)的獨(dú)創(chuàng)性是在8051系列單片機(jī)中使用操作系統(tǒng)實(shí)現(xiàn)了雙人游戲和音效的添加。關(guān)鍵詞:?jiǎn)纹瑱C(jī);RTX51;LCD;俄羅斯方塊ABSTRACTTetris is a section became popular in the world of puzzles.The rules are simple, easy to operate and the game process changes.Users in the game to get fun.This paper discussed a method based on enhanece microcontroller hardware platform and real-time operating system of intelligent Tetris game of design and implementa- tion.This design multi-back STC12C5A60S2 single-chip processor regult and real-time operating system adopt suitable for the 8051 processor RTX51 of multi-tasking real- time operating system.This paper mainly discusses the from software engineering tetris model of structure,graphics rotation,coordinate transform,the double game multitasking real-time operating design,and the background music of the formation of technology.At the same time,the design originality in the 8051series micro- controller is used in the operating system realizing double game and sound add.Key words: singlechip;RTX51;LCD;TetrisI目 錄摘 要IABSTRACTII1 緒 論11.1 課題背景11.2 課題的主要研究?jī)?nèi)容11.3 課題的研究現(xiàn)狀及意義12 系統(tǒng)硬件平臺(tái)設(shè)計(jì)22.1 STC12C5A60S2單片機(jī)概述22.2 STC12C5A60S2最小系統(tǒng)32.3 電源系統(tǒng)32.4 振蕩電路32.5 復(fù)位系統(tǒng)42.6 程序下載系統(tǒng)52.7 音樂(lè)播放系統(tǒng)62.8 LCD液晶顯示接口電路62.9 操作控制接口73 系統(tǒng)軟件平臺(tái)構(gòu)建83.1 Vision簡(jiǎn)介83.2 LCD12864液晶屏顯示原理83.2.1 LCD模塊總線選擇及時(shí)序83.2.2 LCD顯示RAM區(qū)映射概況93.2.3 LCD的驅(qū)動(dòng)方法103.2.4 LCD驅(qū)動(dòng)程序架構(gòu)103.3 俄羅斯方塊游戲設(shè)計(jì)113.3.1 俄羅斯方塊游戲功能簡(jiǎn)介113.3.2 系統(tǒng)界面的設(shè)計(jì)123.3.3 游戲系統(tǒng)“枚舉算法”概述143.3.4 俄羅斯方塊造型設(shè)計(jì)的方法153.3.5 隨機(jī)產(chǎn)生俄羅斯方塊的方法153.3.6 俄羅斯方塊平移的實(shí)現(xiàn)方法173.3.7 俄羅斯方塊旋轉(zhuǎn)的實(shí)現(xiàn)方法183.3.8 俄羅斯方塊下移的實(shí)現(xiàn)方法203.3.9 滿行檢測(cè)及消行功能的實(shí)現(xiàn)方法213.3.10 游戲積分的計(jì)算方法223.4 雙人俄羅斯方塊游戲設(shè)計(jì)243.4.1 RTX51 Tiny簡(jiǎn)介243.4.2 RTX51 Tiny的內(nèi)核分析243.4.3 游戲開(kāi)發(fā)環(huán)境的配置273.4.4 雙人單機(jī)對(duì)戰(zhàn)模式的實(shí)現(xiàn)流程283.5 系統(tǒng)背景音樂(lè)的設(shè)計(jì)283.5.1音樂(lè)的設(shè)計(jì)原理283.5.2 音樂(lè)播放的實(shí)現(xiàn)方法303.5.3 音效程序流程303.6 系統(tǒng)主程序流程圖314 產(chǎn)品功能說(shuō)明與系統(tǒng)性能測(cè)試324.1 產(chǎn)品功能說(shuō)明324.2 系統(tǒng)性能測(cè)試335 結(jié)束語(yǔ)33參考文獻(xiàn)35致 謝III賀州學(xué)院本科生畢業(yè)論文(設(shè)計(jì))1 緒 論1.1 課題背景如今,計(jì)算機(jī)系統(tǒng)的發(fā)展已明顯地朝三個(gè)方向發(fā)展,這三個(gè)方向就是:巨型化,單片化,網(wǎng)絡(luò)化。對(duì)于解決復(fù)雜計(jì)算和高速數(shù)據(jù)處理的問(wèn)題仍然是巨型機(jī)在起作用,因而,目前巨型機(jī)正在朝高速及高處理能力的方向發(fā)展。單片機(jī)在出現(xiàn)時(shí)Intel公司就給其單片機(jī)取名為嵌入式微控制器4。單片機(jī)的最明顯的優(yōu)勢(shì),就是可以嵌入到各種儀器、設(shè)備中。這一點(diǎn)是巨型機(jī)和網(wǎng)絡(luò)不可能做到的。單片機(jī)在內(nèi)部已集成了趆來(lái)趆多的部件,這些部件包括一般常用的電路,例如:定時(shí)器,比較器,EEPROM,D/A轉(zhuǎn)換器,串行通信接口,Watchdog電路等。 同時(shí),俄羅斯方塊是一款風(fēng)靡全球的電視游戲機(jī)和掌上游戲機(jī)游戲,目前在網(wǎng)絡(luò)單機(jī)游戲和kele8等上都有它的身影。而它曾經(jīng)造成的轟動(dòng)與經(jīng)濟(jì)價(jià)值可以說(shuō)是游戲史上一件大事。因此,對(duì)它的研究,無(wú)論從技術(shù)上,還是社會(huì)意義上看都是很有價(jià)值的。單片機(jī)在游戲上的應(yīng)用是具有非常大的潛力的,它能將游戲帶入到另一個(gè)階段。此次設(shè)計(jì)僅僅是為了舉一個(gè)單片機(jī)在游戲應(yīng)用方面的簡(jiǎn)單例子,它可以很好的說(shuō)明單片機(jī)功能的強(qiáng)大,體現(xiàn)其更高的可控性和高集成度的好處,因此它可以在電子游戲方面成為一個(gè)不可計(jì)量的明日之星。1.2 課題的主要研究?jī)?nèi)容本課題研究和實(shí)現(xiàn)了基于8051+RTX51到Tiny平臺(tái)下的智能俄羅斯方塊游戲系統(tǒng)。主要研究?jī)?nèi)容是實(shí)現(xiàn)智能俄羅斯方塊游戲系統(tǒng)軟硬件平臺(tái)的搭建;本系統(tǒng)以8051微處理器為核心來(lái)運(yùn)行RTX51 Tiny多任務(wù)實(shí)時(shí)操作系統(tǒng),利用KEIL C51開(kāi)發(fā)工具進(jìn)行軟件開(kāi)發(fā),通過(guò)LCD12864液晶屏顯示游戲界面。該設(shè)計(jì)能實(shí)現(xiàn)單人單機(jī)游、雙人單機(jī)對(duì)戰(zhàn)游戲、游戲背景音樂(lè)的播放和單人最高積分存儲(chǔ)等功能。在俄羅斯方塊游戲系統(tǒng)開(kāi)發(fā)過(guò)程中,本文作者首先進(jìn)行硬件平臺(tái)的搭建,包括單片機(jī)最小系統(tǒng)的搭建、電源系統(tǒng)的搭建、串口下載器的設(shè)計(jì)、游戲手柄的設(shè)計(jì)、音效播放模塊的設(shè)計(jì)以及LCD液晶顯示接口的設(shè)計(jì)。然后,作者才開(kāi)展軟件平臺(tái)的構(gòu)建,這也是本設(shè)計(jì)的重要部分,主要包括對(duì)RTX51 Tiny操作系統(tǒng)的配置、俄羅斯方塊模型的設(shè)計(jì)、模型圖塊的旋轉(zhuǎn)及坐標(biāo)變換設(shè)計(jì)、雙人單機(jī)對(duì)戰(zhàn)游戲設(shè)計(jì)和音效系統(tǒng)設(shè)計(jì)等。最后,從硬件和軟件兩方面對(duì)完成的智能俄羅斯方塊游戲系統(tǒng)進(jìn)行調(diào)試及運(yùn)行試驗(yàn)。1.3 課題的研究現(xiàn)狀及意義現(xiàn)今國(guó)內(nèi)外的俄羅斯方塊游戲設(shè)計(jì)主要有基于PC機(jī)上Windows平臺(tái)的俄羅斯方塊游戲、基于手機(jī)平臺(tái)的智能俄羅斯方塊游戲以及基于單片機(jī)平臺(tái)的俄羅斯方塊游戲等。前兩種屬于高端游機(jī),性能優(yōu)越,但成本高,而且計(jì)算機(jī)編程已不是新命題,VB、VC、Delphi版本的俄羅斯方塊游戲都有發(fā)布9。從學(xué)術(shù)角度來(lái)看,針對(duì)俄羅斯方塊游戲的開(kāi)發(fā),國(guó)內(nèi)外也有不少學(xué)者展開(kāi)過(guò)研究,比如Niko將進(jìn)化算法引入到俄羅斯方塊中并驗(yàn)證了其有效性,Hoogeboom探討了俄羅斯方塊游戲的構(gòu)造問(wèn)題,王宇等針對(duì)存在于俄羅斯方塊中的兩個(gè)數(shù)學(xué)問(wèn)題提出解決方案,高凌琴探討游戲功能要求、數(shù)據(jù)結(jié)構(gòu)、圖形旋轉(zhuǎn)、坐標(biāo)變換等關(guān)鍵技術(shù),胡代弟在SPCE061A單片機(jī)實(shí)現(xiàn)了俄羅斯方塊游戲10。綜上,國(guó)內(nèi)外的研究多著重于游戲數(shù)學(xué)原理的討論,也有部分文獻(xiàn)涉及游戲的具體實(shí)現(xiàn),但多是在Windows操作系統(tǒng)下實(shí)現(xiàn)的,在單片機(jī)平臺(tái)下的開(kāi)發(fā)俄羅斯方塊游戲鮮少有文獻(xiàn)刊載。而單片機(jī)由于具有體積小、性能突出、價(jià)格低廉等特點(diǎn),應(yīng)用領(lǐng)域不斷擴(kuò)大,除了工業(yè)控制、智能化儀表、家用電器外,在智能化高檔電子玩具產(chǎn)品也大量采用單片機(jī)芯片作為核心控制部件。曾經(jīng)80年代非常流行的掌上游戲機(jī)便是單片機(jī)在電子玩具中的應(yīng)用之一,其中的俄羅斯方塊游戲現(xiàn)已被我們所熟知。本文探討基于8051單片機(jī)硬件平臺(tái)和RTX51 Tiny多任務(wù)實(shí)時(shí)操作系統(tǒng)的俄羅斯方塊游戲的設(shè)計(jì)與實(shí)現(xiàn),將理論與實(shí)踐相結(jié)合。其主要目標(biāo)是再現(xiàn)經(jīng)典的俄羅斯方塊游戲,并在此基礎(chǔ)上實(shí)現(xiàn)雙人單機(jī)對(duì)戰(zhàn)游戲模式,以豐富產(chǎn)品功能,增強(qiáng)游戲的趣味性。2 系統(tǒng)硬件平臺(tái)設(shè)計(jì)2.1 STC12C5A60S2單片機(jī)概述STC12C5A60S2系列單片機(jī)是宏晶科技生產(chǎn)的單時(shí)鐘/機(jī)器周期(1T)的單片機(jī),是高速、低功耗、超強(qiáng)抗干擾的新一代8051系列單片機(jī),指令代碼完全兼容傳統(tǒng)8051,但速度快812倍。用戶程序空間為60KB,片上集成1280字節(jié)RAM,具有EEPROM功能,能夠額外儲(chǔ)蓄1KB的數(shù)據(jù)。該單片機(jī)共有4個(gè)16位定時(shí)器,兩個(gè)與傳統(tǒng)8051兼容的定時(shí)器/計(jì)數(shù)器,即16位定時(shí)器T0和T1,沒(méi)有定時(shí)器2,但有獨(dú)立波特率發(fā)生器做串行通訊的波特率發(fā)生器,再加上2路PCA模塊可由T0的溢出在P3.4/T0輸出時(shí)鐘,可由T1的溢出在P3.5/T1輸出時(shí)鐘,此兩路可編程計(jì)數(shù)器陣列(PCA)可用來(lái)再實(shí)現(xiàn)2個(gè)定時(shí)器。此外,STC12C5A60S2內(nèi)部還集成MAX810專用復(fù)位電路,2路PWM,8路高速度10位A/D轉(zhuǎn)換(250K/S),針對(duì)電機(jī)控制,強(qiáng)干擾場(chǎng)地合。綜上所述,STC12C5A605S2單片機(jī)具有許多強(qiáng)大的功能,能夠滿足大多數(shù)用戶對(duì)8位單片機(jī)的要求。2.2 STC12C5A60S2最小系統(tǒng)單片機(jī)最小系統(tǒng)主要由電源、振蕩、復(fù)位電路以及擴(kuò)展電路等部分組成。在本設(shè)計(jì)中,擴(kuò)展了液晶顯示接口。因此,本設(shè)計(jì)的最小系統(tǒng)如圖2-1所示。圖 2-1 STC12C5A60S2最小系統(tǒng)Fig 2-1 STC12C5A60S2 Minimum System2.3 電源系統(tǒng)本設(shè)計(jì)的電源系統(tǒng)比較簡(jiǎn)單,直接由LM7805穩(wěn)壓芯片輸出的+5V電源供電。具體電路如圖2-2所示。圖片2-2 電源系統(tǒng)Fig 2-2 Power System2.4 振蕩電路單片機(jī)系統(tǒng)里都有振蕩電路,在單片機(jī)系統(tǒng)里晶振作用非常大,全稱叫晶體振蕩器,它結(jié)合單片機(jī)內(nèi)部電路產(chǎn)生單片機(jī)所需的時(shí)鐘頻率,單片機(jī)晶振提供的時(shí)鐘頻率趆高,那么單片機(jī)運(yùn)行速度就趆快,單片機(jī)的一切指令執(zhí)行都是依靠單片機(jī)晶振提供的時(shí)鐘頻率。4晶振通常與鎖相環(huán)電路配合使用,以提供系統(tǒng)所需的時(shí)鐘頻率。本設(shè)計(jì)中STC12C5A60S2使用12MHz的晶體振蕩器作為振蕩源,由于單片機(jī)內(nèi)部帶有振蕩電路,所以外部只要連接一個(gè)晶振和兩個(gè)電容即可,電容容量一般在15pF至50pF之間。如圖2-3所示即為本設(shè)計(jì)的振蕩電路。圖 2-3 振蕩電路Fig 2-3 oscillatory circuit2.5 復(fù)位系統(tǒng) MCS51單片機(jī)通常采用上電自動(dòng)復(fù)位和按鈕復(fù)位兩種方式。通常因?yàn)橄到y(tǒng)運(yùn)行等需要,常常需要人工復(fù)位,本設(shè)計(jì)采用按鈕復(fù)位的方式,即按下開(kāi)關(guān)一定時(shí)間就能使RTS引腳端為高電平,從而使單片機(jī)復(fù)位。同時(shí),簡(jiǎn)單復(fù)位電路中,干擾信號(hào)易串入復(fù)位端,由此可能會(huì)引起內(nèi)部某些寄存器錯(cuò)誤復(fù)位,這時(shí)可在RST引腳上接去耦電容。在STC12C5A60S2單片機(jī)中有兩個(gè)復(fù)位端口,即RST/P4.7、RST2/P4.6,當(dāng)晶振頻率小于或等于12MHz時(shí),使用RST端口。由于本設(shè)計(jì)使用外接12MHz的晶振作為振蕩時(shí)鐘,所以采用如圖2-4所示的復(fù)位系統(tǒng)。圖 2-4 復(fù)位系統(tǒng)Fig 2-4 Rest System2.6 程序下載系統(tǒng)單片機(jī)系統(tǒng)的傳統(tǒng)編程方式是先將單片機(jī)從電路板上取下,放入專用的編程器進(jìn)行編程,再放入電路板進(jìn)行調(diào)試。其缺點(diǎn)是頻繁拔插器件容易損壞器件的引腳;如果頻繁的調(diào)試程序,必須重復(fù)拔插,大降低了開(kāi)發(fā)效率。ISP(在線系統(tǒng)編程)技術(shù)是一種無(wú)需將存儲(chǔ)芯片從嵌入式設(shè)備上取出就能對(duì)其進(jìn)行編程的過(guò)程。其優(yōu)點(diǎn)是,即使器件焊接在電路板上,仍可對(duì)其進(jìn)行編程。在線系統(tǒng)可編程是Flash存儲(chǔ)器的固有特性(通常無(wú)需額外電路),F(xiàn)lash幾乎都采用這種方式編程。ISP的實(shí)現(xiàn)相對(duì)要簡(jiǎn)單一些,一般通用做法是內(nèi)部的存儲(chǔ)器可以由上位機(jī)的軟件通過(guò)串口來(lái)進(jìn)行改寫(xiě)。對(duì)于8051系列單片機(jī)來(lái)講可通過(guò)SPI接口或其它的串行接口接收上位機(jī)傳來(lái)的數(shù)據(jù)并寫(xiě)入存儲(chǔ)器中。而上位機(jī)PC機(jī)與下位機(jī)單片機(jī)通過(guò)RS-232串行接口總線進(jìn)行的串行通信。8051系列單片機(jī)帶有一個(gè)全雙工的串行接口,因此用RS-232串行接口總線非常方便。PC機(jī)配置RS-232標(biāo)準(zhǔn)接口,RS-232信號(hào)電平為負(fù)邏輯(邏輯“0”為+12V ;邏輯“1”為-12V),8051單片機(jī)輸入、輸出電平為T(mén)TL電平(邏輯“0”為小于等于0.5V;邏輯“1”為大于等于2.4V)。所以8051單片機(jī)與PC機(jī)間點(diǎn)對(duì)點(diǎn)異步通信需加電平轉(zhuǎn)換電路,否則將燒壞TTL電路。MAX232是MAXIM公司生產(chǎn)的電平轉(zhuǎn)換器件,只需在外部接入相應(yīng)的電解電容即可。因此,本設(shè)計(jì)采用直連串口線進(jìn)行串口通信,其中STC12C5A60S2的P30/RXD和P31/TXD分別和下載器的第10管腳/T和第9管腳/R相連,串口線的第5管腳接地,2、3管腳和下載器的7、8管腳相連。具體電路如圖2-5所示。圖 2-5 程序下載系統(tǒng)Fig 2-5 Program Download System2.7 音樂(lè)播放系統(tǒng)在本設(shè)計(jì)中,音樂(lè)播放系統(tǒng)是通過(guò)三極管驅(qū)動(dòng)有源蜂鳴器發(fā)聲,而具體的音符聲調(diào)則由程序控制。因此,音樂(lè)播放系統(tǒng)的硬件電路非常簡(jiǎn)單。具體接法為有源蜂鳴器正極直接接+5V電源,負(fù)極與三極管8050的發(fā)射極相連,8050的集電極直接接地,其基極串一個(gè)1K的電阻連接到STC12C5A60S2單片機(jī)的P20端口。如圖2-6所示。圖片2-6 音樂(lè)播放系統(tǒng)Fig 2-6 Music Player System2.8 LCD液晶顯示接口電路 液晶顯示屏是整個(gè)系統(tǒng)硬件的重要組成部分,擔(dān)當(dāng)著人機(jī)交互的重要角色。本設(shè)計(jì)采用銘正同創(chuàng)公司生產(chǎn)的MzL02D-12864液晶點(diǎn)陣屏作為顯示器件。它是一塊128*64點(diǎn)陣的LCD顯示模組,模組上的LCM采用COG技術(shù)將控制(包括顯存)、驅(qū)動(dòng)器集成在LCM的玻璃上,接口簡(jiǎn)單、操作方便。其特點(diǎn)為單電源供電,對(duì)比度編程可調(diào),可采用并行接口為6800/8080時(shí)序或者串行SPI的MPU接口方式,整塊液晶屏由3.3V的白色LED背光,美觀大方。其外部接口分為電源端口、數(shù)據(jù)端口和命令端口三部分組成。本設(shè)計(jì)中LCD的數(shù)據(jù)端口連接到STC12C5A60S2單片機(jī)的P0端口,LCD的命令端口連接到單片機(jī)的P2端口。具體硬件電路如圖2-7所示。圖 2-7 LCD液晶顯示接口電路Fig 2-7 Liquid Display Interface Circuit2.9 操作控制接口操作控制模塊是智能俄羅斯方塊游戲系統(tǒng)的輸入器件。它包括主控制器和輔助控制器。主控制器包括七個(gè)按鍵,分別為:旋轉(zhuǎn)/確定、向左/返回上級(jí)菜、向右/下一個(gè)、快速下降、使用道具、暫停、退出。副控制器則包括五個(gè)按鍵,分別為:旋轉(zhuǎn)/確定、向左/返回上級(jí)菜、向右/下一個(gè)、快速下降、使用道具。在硬件電路方面輔控制器比主控制器少兩個(gè)按鍵的連接。如圖2-8所示為主控制器的接線圖。與單片機(jī)的具體接口可根據(jù)實(shí)際設(shè)定。圖片2-8 控制模塊接口Fig 2-8 Control Interface 3 系統(tǒng)軟件平臺(tái)構(gòu)建3.1 Vision簡(jiǎn)介Vision是德國(guó)Keil公司開(kāi)發(fā)的單片機(jī)IDE軟件,最初主要用于8051系列單片機(jī),目前也有支ARM系列單片機(jī)的專用版本MDK-ARM。本設(shè)計(jì)使用的是keil Vision3版本的開(kāi)發(fā)軟件進(jìn)行程序開(kāi)發(fā)。3.2 LCD12864液晶屏顯示原理3.2.1 LCD模塊總線選擇及時(shí)序 MzL02D模塊提供了兩個(gè)LCM的引腳(C86和PS引腳)供用戶選擇模塊的接口類型,分別可以選擇6800并行總線、8080并行總線或者SPI串行接口。模塊默認(rèn)情況下PS為高電平、C86為高電平,此時(shí)為6800總線接口類型,本設(shè)計(jì)采用6800總線模式。在此種接口模式下,WR 線為讀寫(xiě)控制信號(hào)線,當(dāng)WR 為高電平時(shí)為讀狀態(tài),WR為低電來(lái)時(shí)為寫(xiě)入狀態(tài)。在6800總線接口模式下LCD的時(shí)序如圖3-1所示。圖 3-1 6800總線時(shí)序Fig 3-1 6800 Bus Timing3.2.2 LCD顯示RAM區(qū)映射概況驅(qū)動(dòng)控制芯片的顯示RAM區(qū)中,每個(gè)byte的數(shù)據(jù)對(duì)應(yīng)屏上的點(diǎn)的排列方式為:縱向排列,低位在上高位在下;如圖3-2所示。MzL02D-12864液晶顯示模組的顯示器上的顯示點(diǎn)與驅(qū)動(dòng)控制芯片中的顯示緩存RAM是一一對(duì)應(yīng)的;共有65(8Page * 8bit + 1)*132個(gè)位的顯示RAM區(qū)。而顯示器的顯示點(diǎn)陣大小為64*128點(diǎn),所以實(shí)際上在液晶顯示模塊中有用的顯示RAM區(qū)為64*128個(gè)位;按byte為單位劃分,共分為8個(gè)Page,每個(gè)Page為8行,而每一行為128個(gè)位。(即128列)。圖 3-2 字節(jié)數(shù)據(jù)排列情況Fig 3-2 Byte data arrangementMzL02D-12864液晶顯示模塊的顯示屏上的每一個(gè)點(diǎn)都對(duì)應(yīng)有控制器片內(nèi)的顯示緩存RAM中的一個(gè)bit,顯示屏上64*128個(gè)點(diǎn)分別對(duì)應(yīng)著顯示RAM的8個(gè)Page,每一個(gè)Page有128個(gè)byte的空間。因此可知顯示RAM區(qū)中的一個(gè)Page空間對(duì)應(yīng)8行的點(diǎn),而該P(yáng)age中的一個(gè)byte數(shù)據(jù)則對(duì)應(yīng)一列(8個(gè)點(diǎn))。用戶如要點(diǎn)亮LCD屏上的某一個(gè)點(diǎn)時(shí),實(shí)際上就是對(duì)該點(diǎn)所對(duì)應(yīng)的顯示RAM區(qū)中的某一個(gè)位進(jìn)行置1操作,所以就要確定該點(diǎn)所處的行地址、列地址。MzL02-12864液晶顯示模組的行地址實(shí)際上就是Page的信息,每一個(gè)Page應(yīng)有8行;而列地址則表示該點(diǎn)的橫坐標(biāo),在屏上為從左到右排列,Page中的一個(gè)Byte對(duì)應(yīng)的是一列(8行,即8個(gè)點(diǎn)),達(dá)128列??梢愿鶕?jù)這樣的關(guān)系在程序中控制LCD顯示屏的顯示。3.2.3 LCD的驅(qū)動(dòng)方法在很多資料以及書(shū)籍當(dāng)中,通常介紹有兩種 LCD模塊的連接方法:直接控制和間接控制;直接控制實(shí)際指的是 LCD模塊的總線接口直接與MCU端口連接,然后 MCU 通過(guò)程序控制端口來(lái)模擬 LCD的總線時(shí)序來(lái)完成對(duì)其的控制操作;而間接控制指的是MCU本身就有外部總線拉出,與LCD的總線接口對(duì)應(yīng)的連接上,程序中直接操作總線以控制LCD。目前有很多MCU 都把總線密封起來(lái)了,都沒(méi)有引出外部總線;所以通常在用MCU控制LCD模塊時(shí),時(shí)常會(huì)選擇直接控制的方式,即利用端口來(lái)模擬總線時(shí)序;當(dāng)然了,如果本身就有總線而且也與LCD模塊的總線配得上的話,肯定會(huì)使用總線連接的間控方式。本設(shè)計(jì)采用直接控制的方式,將MzL02D-12864 LCD模塊的總配置為6800總線,這與絕大部分引出外部總線的MCU的時(shí)序是不一樣的。本設(shè)計(jì)的LCD12864模塊中,用戶程序?qū)ζ溥M(jìn)行顯示控制時(shí),無(wú)非就是通過(guò)對(duì)LCD模塊內(nèi)部的驅(qū)動(dòng)控制器當(dāng)中的寄存器進(jìn)行設(shè)置操作;最常用的如LCD的顯示開(kāi)/關(guān)、操作顯存地址(行與列地址)的設(shè)置等。這些寄存器一般都在LCD模塊的驅(qū)動(dòng)控制器文檔中有詳細(xì)介紹。3.2.4 LCD驅(qū)動(dòng)程序架構(gòu)LCD12864驅(qū)動(dòng)程序主要由LCD底層驅(qū)動(dòng)和LCD功能函數(shù)兩部分組成。用戶在應(yīng)用層直接使用功能函數(shù)即可。具體框架如圖3-3所示。功能函數(shù)層字庫(kù)驅(qū)動(dòng)層函數(shù)聲明功能函數(shù)LCD配置驅(qū)動(dòng)層傳輸模式及IO端口配置數(shù)據(jù)傳輸驅(qū)動(dòng)應(yīng)用層用戶應(yīng)用程序功能函數(shù)聲明圖 3-3 LCD驅(qū)動(dòng)程序架構(gòu)Fig 3-3 LCD Driver architectures3.3 俄羅斯方塊游戲設(shè)計(jì)3.3.1 俄羅斯方塊游戲功能簡(jiǎn)介俄羅斯方塊游戲的規(guī)則很簡(jiǎn)單,當(dāng)方塊從屏幕上方落下來(lái)時(shí),玩家控制方塊的位置以及旋轉(zhuǎn)方塊,巧妙地安排布置達(dá)到充分利用屏幕空間的目的。每當(dāng)屏幕的一整行被方塊排滿時(shí),作為獎(jiǎng)賞,整行從屏幕上消失,剩余的方塊依次往下降一行。當(dāng)方塊堆積達(dá)到無(wú)法再落下方塊的時(shí)候,游戲結(jié)束。本設(shè)計(jì)中游戲主要的功能點(diǎn)包括:(1) 每4個(gè)小方塊可以組合成一組方塊群,游戲共有7種方塊群,每次隨機(jī)產(chǎn)生一種;玩家使用向左、向右、快速向下這些按鍵控制方塊的位置,旋轉(zhuǎn)按鍵控制方塊順時(shí)針旋轉(zhuǎn)。在主控制手柄上還有退出、暫停按鈕,可以實(shí)現(xiàn)隨時(shí)切換到啟動(dòng)時(shí)的狀態(tài)和暫停游戲的功能。(2) 在本設(shè)計(jì)中,系統(tǒng)為玩家提供了背景音樂(lè),玩家可以根據(jù)個(gè)人喜好開(kāi)啟或關(guān)閉音效。(3) 單人模式下,玩家使用主控制器進(jìn)行操作。每消去一行,系統(tǒng)就給玩家加1分。在單人模式下,如果積分超過(guò)系統(tǒng)記錄的最高積分,系統(tǒng)將更新最高積分。(4) 本設(shè)計(jì)的亮點(diǎn)是實(shí)現(xiàn)雙人對(duì)戰(zhàn)游戲,通過(guò)主控制器在菜單選項(xiàng)中選擇雙人模式,第二玩家可以通過(guò)副控制器對(duì)第二游戲界面進(jìn)行操作。本游戲系統(tǒng)規(guī)定,雙人對(duì)戰(zhàn)游戲中積分可分為兩個(gè)階段。第一階段是普通積分階段,即雙方玩家每消去一行,其相應(yīng)積分表加1分;第二階段是多積分階段,即每消去三行才獲得1個(gè)積分。雙方先達(dá)到第二階段末尾者,即可取勝。同時(shí),該設(shè)計(jì)中還為雙方玩家增加了道具功能,即當(dāng)使用該功能時(shí),可令對(duì)手當(dāng)前移動(dòng)圖塊消失,隨機(jī)出下一個(gè)圖塊。當(dāng)玩家一次性消去三行,就能獲得一次道具功能,最多一次性累積2個(gè)道具。系統(tǒng)默認(rèn)為每個(gè)玩家提供1個(gè)道具。這樣不僅豐富了俄羅斯方塊游戲的功能,而且使其更具趣味性。3.3.2 系統(tǒng)界面的設(shè)計(jì)(1) 菜單選項(xiàng)界面當(dāng)玩家將本設(shè)計(jì)的作品上電啟動(dòng)后,系統(tǒng)首先在LCD顯示器件上呈現(xiàn)一個(gè)動(dòng)態(tài)的開(kāi)機(jī)動(dòng)畫(huà)。然后,系統(tǒng)提供三個(gè)功能選項(xiàng),即最高積分、游戲設(shè)置、開(kāi)始游戲。其中,“游戲設(shè)置”選項(xiàng)包含了兩級(jí)子菜單。一級(jí)菜單包括“模式選擇”和“音效選擇”。在這兩個(gè)選項(xiàng)后面給出單字提示,以說(shuō)明當(dāng)前相應(yīng)設(shè)置選項(xiàng)的狀態(tài)?!澳J竭x擇”菜單包含的二級(jí)子菜單有“單人模式”和“雙人模式”?!耙粜нx擇”菜單包含的二級(jí)子菜單有“開(kāi)音效”和“關(guān)音效”通過(guò)控制按鍵即可設(shè)置成相應(yīng)狀態(tài)。“最高積分”菜單選項(xiàng)為玩家提供單人模式下系統(tǒng)記憶的最高積分。如果選擇了“開(kāi)始游戲”菜單選項(xiàng),則系統(tǒng)根據(jù)“游戲設(shè)置”選項(xiàng)中的設(shè)置啟動(dòng)相應(yīng)的游戲界面。菜單選項(xiàng)界面框架如圖3-4所示。菜單功能界面框架最高積分游戲設(shè)置開(kāi)始游戲模式選擇音效選擇單人模式雙人模式開(kāi)音效關(guān)音效圖 3-4 菜單選項(xiàng)界面框架Fig 3-4 The menu option interface framework(2) 游戲操作界面首先,我們先來(lái)介紹單人模式下游戲界面的一些情況。在啟動(dòng)單人模式后,LCD12864顯示屏分成兩屏,左半屏為俄羅斯方塊游戲地圖map區(qū),右半屏為俄羅斯方塊圖形預(yù)覽區(qū)和實(shí)時(shí)積分顯示區(qū)。其結(jié)構(gòu)框架如圖3-5所示。啟動(dòng)單人模式左半屏圖形預(yù)覽游戲map區(qū)右半屏積分顯示圖 3-5 單人模式界面結(jié)構(gòu)框架Fig 3-5 The single-player game interface architecture其次,如果玩家啟動(dòng)的是雙人模式,LCD12864顯示屏也分為兩屏,左屏由主控器操作,稱為map1區(qū),右屏由副控制器操作,稱為map2區(qū)。在兩屏中間是雙方積分顯示區(qū)和各自的道具數(shù)量顯示區(qū)。其結(jié)構(gòu)框架如圖3-6所示。雙人模式雙方積分進(jìn)度條雙方道具使用情況積分和道具區(qū)Map2區(qū)map1區(qū)圖 3-6 雙人模式界面結(jié)構(gòu)框架Fig 3-6 Double mode interface architecture系統(tǒng)界面整體程序流程圖如圖3-7所示。NYYNNYYNY單人模式音效選擇模式選擇游戲設(shè)置雙人模式音效關(guān)音效開(kāi)清模式標(biāo)志置模式標(biāo)志返回上一級(jí)清音效標(biāo)志置音效標(biāo)志返回上一級(jí)開(kāi)機(jī)啟動(dòng)動(dòng)畫(huà)進(jìn)入主菜單顯示單人最高積分返回按鍵最高積分開(kāi)始游戲進(jìn)入游戲游戲設(shè)置模式選擇音效選擇圖 3-7 開(kāi)機(jī)界面功能框架Fig 3-7 Boot interface function frame3.3.3 游戲系統(tǒng)“枚舉算法”概述本文繞開(kāi)了澀難懂、比較復(fù)雜的“矩陣算法”,提出了另一種“枚舉算法”來(lái)實(shí)現(xiàn)這個(gè)經(jīng)典游戲?!懊杜e算法”沒(méi)有復(fù)雜的數(shù)學(xué)理論、避免了在程序中大量使用矩陣運(yùn)算公式,設(shè)計(jì)思路清晰、明了,非常適合游戲設(shè)計(jì)的初學(xué)者理解和實(shí)現(xiàn)。所謂枚舉算法,就是直接枚舉出游戲中各圖塊的基本形狀和它們的旋轉(zhuǎn)形狀,然后控制每一種不同形狀的方塊在游戲戲中的產(chǎn)生、移動(dòng)、旋轉(zhuǎn)、落下、填滿和清除等游戲過(guò)程。3.3.4 俄羅斯方塊造型設(shè)計(jì)的方法眾所周知,俄羅斯方塊一般有七種基本形狀,每個(gè)基本形狀都由4個(gè)正方形的小方塊構(gòu)成。利用小方塊不同的擺放位置,可產(chǎn)生19種旋轉(zhuǎn)型圖塊。這七種圖形分別是“I型”、“L型”、“反L型”、“Z型”、“反Z型”、“口型”、“T型”。如圖3-8所示。I型L型反L型T型Z型反Z型口型圖 3-8 方塊模型Fig 3-8 Square model本系統(tǒng)在構(gòu)造19個(gè)方塊模型時(shí)的思路是:定義一個(gè)數(shù)組,用以存儲(chǔ)各個(gè)模型中4個(gè)小方塊的頂點(diǎn)坐標(biāo)。比如L型,其數(shù)據(jù)結(jié)構(gòu)為0,0,0,4,0,8,4,8。其中,每?jī)蓚€(gè)數(shù)據(jù)為一個(gè)小正方形的列、行坐標(biāo),如圖 3-9所示。由圖可知,整個(gè)界面的坐標(biāo)原點(diǎn)在左上角,分別向右、向下作為橫軸的正方向和縱軸的正方向。圖中每一格代表了LCD12864中的連續(xù)四行,第1格的坐標(biāo)是(0,0);第2格的坐標(biāo)是(0,4);第3格的坐標(biāo)是(0,8);第4格的坐標(biāo)是(4,8);其它圖塊也按此方法編輯數(shù)組內(nèi)容。2341圖 3-9 L型Fig 3-9 L Shape3.3.5 隨機(jī)產(chǎn)生俄羅斯方塊的方法(1) 產(chǎn)生隨機(jī)數(shù)的理論依據(jù)為了實(shí)現(xiàn)隨機(jī)落下各類方塊圖形,游戲過(guò)程序中必須抽取隨機(jī)數(shù)來(lái)確定方塊的類型。隨機(jī)數(shù)是一個(gè)既簡(jiǎn)單又復(fù)雜的問(wèn)題。本設(shè)計(jì)采用眾所周知的線性疊加法,雖然沒(méi)有完美的方法產(chǎn)生隨機(jī)數(shù),不過(guò)線性疊加法是一個(gè)合適的方法,它徹底解決了8位機(jī)隨機(jī)數(shù)的問(wèn)題。如果從一個(gè)足夠長(zhǎng)的數(shù)字序列中的某一個(gè)點(diǎn)取出一邊串的數(shù)字,那么這些數(shù)字就看似隨機(jī)。這個(gè)開(kāi)始的點(diǎn)(數(shù)字)叫做種子。如果從相同的點(diǎn)(種子)開(kāi)始,將會(huì)得到相同的數(shù)字,這是因?yàn)槲覀兪菑墓潭ǖ男蛄兄腥?shù)字(所以叫偽隨機(jī))。但這卻是一個(gè)有用的特性,我們可以每次從不同的點(diǎn)取數(shù),即改變種子,從而可以實(shí)現(xiàn)真正的隨機(jī)。(2) “線性疊加法”的概況“線性疊加法”其實(shí)只涉及二個(gè)內(nèi)容即:乘法和加法。只需三個(gè)步驟即:第一,為了取得新的種子,舊的種子與一個(gè)常數(shù)A相乘;第二,所得的結(jié)果和第二個(gè)常數(shù)C相加;第三,新的種子就是第二步結(jié)果的低32位。保留低32位很重要,用來(lái)獲得下一個(gè)種子。計(jì)算公式為: 種子 = A * 種子 + C (3-1)此公式在幾何圖中表示為一條直線,而且新種子由舊種子反復(fù)相加得來(lái),所以叫線性疊加。隨機(jī)函數(shù)的關(guān)鍵在于選擇優(yōu)秀的“常數(shù)A”(也叫乘數(shù)A),其實(shí)也就是選擇了一個(gè)固定的數(shù)字序列?!俺?shù)C”,不像乘數(shù)A那樣重要,但是一定是個(gè)奇數(shù)。事實(shí)上,C可選1。因?yàn)槠鏀?shù)(舊的種子)乘奇數(shù)(乘數(shù)A)是奇數(shù),再加奇數(shù)(常數(shù)C)將會(huì)是一個(gè)偶數(shù)學(xué)偶數(shù)(舊的種子)乘奇數(shù)(乘數(shù)A),加奇數(shù)(常數(shù)C)將會(huì)是一個(gè)奇數(shù)。如此種子會(huì)在奇數(shù)和偶數(shù)之間轉(zhuǎn)變。因?yàn)榉N了的變化足夠隨機(jī),所以種子的值可以作為8位或16位隨機(jī)數(shù)。(3) Keil C51中“線性疊加法”的實(shí)現(xiàn)方法在Keil C51中生成偽隨機(jī)數(shù)需要用到兩個(gè)函數(shù),一個(gè)是srand(unsigned int seed),一個(gè)是rand()。首先給srand(unsigned int seed)提供一個(gè)種子,該種子為unsigned int類型,其取值范圍從0到65536,srand(unsigned int seed)根據(jù)這個(gè)種子會(huì)由上述特定的公式生成一個(gè)隨機(jī)數(shù)序列;然后調(diào)用rand(),它會(huì)依次從這個(gè)序列中返回一個(gè)數(shù),其值在0 到32767之間。因隨機(jī)數(shù)函數(shù)rand()函數(shù)實(shí)際上是線性隨機(jī)的,如果在不指定srand(unsigned int seed)的種子的情況下,它每次都使用默認(rèn)的種子,因此生成的序列會(huì)是同一個(gè),所以會(huì)取到相同的數(shù)字序列。這可能會(huì)導(dǎo)致每次重新運(yùn)行游戲時(shí)其隨機(jī)數(shù)結(jié)果都是一樣的。為了解決該問(wèn)題,本設(shè)計(jì)在玩家進(jìn)入游戲時(shí)讀取按鍵按下瞬間定時(shí)器T0的計(jì)數(shù)值,作為srand(unsigned int seed)的種子。從而實(shí)現(xiàn)真正的隨機(jī)。(4) 隨機(jī)數(shù)程序流程圖如圖3-10為隨機(jī)數(shù)程序流程圖。srand(unsigned int seed)產(chǎn)生一數(shù)據(jù)序列開(kāi)始游戲讀取T0計(jì)數(shù)值作為seedrand()將返回值進(jìn)行處理后選擇相應(yīng)的方塊數(shù)組圖 3-10 隨機(jī)數(shù)程序流程圖Fig 3-10 Ramdom process flow program diagram3.3.6 俄羅斯方塊平移的實(shí)現(xiàn)方法 方塊產(chǎn)生后,需要用全局變量來(lái)保存方塊在游戲map區(qū)中的行坐標(biāo)和列坐標(biāo)。方塊的平移包括左移和右移兩種情況,無(wú)論那種情況都要首先進(jìn)行合法性判斷。(1) 俄羅斯方塊平移特性在本設(shè)計(jì)中規(guī)定當(dāng)按下一次左移或右移按鍵時(shí),map區(qū)中的當(dāng)前圖塊就左移或右移一個(gè)正方形的寬度。而一個(gè)小正方形的寬度,則對(duì)應(yīng)著LCD12864中的4列。(2) 平移合法性判斷 平移的合法性判斷經(jīng)較簡(jiǎn)單,只需判斷它旁邊相鄰位置是否被填充即可。(3) 平移算法的實(shí)現(xiàn)在程序中,當(dāng)有任意一個(gè)平移按鍵被按下時(shí),系統(tǒng)接收到信號(hào),然后調(diào)用平移函數(shù)進(jìn)行判斷其合法性,得到該函數(shù)的返回值為1后,再進(jìn)行平移操作。其程序流程如圖3-11所示。返回1返回1返回0YYNN左移按鍵被按下right_left_judge函數(shù)列變量f_x減4行不變右移按鍵被按下列變量f_x加4行不變r(jià)ight_left_judge函數(shù)將圖塊左移一格將圖塊右移一格圖 3-11 平移算法流程圖Fig 3-11 Translation algorithms flowchart3.3.7 俄羅斯方塊旋轉(zhuǎn)的實(shí)現(xiàn)方法(1) 俄羅斯方塊旋轉(zhuǎn)圖形概況方塊旋轉(zhuǎn)是一個(gè)游戲?qū)崿F(xiàn)的關(guān)鍵問(wèn)題,實(shí)現(xiàn)旋轉(zhuǎn)的數(shù)學(xué)方法有多種,如矩陣變換法、枚舉法、索引法等。本文前面已經(jīng)論述了此次設(shè)計(jì)采用枚舉的方法,對(duì)19種俄羅斯方塊造型進(jìn)行構(gòu)造。游戲過(guò)程中,每一種基本方塊都要做旋轉(zhuǎn)控制,于是就產(chǎn)生了旋轉(zhuǎn)后的方塊形狀,本文將其稱為“旋轉(zhuǎn)型”?;拘椭械摹癐型”,只有一種旋轉(zhuǎn)型,即由豎直旋轉(zhuǎn)90度后成為水平。因此,基本型加上一種旋轉(zhuǎn)型,共有兩種形狀?;拘椭械摹癓型”和“反L型”有三種旋轉(zhuǎn)型,將它按順時(shí)針每旋轉(zhuǎn)一個(gè)90度就產(chǎn)生一種旋轉(zhuǎn)型,可以旋轉(zhuǎn)三次,得到三種不同的旋轉(zhuǎn)型,因此,它的三種旋轉(zhuǎn)型加上其基本型,“L型”和“反L型”方塊分別有四種形狀?;拘椭小癦型”和“反Z型”可以順時(shí)針旋轉(zhuǎn)一次90度,加上他們的基型分別有兩種形狀?;拘椭械摹癟型”有三種旋轉(zhuǎn)型,將他按順時(shí)針旋轉(zhuǎn)一個(gè)90度就產(chǎn)生一種旋轉(zhuǎn)型,它可以旋轉(zhuǎn)三次,得到三種不同的旋轉(zhuǎn)型,因此,它的三種旋轉(zhuǎn)型加上其基本型,“T型”方塊共有四種形狀?;拘椭械摹翱谛汀狈綁K沒(méi)有旋轉(zhuǎn)型,在游戲中只有一種形狀。綜上所述,七種基本型方塊,因旋轉(zhuǎn)產(chǎn)生了不同的旋轉(zhuǎn)型,這些旋轉(zhuǎn)型加上他們的基本型,整個(gè)游戲中,共有19種不同的方塊形狀。本設(shè)計(jì)實(shí)現(xiàn)旋轉(zhuǎn)操作的具體方法,可分為兩類,一類是I型的旋轉(zhuǎn)策略;另一類則是其余17種基本型的旋轉(zhuǎn)策略。(2) 旋轉(zhuǎn)合法性判斷方塊做順時(shí)針旋轉(zhuǎn),每次旋轉(zhuǎn)90度。本設(shè)計(jì)規(guī)定只要旋轉(zhuǎn)后到達(dá)的地方未被填允,方塊就可以進(jìn)行旋轉(zhuǎn)操作。(3) I型的旋轉(zhuǎn)策略為了在視覺(jué)上實(shí)現(xiàn)I型的順時(shí)針旋轉(zhuǎn),本設(shè)計(jì)采用位置錯(cuò)落的方式來(lái)實(shí)現(xiàn)。其具體過(guò)程如圖3-12所示。 圖 3-12 I型的旋轉(zhuǎn)方法Fig 3-12 The rotation method of I shape當(dāng)落下的圖塊是圖所示時(shí),其旋轉(zhuǎn)周期為 。當(dāng)落下的圖塊是圖所示時(shí),其旋轉(zhuǎn)周期為 。 之所以把I型的旋轉(zhuǎn)變換單獨(dú)拿出來(lái)討論,是因?yàn)镮型只有基本型和旋轉(zhuǎn)型共兩種圖塊。如果在當(dāng)前位置直接按這兩種圖塊的坐標(biāo)數(shù)組進(jìn)行圖形切換,則無(wú)法實(shí)現(xiàn)順時(shí)針旋轉(zhuǎn)的視覺(jué)效果。所以,在旋轉(zhuǎn)處理程序中,當(dāng)要旋轉(zhuǎn)的當(dāng)前圖塊為I型及其旋轉(zhuǎn)型時(shí),就要改變當(dāng)前列、行這兩個(gè)全局變量的值。(4) 其余17種基本型的旋轉(zhuǎn)策略除了I型的旋轉(zhuǎn)比較復(fù)雜外,其余17種類型的方塊只需按各自旋轉(zhuǎn)的順序在當(dāng)前位置用已經(jīng)編輯好的坐標(biāo)數(shù)組來(lái)實(shí)現(xiàn)旋轉(zhuǎn)即可。具體程序流程如圖3-13所示。NYYYNNYN按下旋轉(zhuǎn)鍵是否是I型、一型判斷方塊經(jīng)過(guò)了幾次旋轉(zhuǎn)判斷新位置是否可寫(xiě)判斷是哪類圖塊I型及其旋轉(zhuǎn)型其它17種類型根據(jù)上述判斷的結(jié)果決定當(dāng)前位置行、列坐標(biāo)的增減進(jìn)行旋轉(zhuǎn)變換是否是I型、一型以外的其它類型按照已經(jīng)排列好的變換順序取坐標(biāo)數(shù)據(jù)恢復(fù)原先坐標(biāo)圖 3-13 旋轉(zhuǎn)程序流程圖Fig 3-13 Rotating program flowchart3.3.8 俄羅斯方塊下移的實(shí)現(xiàn)方法 在整個(gè)游戲過(guò)程中,方塊是不斷向下運(yùn)行的,其下移特性為:方塊每次下移的格數(shù)對(duì)應(yīng)著LCD12864屏幕中的一行。具體程序?qū)崿F(xiàn)流程如圖3-14所示。YNYNYN進(jìn)入下移判斷程序讀取下移一行后每個(gè)小方塊的行列坐標(biāo)判斷每個(gè)小方塊的行在LCD顯示區(qū)中的哪一頁(yè)上半頁(yè)下半頁(yè)是否可寫(xiě)標(biāo)志加1標(biāo)志是否為4程序返回1是否循環(huán)了4次程序返回0圖 3-14 下移判斷程序流程圖Fig 3-14 Moves down judgment program flowchart3.3.9 滿行檢測(cè)及消行功能的實(shí)現(xiàn)方法 隨著方塊的不斷累積,方塊每次下落到不能再運(yùn)動(dòng)時(shí),系統(tǒng)就會(huì)檢測(cè)游戲map區(qū),當(dāng)檢測(cè)到map區(qū)中某一行堆積滿后,系統(tǒng)就消去此行,作為獎(jiǎng)勵(lì),其上方的方塊群則依次下落一行。系統(tǒng)滿行檢測(cè)和消行功能是通過(guò)“滿行檢測(cè)及消行”函數(shù)實(shí)現(xiàn)的,即在每個(gè)圖塊落定和下一個(gè)圖塊未出來(lái)之前,按頁(yè)掃描游戲map區(qū),每半頁(yè)算一行。若檢測(cè)到某行被填滿,則消去此行,并將其上方的圖塊往下移動(dòng)相應(yīng)的行數(shù)。具體程序?qū)崿F(xiàn)流程如圖3-15所示。YNYNYN某一方塊已落定進(jìn)入滿行檢測(cè)程序,頁(yè)標(biāo)志n=7從第n頁(yè)開(kāi)始檢測(cè)檢測(cè)當(dāng)前頁(yè)的下半頁(yè)是否滿行消除此行,其上方塊依次下落一行檢測(cè)當(dāng)前頁(yè)的上半頁(yè)是否滿行消除此行,其上方塊依次下落一行n減1是否是第0頁(yè)退出圖 3-15 滿行檢測(cè)程序流程Fig 3-15 Full line detection processes3.3.10 游戲積分的計(jì)算方法在游戲系統(tǒng)中,積分體現(xiàn)了玩家在此次游戲中的操作情況。本游戲系統(tǒng)分單人模式和雙人模式兩種積分計(jì)算方式。單人模式下,玩家每消去一行,就能獲得1個(gè)積分,如果當(dāng)前游戲積分超過(guò)系統(tǒng)記錄的單人最高游戲積分,則系統(tǒng)將更新記錄,以便其他玩家挑戰(zhàn)。雙人模式下,雙方的積分制度是一樣的,以進(jìn)度條的方式展示在積分與道具區(qū)。其中積分區(qū)分為兩個(gè)階段,第一階段每消去1行進(jìn)度條向上走一格,共8個(gè)進(jìn)度格;第二階段每累計(jì)消去3行進(jìn)度條才向上增加一格,共6個(gè)進(jìn)度格。雙方誰(shuí)先到達(dá)進(jìn)度條的頂端就算勝利。當(dāng)一次性同時(shí)消去3行時(shí),則能獲得一個(gè)道具功能的使用權(quán)。最多能累積兩個(gè)道具。具體程序?qū)崿F(xiàn)流程如圖3-16所示。NYYNYNYNYN消去一行當(dāng)前積分加1是否大于最高紀(jì)錄存儲(chǔ)當(dāng)前積分退出單人模式下雙人模式下增加n分,消去n行消去n行?n0n=3?增加1道具道具是否小于2個(gè)?增加1道具進(jìn)度是否到頂?結(jié)束所有進(jìn)程返回游戲圖 3-16 積分系統(tǒng)程序流程圖Fig 3-16 Score system program flowchart3.4 雙人俄羅斯方塊游戲設(shè)計(jì)3.4.1 RTX51 Tiny簡(jiǎn)介許多微處理器應(yīng)用程序要求同時(shí)執(zhí)行多個(gè)任務(wù)。對(duì)于這樣的應(yīng)用程序,一個(gè)實(shí)時(shí)操系統(tǒng)(RTOS)允許靈活的分配系統(tǒng)資源(中央處理器、存儲(chǔ)器等)給各個(gè)任務(wù)。RTX51它可以運(yùn)行于所有的8051派生機(jī)型,是一個(gè)很好使用的強(qiáng)大的準(zhǔn)并行實(shí)時(shí)操作系統(tǒng)。RTX51可以簡(jiǎn)化那些復(fù)雜而且時(shí)間要嚴(yán)格的工程軟件設(shè)計(jì)工作。有兩個(gè)不同的RTX51版本可以利用:RTX51 Full和RTX51 Tiny。二者的主要區(qū)別是前者是可以強(qiáng)占(或者說(shuō)可剝奪的)系統(tǒng)而后者是不可以強(qiáng)占的(不可剝奪的)。RTX51 Full版本是完整版,它使用四個(gè)任務(wù)優(yōu)先級(jí)來(lái)完成,同時(shí)存在時(shí)間片輪轉(zhuǎn)調(diào)度和搶先的任務(wù)切換。RTX51 Full工作在與中斷功能相似的狀態(tài)下,信號(hào)和信息可以通過(guò)郵箱系統(tǒng)在任務(wù)之間互相傳遞。程序員可以從一存儲(chǔ)池中分配和釋放內(nèi)存,也可以強(qiáng)迫一個(gè)任務(wù)等待中斷、超時(shí)或者是從另一個(gè)任務(wù)或中斷發(fā)出的信號(hào)或信息。而本游戲系統(tǒng)采用的RTX51 Tiny是RTX51完整版的子集,它完全集成在Keil C51的集成開(kāi)發(fā)環(huán)境中。自身僅占用900字節(jié)左右的程序存儲(chǔ)空間。RTX51 Tiny僅支持時(shí)間片輪轉(zhuǎn)任務(wù)切換和使用信號(hào)進(jìn)行任務(wù)切換。不支持搶先式的任務(wù)切換,不包括消息歷程,沒(méi)有存儲(chǔ)器池分配程序。RTX51 Tiny雖然比較簡(jiǎn)陋,但它還是具備了一些實(shí)時(shí)操作系統(tǒng)的基本要素,又因?yàn)樗耆稍贙eil C51的集成開(kāi)發(fā)環(huán)境中,可以使用戶把更多的精力關(guān)注在應(yīng)用本身而無(wú)需考慮復(fù)雜的底層驅(qū)動(dòng),而且整個(gè)應(yīng)用軟件系統(tǒng)結(jié)構(gòu)清晰,維護(hù)方便,可節(jié)省大量的時(shí)間和人力。當(dāng)程序比較復(fù)雜時(shí),它的優(yōu)點(diǎn)就體現(xiàn)得更明顯。RTX51 Tiny完全可以充當(dāng)我們進(jìn)入實(shí)時(shí)操作系統(tǒng)(RTOS)世界的領(lǐng)路者,更為重要的是,它是免費(fèi)的。無(wú)論如何,RTX51 Tiny仍然是在8位單片機(jī)中應(yīng)用操作系統(tǒng)的首選。3.4.2 RTX51 Tiny的內(nèi)核分析該小節(jié)只介紹本設(shè)計(jì)中用到RTX51 Tiny系統(tǒng)的相關(guān)知識(shí)與配置方法。讀者若想更全面了解RTX51 Tiny多任務(wù)實(shí)時(shí)操作系統(tǒng),請(qǐng)閱讀RTX51 Tiny的幫助文件或其它相關(guān)文件。(1) RTX51 Tiny程序的編寫(xiě)方法若要使用RTX51 Tiny的內(nèi)核,只需包含文件RTX51TNY.H即可。所有的運(yùn)行時(shí)庫(kù)常量都在這個(gè)頭文件中定義??梢圆捎靡韵路绞桨篿nclude 當(dāng)使用Rtx51 Tiny時(shí),要為每個(gè)任務(wù)建立獨(dú)立的任務(wù)函數(shù)。同時(shí),RTX51 Tiny任務(wù)必須是用_task_聲明的C函數(shù),返回值和參數(shù)都必須是void類型的, RTX51 Tiny程序不需要用戶自已定義main函數(shù),取而代之的是,RTX51 Tiny從任務(wù)0開(kāi)始執(zhí)行。在典型的應(yīng)用中,任務(wù)0簡(jiǎn)單的建立所有其他的任務(wù)。 (2) 系統(tǒng)調(diào)用函數(shù)簡(jiǎn)介RTX51 Tiny內(nèi)核完全集成在KEIL C51編譯器中,以系統(tǒng)函數(shù)調(diào)用的方式運(yùn)行,因此可以很容易地使用KEIL C51語(yǔ)言編寫(xiě)和編譯一個(gè)多任務(wù)程序,并嵌入到實(shí)際應(yīng)用系統(tǒng)中,內(nèi)核提供多組函數(shù)供應(yīng)用程序引用。 (3) RTX51 Tiny的任務(wù)狀態(tài)RTX51 Tiny 的用戶任務(wù)具有以下幾個(gè)狀態(tài):RUNNING: 任務(wù)處于運(yùn)行中,同一時(shí)間只有一個(gè)搶占任務(wù)可以處于“RUNNING”狀態(tài)。READY :任務(wù)正在等待運(yùn)行,在當(dāng)前運(yùn)行的任務(wù)時(shí)間片完成之后,RTX51 Tiny運(yùn)行下一個(gè)處于“READY”狀態(tài)的任務(wù)。WAITING: 任務(wù)由于時(shí)間片用完而處于“TIME OUT”狀態(tài),并等待再次運(yùn)行。該狀態(tài)與“READY”狀態(tài)相似,但由于是內(nèi)部操作過(guò)程使一個(gè)循環(huán)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中班創(chuàng)設(shè)互動(dòng)活動(dòng)方案
- 中班護(hù)眼親子活動(dòng)方案
- 中班活動(dòng)玩沙活動(dòng)方案
- 中班生日小活動(dòng)方案
- 中班美食活動(dòng)方案
- 中班詩(shī)歌展示活動(dòng)方案
- 中班防曬活動(dòng)方案
- 中石化錢包充值活動(dòng)方案
- 中秋體能館活動(dòng)方案
- 中秋品茶活動(dòng)方案
- 大學(xué)生創(chuàng)業(yè)計(jì)劃書(shū)word文檔(三篇)
- 幼兒園教育科研:園本生活經(jīng)驗(yàn)課之“食”主題課程開(kāi)發(fā)與實(shí)施案例
- 2023年杭州育才中學(xué)小升初語(yǔ)文考試真題卷含標(biāo)準(zhǔn)答案
- 2023年安徽六安市裕安區(qū)城鄉(xiāng)建設(shè)投資集團(tuán)有限公司招聘筆試題庫(kù)及答案解析
- 超市營(yíng)業(yè)員聘用勞務(wù)合同書(shū)(2篇)
- GB/T 2832-1996陶管抗外壓強(qiáng)度試驗(yàn)方法
- GB/T 19974-2018醫(yī)療保健產(chǎn)品滅菌滅菌因子的特性及醫(yī)療器械滅菌過(guò)程的開(kāi)發(fā)、確認(rèn)和常規(guī)控制的通用要求
- GB/T 10095.1-2008圓柱齒輪精度制第1部分:輪齒同側(cè)齒面偏差的定義和允許值
- 熱電公司設(shè)備標(biāo)志牌制作、懸掛標(biāo)準(zhǔn)
- 2022年XX中心學(xué)校教師“縣管校聘”工作實(shí)施方案
- 人教版七年級(jí)下冊(cè)數(shù)學(xué)《期末考試卷》(含答案)
評(píng)論
0/150
提交評(píng)論