天天看點

基于單片機的俄羅斯方塊遊戲機設計1 緒論2 方案設計3 系統硬體平台設計4 系統軟體平台建構

1 緒論

1.1課題研究背景

如今,計算機系統的發展已明顯地朝三個方向發展,這三個方向就是:巨型化,單片化,網絡化。對于解決複雜計算和高速資料處理的問題仍然是巨型機在起作用,因而,目前巨型機正在朝高速及高處理能力的方向發展。單片機在出現時Intel公司就給其單片機取名為嵌入式微控制器。單片機的最明顯的優勢,就是可以嵌入到各種儀器、裝置中。這一點是巨型機和網絡不可能做到的。單片機在内部已內建了趆來趆多的部件,這些部件包括一般常用的電路,例如:定時器,比較器,EEPROM,D/A轉換器,串行通信接口等。同時,俄羅斯方塊是一款風靡全球的電視遊戲機和掌上遊戲機遊戲,它曾經造成的轟動與經濟價值可以說是遊戲史上一件大事。是以,對它的研究,無論從技術上,還是社會意義上看都是很有價值的。單片機在遊戲上的應用是具有非常大的潛力的,它能将遊戲帶入到另一個階段。

1.2課題發展概況

如今,遊戲機風行的程度,是第一台電子遊戲機的研制者諾蘭-布什納爾先生始料不及的。在全世界最大的城市,直至最小的村莊,從紐約最輝煌的遊樂場,到高加索最小的鄉鎮兒童娛樂點,在千家萬戶,正在進行着千千萬萬這樣的“戰鬥”,伴随着無數成功與失敗,興奮與懊喪。遊戲機帶來了一個全球性的瘋狂症,其他任何娛樂與之相比都望塵莫及。然而,究竟是什麼原因使遊戲機如此風行呢? 在回顧了遊戲機發展簡史之後,我們不難悟出,技術進步在遊戲機發展過程中起到了極大的促進作用。

第二次世界大戰以後,電子計算機技術得到了突飛猛進的發展。先是由半導體代替了笨重的真空管,後來出現了內建電路和大規模內建電路,使電子計算機一代一代實作更新,同時軟體技術也發展迅速。在美國,集中了許多計算機軟體的設計人才,他們工作之餘,時常喜愛編一種能與人鬥智的“遊戲”,以此來鍛煉程式設計的能力。這種“遊戲”花樣繁多,但其特點都是利用計算機軟體事先設計好的“分析”、“判斷”能力反過來與人較量。由于不斷修改更新,使計算機的“智力”水準與人難分高低。

随着深藍計算機與人的棋類對決,到現在的PSP遊戲機或者是家庭用的X-BOX遊戲機,遊戲機的技術是日益的發展、進步。

但是,技術進步絕不是遊戲機風行的唯一因素。随着終端裝置開發能力的加強,作為娛樂終端的遊戲機也得到了很大程度的發展。隻有得到了遊戲終端技術的支援,才能做出更新、更高難的遊戲。這也加速了遊戲機在全球風行程度,是以對于遊戲機的研究和設計具有很重要的意義,這也是本課題研究的來源。

1.3課題主要解決的問題及功能

現如今,遊戲風靡全球,各種遊戲層出不窮,大到網絡型的複雜遊戲,小到手機遊戲、單機遊戲、智力遊戲等簡單遊戲。但是這種簡單也是相對于網絡遊戲等大型遊戲而言的,小遊戲本身的代碼還是相當繁雜,它要執行一系列指令才能正确的完成一個簡單的操作,才能按照玩家的意志工作。是以我們現在見到的遊戲多是在基于電腦這種高速執行指令的平台上運作的,脫離了它就什麼事都做不了了。那麼俄羅斯方塊這種小遊戲能否在單片機上編出來呢?答案是肯定的,是以我就根據小遊戲機設計了這款遊戲,可以選關,可以計分,當達到一定的分值自動更新。難度會越來越高,速度會越來越快。

2 方案設計

2.1方案論證

2.1.1程式部分

首先,我們編寫的這個遊戲是一個小型遊戲,實作的功能比較簡單,不像大型遊戲那樣功能複雜,它隻要控制俄羅斯磚塊放到正确的位置即可,難度随着磚塊的增多而加大,對于實作這樣一個功能,程式不是太複雜,用一塊單片機足以達到目的。

其次,它的控件也比較少隻有4個方向鍵和2個輔助的功能鍵,這些控鍵在Proteus中用彈跳式按鍵代替即可。

第三,遊戲地圖相對比較小、畫面簡單,隻有幾個圖形,這些在一塊稍大的液晶屏上就足以顯示,用不着電腦顯示屏。

第四,就程式設計語言方面來說,編寫這樣一個簡單的小遊戲不需要什麼進階的語言,C語言或彙編語言就足以完成,C語言是一種通用型的語言,程式設計靈活、可讀性強、移植性好;彙編語言是一種直接面向硬體的基礎語言,最接近機器語言,執行速度快(本遊戲采用C語言編寫)。由以上幾點可知:單片機上運作推箱子遊戲在硬體和軟體兩個方面都是可行的。

2.1.2硬體部分

硬體部分我們主要使用的晶片是51單片機,有AT89C51、AT89S51、STC89C51、STC89C52幾種型号可供選擇。首先明确一點,這幾個型号都屬于51單片機,程式和電路是通用的。其中AT89C51是美國ATMEL公司生産的,下載下傳程式需要專門的高壓程式設計器,現在已經停産,故不作考慮。AT89S51是美國ATMEL公司生産的,可以直接通過ISP線下載下傳程式,已經替代了AT89C51。STC89C51是台灣宏晶公司生産的,可以直接通過序列槽下載下傳程式,相較AT89S51來說會更加便利。STC89C52與STC89C51師出同門,是屬于51單片機的,這一點毋庸置疑,完全符合設計的要求。其次,STC89C51或AT89S51的程式存儲空間隻有4KB,有時候會不夠用,而STC89C52有8KB的程式存儲空間,而且價格相同,是以在我們本次的設計中選擇了STC89C52。

2.2設計要求

現如今,遊戲風靡全球,各種遊戲層出不窮,大到網絡型的複雜遊戲,小到手機遊戲、單機遊戲、智力遊戲等簡單遊戲。但是這種簡單也是相對于網絡遊戲等大型遊戲而言的,小遊戲本身的代碼還是相當繁雜,它要執行一系列指令才能正确的完成一個簡單的操作,才能按照玩家的意志工作。是以我們現在見到的遊戲多是在基于電腦這種高速執行指令的平台上運作的,脫離了它就什麼事都做不了了。是以我就根據小遊戲機設計了這款遊戲,通過一系列主要按鍵進行操控,可以選關,可以計分,當達到一定的分值自動更新。難度會越來越高,速度會越來越快。

3 系統硬體平台設計

3.1 STC89C52單片機概述

STC89C52是一種低功耗、高性能CMOS8位微控制器,具有8K 在系統可程式設計Flash 存儲器。使用Atmel 公司高密度非易失性存儲器技術制造,與工業80C51 産品指令和引腳完全相容。片上Flash允許程式存儲器在系統可程式設計,亦适于正常程式設計器。在單晶片上,擁有靈巧的8 位CPU 和在系統可程式設計Flash,使得AT89S52為衆多嵌入式控制應用系統提供高靈活、超有效的解決方案。AT89S52具有以下标準功能: 8k位元組Flash,256位元組RAM,32 位I/O 口線,看門狗定時器,2 個資料指針,三個16 位定時器/計數器,一個6向量2級中斷結構,全雙工串行口,片内晶振及時鐘電路。另外,AT89S52 可降至0Hz 靜态邏輯操作,支援2種軟體可選擇節電模式。空閑模式下,CPU停止工作,允許RAM、定時器/計數器、序列槽、中斷繼續工作。掉電保護方式下,RAM内容被儲存,振蕩器被當機,單片機一切工作停止,直到下一個中斷或硬體複位為止。

3.2 STC89C52單片機最小系統

單片機最小系統主要由電源、振蕩、複位電路以及擴充電路等部分組成。在本設計中,擴充了液晶顯示接口。是以,本設計所涉及到的最小系統如下圖所示。

基于單片機的俄羅斯方塊遊戲機設計1 緒論2 方案設計3 系統硬體平台設計4 系統軟體平台建構

3-1STC89C52最小系統

Fig3-1 STC89C52 Minimum System

3.3電源系統

電源電路。對于STC89C52單片機來說,電壓範圍在3.3-5.5V都能工作。我們現在采用2種方式給單片機,電池盒(3節5号電池)和USB(電腦USB,移動電源,手機充電器等)

基于單片機的俄羅斯方塊遊戲機設計1 緒論2 方案設計3 系統硬體平台設計4 系統軟體平台建構

圖3-2電源電路

Fig.3-2  Power System

3.4複位系統

MCS51單片機通常采用上電自動複位和按鈕複位兩種方式。通常因為系統運作等需要,常常需要人工複位,本設計采用按鈕複位的方式,即按下開關一定時間就能使RTS引腳端為高電平,進而使單片機複位。同時,簡單複位電路中,幹擾信号易串入複位端,由此可能會引起内部某些寄存器錯誤複位,這時可在RST引腳上接去耦電容。在STC12C5A60S2單片機中有兩個複位端口,即RST/P4.7、RST2/P4.6,當晶振頻率小于或等于12MHz時,使用RST端口。由于本設計使用外接12MHz的晶振作為振蕩時鐘,是以采用如圖3-2所示的複位系統。

基于單片機的俄羅斯方塊遊戲機設計1 緒論2 方案設計3 系統硬體平台設計4 系統軟體平台建構

圖 3-3 複位系統

Fig 3-3 Rest System

3.5時鐘電路

單片機系統裡都有時鐘電路,在單片機系統裡晶振作用非常大,全稱叫晶體振蕩器,它結合單片機内部電路産生單片機所需的時鐘頻率,單片機晶振提供的時鐘頻率趆高,那麼單片機運作速度就趆快,單片機的一切指令執行都是依靠單片機晶振提供的時鐘頻率。

晶振通常與鎖相環電路配合使用,以提供系統所需的時鐘頻率。本設計中STC89C52使用12MHz的晶體振蕩器作為振蕩源,由于單片機内部帶有振蕩電路,是以外部隻要連接配接一個晶振和兩個電容即可,電容容量一般在15pF至50pF之間。如圖3-3所示即為本設計的振蕩電路。

基于單片機的俄羅斯方塊遊戲機設計1 緒論2 方案設計3 系統硬體平台設計4 系統軟體平台建構

圖 3-4 時鐘電路

Fig 3-4 clock circuit

3.6程式下載下傳系統

單片機系統的傳統程式設計方式是先将單片機從電路闆上取下,放入專用的程式設計器進行程式設計,再放入電 路闆進行調試。其缺點是頻繁拔插器件容易損壞器件的引腳;如果頻繁的調試程式,必須重複拔插 ,大降低了開發效率。ISP(線上系統程式設計)技術是一種無需将存儲晶片從嵌入式裝置上取出就能對 其進行程式設計的過程。其優點是,即使器件焊接在電路闆上,仍可對其進行程式設計。線上系統可程式設計是 Flash存儲器的固有特性(通常無需額外電路),Flash幾乎都采用這種方式程式設計。 ISP的實作相對要簡單一些,一般通用做法是内部的存儲器可以由上位機的軟體通過序列槽來進行改寫 。對于8051系列單片機來講可通過SPI接口或其它的串行接口接收上位機傳來的資料并寫入存儲器中 。而上位機PC機與下位機單片機通過RS-232串行接口總線進行的串行通信。8051系列單片機帶有一個全雙工的串行接口,是以用RS-232串行接口總線非常友善。[2]PC機配置RS-232标準接口,RS-232信 号電平為負邏輯(邏輯“0”為+12V;邏輯“1”為-12V),8051單片機輸入、輸出電平為TTL電平 (邏輯“0”為小于等于0.5V;邏輯“1”為大于等于2.4V)。是以8051單片機與PC機間點對點異步 通信需加電平轉換電路,否則将燒壞TTL電路。MAX232是MAXIM公司生産的電平轉換器件,隻需在外 部接入相應的電解電容即可。是以,本設計采用直連序列槽線進行序列槽通信,其中STC12C5A60S2的 P3^0/RXD和P3^1/TXD分别和下載下傳器的第10管腳/T和第9管腳/R相連,序列槽線的第5管腳接地,2、3管 腳和下載下傳器的7、8管腳相連。具體電路如圖2-5所示。

基于單片機的俄羅斯方塊遊戲機設計1 緒論2 方案設計3 系統硬體平台設計4 系統軟體平台建構

圖3-5 程式下載下傳系統

Fig 3-5 Program Download System

3.7 LCD液晶顯示電路

128X64是一種具有4 位/8 位并行、2 線或3 線串行多種接口方式的點陣圖形液晶顯示子產品;其顯示分辨率為128×64.利用該子產品靈活的接口方式和簡單、友善的操作指令,可構成全中文人機互動圖形界面。可以顯示8×4 行16×16 點 陣的漢字. 也可完成圖形顯示.低電壓低功耗是其又一顯著特點。由該子產品構成的液晶顯示方案與同類型的圖形點陣液晶 顯示子產品相比,不論硬體電路結構或顯示程式都要簡潔得多,且該子產品的價格也略低于相同點陣的圖形液晶子產品。

基于單片機的俄羅斯方塊遊戲機設計1 緒論2 方案設計3 系統硬體平台設計4 系統軟體平台建構

圖3-6 LCD液晶顯示接口電路

Fig 3-6 Liquid Display Interface Circuit

3.8操作控制接口

操作控制子產品是智能俄羅斯方塊遊戲系統的輸入器件。控制器包括六個按鍵,分别為:向左/速度遞減、旋轉、向右/速度遞減、暫停、快速下降、确認。如圖2-8所示為控制器的接線圖。與單片機的具體接口可根據實際設定。

基于單片機的俄羅斯方塊遊戲機設計1 緒論2 方案設計3 系統硬體平台設計4 系統軟體平台建構

圖檔3-7 控制子產品接口

Fig 3-7 Control Interface

4 系統軟體平台建構

4.1μVision簡介

μVision是德國Keil公司開發的單片機IDE軟體,最初主要用于8051系列單片機,目前也有支ARM系列單片機的專用版本MDK-ARM。本設計使用的是keilμVision3版本的開發軟體進行程式開發。

4.2設計方案論證

4.3俄羅斯方塊遊戲設計

4.3.1遊戲功能簡介

俄羅斯方塊遊戲的規則很簡單,當方塊從螢幕上方落下來時,玩家控制方塊的位置以及旋轉方塊,巧妙地安排布置達到充分利用螢幕空間的目的。每當螢幕的一整行被方塊排滿時,作為獎賞,整行從螢幕上消失,剩餘的方塊依次往下降一行。當方塊堆積達到無法再落下方塊的時候,遊戲結束。本設計中遊戲主要的功能點包括:

(1)每4個小方塊可以組合成一組方塊群,遊戲共有7種方塊群,每次随機産生一種;玩家使用向左、向右、快速向下這些按鍵控制方塊的位置,旋轉按鍵控制方塊順時針旋轉。在主要制搖桿上還有退出、暫停按鈕,可以實作随時切換到啟動時的狀态和暫停遊戲的功能。

(2)在程式設計中加入了遊戲難度(即方塊的下落速度)選項,來讓玩家自己決定遊戲的難度,同時每消除三十行,系統會将遊戲難度(即方塊的下落速度)加一,來增加遊戲的多樣性。這樣不僅豐富了俄羅斯方塊遊戲的功能,而且使其更具趣味性。

(3)在遊戲的運作過程中,玩家通過留個按鍵進行操作,每消去一行,系統就給玩家加一分,在方塊到頂端後,遊戲結束,系統會結算并顯示出玩家的遊戲分數。

4.3.2 系統界面的設計

(1)菜單選項界面

當玩家将本設計的作品上電啟動後,系統首先在LCD顯示器件上呈現一個動态的開機動畫。然後,系統會提供遊戲難度(即方塊的下落速度)的選擇界面,通過按鍵“向左”和“向右”可以對遊戲的難度(即方塊的下落速度)進行選擇。通過“确認”按鍵可以确定自己的選擇并開始遊戲

(2)遊戲界面

遊戲的界面主要提供了:遊戲區域、顯示分數、顯示速度、下個圖形,按鍵提示等部分組成,顯示了玩家在遊戲中所需的基本資訊。

基于單片機的俄羅斯方塊遊戲機設計1 緒論2 方案設計3 系統硬體平台設計4 系統軟體平台建構

圖4-1 遊戲界面

Fig4-1 Game interface

4.3.3 遊戲系統“枚舉算法”概述

本文繞開了澀難懂、比較複雜的“矩陣算法”,提出了另一種“枚舉算法”來實作這個經典遊戲。“枚舉算法”沒有複雜的數學理論、避免了在程式中大量使用矩陣運算公式,設計思路清晰、明了,非常适合遊戲設計的初學者了解和實作。

所謂枚舉算法,就是直接枚舉出遊戲中各圖塊的基本形狀和它們的旋轉形狀,然後控制每一種不同形狀的方塊在遊戲戲中的産生、移動、旋轉、落下、填滿和清除等遊戲過程。

4.3.4 俄羅斯方塊造型設計的方法

衆所周知,俄羅斯方塊一般有七種基本形狀,每個基本形狀都由4個正方形的小方塊構成。利用小方塊不同的擺放位置,可産生19種旋轉型圖塊。這七種圖形分别是“I型”、“L型”、“反L型”、“Z型”、“反Z型”、“口型”、“T型”。如下圖所示。

基于單片機的俄羅斯方塊遊戲機設計1 緒論2 方案設計3 系統硬體平台設計4 系統軟體平台建構

圖4-2:方塊模型

Fig4-2 Square model

本系統在構造19個方塊模型時的思路是:定義一個數組,用以存儲各個模型中4個小方塊的頂點坐标。比如L型,其資料結構為{0,0,0,4,0,8,4,8}。其中,每兩個資料為一個小正方形的列、行坐标,如下圖所示。由圖可知,整個界面的坐标原點在左上角,分别向右、向下作為橫軸的正方向和縱軸的正方向。圖中每一格代表了LCD12864中的連續四行,第1格的坐标是(0,0);第2格的坐标是(0,4);第3格的坐标是(0,8);第4格的坐标是(4,8);其它圖塊也按此方法編輯數組内容。

基于單片機的俄羅斯方塊遊戲機設計1 緒論2 方案設計3 系統硬體平台設計4 系統軟體平台建構

圖4-3  L型

Fig4-3 L Shape

4.3.5 随機産生俄羅斯方塊的方法

(1)産生随機數的理論依據

為了實作随機落下各類方塊圖形,遊戲過程式中必須抽取随機數來确定方塊的類型。随機數是一個既簡單又複雜的問題。

本設計采用衆所周知的線性疊加法,雖然沒有完美的方法産生随機數,不過線性疊加法是一個合适的方法,它徹底解決了8位機随機數的問題。如果從一個足夠長的數字序列中的某一個點取出一邊串的數字,那麼這些數字就看似随機。這個開始的點(數字)叫做種子。如果從相同的點(種子)開始,将會得到相同的數字,這是因為我們是從固定的序列中取數字(是以叫僞随機)。但這卻是一個有用的特性,我們可以每次從不同的點取數,即改變種子,進而可以實作真正的随機。

(2)“線性疊加法”的概況

“線性疊加法”其實隻涉及二個内容即:乘法和加法。隻需三個步驟即:第一,為了取得新的種子,舊的種子與一個常數A相乘;第二,所得的結果和第二個常數C相加;第三,新的種子就是第二步結果的低32位。保留低32位很重要,用來獲得下一個種子。計算公式為:

種子=A*種子+C

此公式在幾何圖中表示為一條直線,而且新種子由舊種子反複相加得來,是以叫線性疊加。随機函數的關鍵在于選擇優秀的“常數A”(也叫乘數A),其實也就是選擇了一個固定的數字序列。“常數C”,不像乘數A那樣重要,但是一定是個奇數。事實上,C可選1。因為奇數(舊的種子)乘奇數(乘數A)是奇數,再加奇數(常數C)将會是一個偶數學偶數(舊的種子)乘奇數(乘數A),加奇數(常數C)将會是一個奇數。如此種子會在奇數和偶數之間轉變。因為種了的變化足夠随機,是以種子的值可以作為8位或16位随機數。

(3) Keil C51中“線性疊加法”的實作方法

在Keil C51中生成僞随機數需要用到兩個函數,一個是srand(unsigned int seed),一個是rand()。首先給srand(unsigned int seed)提供一個種子,該種子為unsigned int類型,其取值範圍從0到65536,srand(unsigned int seed)根據這個種子會由上述特定的公式生成一個随機數序列;然後調用rand(),它會依次從這個序列中傳回一個數,其值在0 到32767之間。因随機數函數rand()函數實際上是線性随機的,如果在不指定srand(unsigned int seed)的種子的情況下,它每次都使用預設的種子,是以生成的序列會是同一個,是以會取到相同的數字序列。這可能會導緻每次重新運作遊戲時其随機數結果都是一樣的。為了解決該問題,本設計在玩家進入遊戲時讀取按鍵按下瞬間定時器T0的計數值,作為srand(unsigned int seed)的種子。進而實作真正的随機。

(4)随機數程式流程圖

下圖為随機數程式的流程圖

基于單片機的俄羅斯方塊遊戲機設計1 緒論2 方案設計3 系統硬體平台設計4 系統軟體平台建構

圖4-4  随機數程式流程圖

Fig4-4 Ramdom process flow program diagram

4.3.6 俄羅斯方塊平移的實作方法

    方塊産生後,需要用全局變量來儲存方塊在遊戲map區中的行坐标和列坐标。方塊的平移包括左移和右移兩種情況,無論那種情況都要首先進行合法性判斷。

(1)俄羅斯方塊平移特性

在本設計中規定當按下一次左移或右移按鍵時,map區中的目前圖塊就左移或右移一個正方形的寬度。而一個小正方形的寬度,則對應着LCD12864中的4列。

(2)平移合法性判斷

平移的合法性判斷經較簡單,隻需判斷它旁邊相鄰位置是否被填充即可。

(3)平移算法的實作

在程式中,當有任意一個平移按鍵被按下時,系統接收到信号,然後調用平移函數進行判斷其合法性,得到該函數的傳回值為1後,再進行平移操作。其程式流程下圖所示。

基于單片機的俄羅斯方塊遊戲機設計1 緒論2 方案設計3 系統硬體平台設計4 系統軟體平台建構

圖4-5  平移算法流程圖

Fig4-5 Translation algorithms flowchart

4.3.7 俄羅斯方塊旋轉的實作方法

(1)俄羅斯方塊旋轉圖形概況

方塊旋轉是一個遊戲實作的關鍵問題,實作旋轉的數學方法有多種,如矩陣變換法、枚舉法、索引法等。本文前面已經論述了此次設計采用枚舉的方法,對19種俄羅斯方塊造型進行構造。遊戲過程中,每一種基本方塊都要做旋轉控制,于是就産生了旋轉後的方塊形狀,本文将其稱為“旋轉型”。

基本型中的“I型”,隻有一種旋轉型,即由豎直旋轉90度後成為水準。是以,基本型加上一種旋轉型,共有兩種形狀。

基本型中的“L型”和“反L型”有三種旋轉型,将它按順時針每旋轉一個90度就産生一種旋轉型,可以旋轉三次,得到三種不同的旋轉型,是以,它的三種旋轉型加上其基本型,“L型”和“反L型”方塊分别有四種形狀。

基本型中“Z型”和“反Z型”可以順時針旋轉一次90度,加上他們的基型分别有兩種形狀。

基本型中的“T型”有三種旋轉型,将他按順時針旋轉一個90度就産生一種旋轉型,它可以旋轉三次,得到三種不同的旋轉型,是以,它的三種旋轉型加上其基本型,“T型”方塊共有四種形狀。

基本型中的“口型”方塊沒有旋轉型,在遊戲中隻有一種形狀。

綜上所述,七種基本型方塊,因旋轉産生了不同的旋轉型,這些旋轉型加上他們的基本型,整個遊戲中,共有19種不同的方塊形狀。

本設計實作旋轉操作的具體方法,可分為兩類,一類是I型的旋轉政策;另一類則是其餘17種基本型的旋轉政策。

(2)旋轉合法性判斷

方塊做順時針旋轉,每次旋轉90度。本設計規定隻要旋轉後到達的地方未被填允,方塊就可以進行旋轉操作。

(3) I型的旋轉政策

為了在視覺上實作I型的順時針旋轉,本設計采用位置錯落的方式來實作。其具體過程下圖所示。

基于單片機的俄羅斯方塊遊戲機設計1 緒論2 方案設計3 系統硬體平台設計4 系統軟體平台建構

圖4-6  I型的旋轉方法

Fig4-6 The rotation method of I shape

當落下的圖塊是圖①所示時,其旋轉周期為 ①——②——③——④——①。

當落下的圖塊是圖②所示時,其旋轉周期為 ②——③——④——①——②。

之是以把I型的旋轉變換單獨拿出來讨論,是因為I型隻有基本型和旋轉型共兩種圖塊。如果在目前位置直接按這兩種圖塊的坐标數組進行圖形切換,則無法實作順時針旋轉的視覺效果。是以,在旋轉處理程式中,當要旋轉的目前圖塊為I型及其旋轉型時,就要改變目前列、行這兩個全局變量的值。

(4)其餘17種基本型的旋轉政策

除了I型的旋轉比較複雜外,其餘17種類型的方塊隻需按各自旋轉的順序在目前位置用已經編輯好的坐标數組來實作旋轉即可。

4.3.8 俄羅斯方塊下移的實作方法

    在整個遊戲過程中,方塊是不斷向下運作的,其下移特性為:方塊每次下移的格數對應着LCD12864螢幕中的一行。具體程式實作流程下圖所示。

基于單片機的俄羅斯方塊遊戲機設計1 緒論2 方案設計3 系統硬體平台設計4 系統軟體平台建構

圖4-7 下移判斷程式流程圖

Fig4-7 Moves down judgment program flowchart

4.3.9 滿行檢測及消行功能的實作方法

 随着方塊的不斷累積,方塊每次下落到不能再運動時,系統就會檢測遊戲map區,當檢測到map區中某一行堆積滿後,系統就消去此行,作為獎勵,其上方的方塊群則依次下落一行。系統滿行檢測和消行功能是通過“滿行檢測及消行”函數實作的,即在每個圖塊落定和下一個圖塊未出來之前,按頁掃描遊戲map區,每半頁算一行。若檢測到某行被填滿,則消去此行,并将其上方的圖塊往下移動相應的行數。

具體程式實作流程如下圖所示。

基于單片機的俄羅斯方塊遊戲機設計1 緒論2 方案設計3 系統硬體平台設計4 系統軟體平台建構

圖4-8 滿行檢測程式流程

Fig 4-8 Full line detection processes

4.3.10 遊戲積分的計算方法

在遊戲系統中,積分展現了玩家在此次遊戲中的操作情況。本遊戲系統加入了積分功能,玩家每消去一行,就能獲得1個積分,最終會在遊戲過程中進行結算并在結束時回報給玩家。

基于單片機的俄羅斯方塊遊戲機設計1 緒論2 方案設計3 系統硬體平台設計4 系統軟體平台建構

圖 4-9 積分系統程式流程圖 

Fig 4-9 Score system program flowchart

繼續閱讀