




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、基于單片機的俄羅斯方塊游戲摘 要俄羅斯方塊作為最經典的電子游戲之一,它曾經引起的轟動真是不容小覷。本設計是在12C5A60SR單片機的基礎上利用C語言編程,做出實物電路圖來模擬俄羅斯方塊小游戲的設計。游戲需要利用按鍵控制方塊運動,玩家可以以90度為單位旋轉方塊,以格子為單位左右移動方塊,當區域中某一行全部由方塊填滿時,則該行會消失并記分,同時消除的列數越多,得分越多;當方塊堆到區域最上方而無法消除時,游戲結束。游戲設計主要分為硬件電路設計和源代碼編寫兩部分。對于硬件電路,有必要充分了解核心單片機的外部接口功能,液晶顯示器需要處理的邏輯關系和它控制原理,以及鍵盤設置所需的程序。而對于編程方面首先
2、定義一個二維數組確定整個區域,了解游戲中所需要用到的一些特殊的函數,然后判斷區域是否有方塊,還要判斷方塊落下后,一行的空格是否填滿或者整個區域是否填滿等,不斷的按照這樣的方法循環掃描。 實際運行表明,該設計可以實現基本的游戲功能,達到游戲的目的。 【關鍵詞】12C5A60SR;LCD液晶;C語言Tetris game based on single chip microcomputer Abstract Tetris is one of the most classic electronic game, it had caused a sensation is really can not b
3、e underestimated. This design is the use of C programming language based on 12C5A60SR microcontroller, design the physical circuit diagrams to model the Tetris game. The game needs to use the keys to control block movement, game player can be 90 degrees rotate, by a lattice units moving boxes around
4、, when the region in a row are filled by the box, the guild to disappear and score, the number of columns, and eliminate scores more; when the box at the top of pile to areas not to eliminate, the end of the game. Game design is divided into hardware circuit design and source code in two parts. For
5、the hardware circuit, it is necessary to fully understand the external interface functions of the core MCU, LCD need logic processing and its control principle, and procedures required for keyboard settings. For programming the entire region defined first determine a two-dimensional array, understan
6、d some special function required in the game, and then determine whether to judge the regional block, block falls, a row space is filled or the whole area is filled, circular in accordance with this method of scanning time. The actual operation shows that, the design can achieve the basic game funct
7、ions, achieve the goal of the game.【Key words】 12C5A60SR; LCD liquid cryst; C language目 錄 1 緒 論1 1.1 課題背景1 1.2 選題意義及其概況12 游戲需求及流程分析3 2.1 游戲組成及規則3 2.2 俄羅斯方塊工作流程圖33 游戲開發環境介紹4 3.1 單片機簡介4 3.2 KEIL軟件介紹7 3.3 PROTEL DXP軟件介紹 74 軟件設計8 4.1 軟件設計概述8 4.2 軟件設計重要細節85 硬件電路設計11 5.1 組成設備11 5.2 電路設計11 5.3 焊接與調試146 游戲測
8、試及結果157 總 結17參考文獻18致 謝191 緒論1.1 課題背景 隨著科技的進步,電腦、手機、掌上游戲機(Play Station Portable , PSP)PSP等電子產品性能越來越好的同時,電子游戲已經成為越來越受歡迎的娛樂方式,現在幾乎成了一個不可或缺的精神食糧,甚至有許多人認為,電子游戲已經不僅是一種娛樂,也成為了一種文化現象。電子游戲是一個組合動畫,音樂,故事情節為一體的游戲,涉及多個行業。電子游戲有著多種分類方式,一般分為網絡游戲、電腦游戲、電視游戲、街機游戲、便攜游戲和電子競技等。一般來說電子游戲具有模擬性和互動性兩種性質,模擬性指人們對現實世界或思維世界的模擬,互動
9、性則指人與機器之間產生的一種關系。凡事都有兩面性,電子游戲也不例外,它有利也有弊,只要不沉迷其中,還是能作為一種很好的娛樂方式的。 俄羅斯方塊作為最經典的電子游戲之一,它曾經引起的轟動真是不容小覷。它上手極其簡單,規則很簡單卻又變化無窮,要熟練地掌握其中的操作與擺放技巧還是需要一定時間的,作為家喻戶曉的游戲,它的受歡迎程度可以說是史上任何一款游戲不能比擬的1。顧名思義,俄羅斯方塊自然是俄羅斯人發明的,這位偉大的發明家名叫做Alex Pajitnov。現在玩的人雖然很少了,但目前流行的許多游戲上都有它的身影,而且對我們90年代的人來說就是整個童年。因此,對它的研究,無論從技術上還是社會意義上都是
10、很有價值的。1.2 選題意義及其概況 電子游戲誕生于20世紀末,這種娛樂方式已經成為新世紀不可或缺的時尚生活。根據整個世界的娛樂性行業來說,游戲產業已經顯示出優于其他娛樂業的發展勢頭。電子游戲最初產生于美國,1971年,一個麻省理工學院的學生設計了世界上第一個服務游戲機(俗稱街機的街機游戲),被稱為“計算機室”2。雖然剛開始由于市場原因這款游戲最終以失敗告終,但它還是開啟了電子游戲的發展之旅。電子游戲在中國出現至今已20多載,期間經歷過許多風風雨雨,一路坎坷,現在與電子游戲發達的韓國、日本、美國等國家相比仍然存在著比較大的差距。 電子游戲的發展與計算機是分不開的。現如今的計算機系統正朝著三個方
11、向發展:巨型化、網絡化和單片化,用以解決復雜系統計算和高速數據處理的依然是巨型機,所以,巨型機目前努力在朝高速及處理能力方向發展3。單片機剛出現時,英特爾公司為其命名為嵌入式微控制器(Embedded Microcontroller Unit,EMCU) ,因為它可以嵌入到各種儀器、設備中區,這也是單片機最明顯的優勢,這一點巨型機和網絡是做不到的。 單片機的應用很廣泛,家用電器、辦公室自動化、智能產品、商業營銷、工業自動化等都有它的身影,如今在游戲領域里單片機的作用也愈發明顯。雖然用單片機來設計一個簡單的俄羅斯方塊游戲程序似乎有點大材小用,但這僅僅是一個單片機在嵌入式游戲方面的簡單應用,正因為
12、它的前景無可預計,所以才有這個設計,此次設計僅僅是為了舉一個單片機在游戲上應用的一個簡單例子,它就可以很好的說明單片機功能的強大,更高的可控性和集成度高的好處,隨著計算機技術、通信技術和軟件技術的迅猛發展3。再加上3C產業(計算機、通訊、消費電子)的合成及3G移動通信時代的到來,嵌入式軟件發揮了更加重要的作用,它的發展為絕大多數電子設備注入了新的活力,各種裝備與設備上由于有了嵌入式系統軟件的加入,大大地推動了其行業滲透性應用,嵌入式技術不僅提高了產品的技術含量,更成為產品增值的關鍵,在整個軟件產業中占據了重要地位,并受到世界各國的廣泛關注,如今已成為信息產業中最為耀眼的“明星”之一。2 游戲需
13、求及流程分析2.1 游戲組成及規則 1)游戲組成 一個用于擺放方塊的平面虛擬場地,其標準大小:長為12,高為20(以每個小正方形為單位)4;一組由四個小正方形組成的規則圖形,總共有七種;一個由四個按鍵組成的鍵盤,上下左右分別控制變化、左移、右移和下落。 2)游戲規則 游戲需要使用按鍵控制方塊運動,方塊不僅可以以90°為單位旋轉,還能在格子單元內左右移動;方塊移到區域最底端或落到其他方塊上時,就會固定在該處,新的方塊出現在區域頂端開始落下;當區域中某一行被方塊填滿,則該行會消失并記分,同時消除的列數越多,得分越高;當屏幕被方塊填滿時片消除不了了,游戲結束。游戲還會提示下一個方塊,如果玩
14、家比較厲害可以根據提示來判斷本次方塊如何放置。2.2 俄羅斯方塊工作流程圖 游戲開始后,屏幕最頂端會隨機產生一個方塊圖形,將其交給圖形變量,再對圖形進行變化,再判斷圖形的位置,沒有到底就逐次下降一行直到最底端;如果圖形到底了就檢測一行是否被方塊填滿,填滿了進行清除并記分,沒有就檢測整個屏幕是否被方塊填滿,填滿了就進行清屏游戲結束,沒有填滿就回到進行圖形變化的步驟即可。3 游戲開發環境介紹3.1 單片機的簡介 單片機全稱單片微型計算機,又稱微控制器,是把中央處理器、存儲器、定時器、計數器、各種輸入輸出接口等都集成在一塊集成電路芯片上的微型計算機,它是微型計算機的一個重要分支,也是頗具生命力的機種
15、。 單片機主要用于測試和控制領域,按它的適用范圍可分為通用性和專用型兩大類。通用性就是沒有限制,都可以兼容,二專用型是針對特定的要求來設計的,目前,單片機經過三代的發展,正在向低電壓,低功耗,低成本,多功能,高性能,大容量存儲,強大的I / O功能和良好的結構相容性方向。單片機應用的重要意義還在于它從根本上改變了傳統的控制系統設計思想和設計方法,以前,必須使用模擬或數字電路才可以實現,現在只需要微型單片機就可以實現5。本次論文的重點就在于單片機的最小系統部分,這次選用的是Atmel公司推出的常用芯片12C5A60SR,主要是它不僅價格便宜,而且是采用高密度非易失性存儲器技術制造而成,與工業80
16、C51產品指令及引腳完全兼容,下面詳細介紹一下這款單片機: 1) 12C5A60SR單片機的主要特點12C5A60SR是一種低功耗、高性能的半導體集成電路8位微控制器,具有8K字節在系統可編程Flash存儲器6 。它是用Atmel公司高密度非易失性存儲器的技術制造而成,與工業80C51產品指令及引腳完全兼容。片上的Flash允許程序存儲器在系統可編程,也適于常規編程器,單芯片擁有8位中心處理器(Central Processing Unit ,CPU)和在系統可編程的Flash,這使得12C5A60SR為眾多嵌入式控制應用系統提供高靈活、超有效的解決方案7。它具有雙列直插式封裝 、特殊引腳芯片
17、封裝 、薄塑封四角扁平封裝三種封裝方式,本設計選用雙列直插封裝的單片機,此種封裝適合印制線路板(Printed Circuit Board,PCB)的穿孔安裝,也容易布線,操作起來很方便。12C5A60SR單片機的由8位CPU和在系統可編程Flash、晶片內部具時鐘振蕩器(工作頻率高達12MHz)、8KB 的內部程序存儲器(Read-Only Memory,ROM)、256字節的內部數據存儲器(Ramdom Access Memory ,RAM)、32 個可編程I/O口線、8個中斷向量源、三個 16 位定時器/計數器、三級加密程序存儲器以及全雙工異步串行通信口等組成8。 2)12C5A60SR
18、單片機的引腳簡介 圖3-1 12C5A60SR單片機引腳圖表3.1 12C5A60SR單片機引腳功能表 3) 12C5A60SR的晶振電路 顧名思義,晶振也就是晶體振蕩器,它在單片機中充當著心臟的角色。它的主要作用就是通過晶振來產生時鐘周期,時鐘周期越小那么他對應的時鐘頻率就越大,時鐘頻率一大那么單片機的運行速率也就越快,簡單來說,沒有晶體就無法產生晶振,沒有晶振就無法產生時鐘頻率,沒有時鐘頻率就無法執行程序代碼,無法執行程序單片機不能工作。所以通常為了保持各模塊保持同步,一個系統共用一個晶振。 4) 12C5A60SR的復位電路 復位電路,簡而言之就是把電路恢復到初始狀態,就像計算器的清零按
19、鈕的作用一樣。就目前來說,單片機復位電路主要分為微分型復位電路、積分型復位電路、比較器型復位電路和看門狗型復位電路四種。它的基本功能是:系統上電時提供復位信號,直至系統電源穩定后,撤銷復位信號。為可靠起見,電源穩定后還要經過一定的延時才撤銷復位信號,以防電源開關或電源插頭分合過程中引起的抖動而影響復位。選用的微處理器復位電路中所需要的參數振動的穩定性保證復位后持續時間大于2個機器周期。12C5A60SR單片機是整個開發板的控制中心,我們在選用電路時應該保證它的可靠性和抗干擾性。在特定的電子設備的選擇,應先確定它的參數,有參數作參考會比較準確。 3.2 Keil 軟件介紹單片機開發中除必要的硬件
20、外,同樣離不開軟件,Keil是眾多單片機應用開發的優秀軟件之一,它集編輯、編譯、仿真于一體,支持匯編,PLM 語言和C語言的程序設計,界面友好,易學易用。隨著單片機開發技術的不斷發展,從普遍使用匯編語言到逐漸使用高級語言開發,單片機的開發軟件也在不斷發展,Keil 軟件是目前最流行開發 MCS-51 系列單片機的軟件,這從近年來各仿真機廠商紛紛宣布全面支持 Keil 也看得出來9。掌握這一軟件的使用對于使用 51 系列單片機的愛好者來說是十分必要的,如果你使用C語言編程,那么 Keil 幾乎就是你的不二之選(目前在國內你只能買到該軟件、而你買的仿真機也很可能只支持該軟件),即使不使用C語言而僅
21、用匯編語言編程,其方便易用的集成環境、強大的軟件仿真調試工具也會令你事半功倍。3.3 Protel DXP軟件介紹 Protel DXP 2004是澳大利亞Altium公司于2002年推出的一款電子設計自動化軟件。它的主要功能包括:原理圖編輯、印制電路板設計、電路仿真分析、可編程邏輯器件的設計。用戶使用最多的是該款軟件的原理圖編輯和印制電路板設計功能。4 軟件設計4.1 軟件設計概述針對俄羅斯方塊這個游戲,程序編寫方面主要是通過定義好內部數組,調用隨機函數隨機產生的各種方塊。以及根據游戲規則和選關最終確定下降的時間并作出算法。對于編程方面首先定義一個二維數組確定整個區域,以
22、及要了解游戲中所需要用到的一些特殊的函數,然后判斷區域是否有方塊,通過按鍵改變下落的位置、速度和方塊的變化形狀。每執行一步單片機對液晶刷一次屏,并為下一次顯示做準備(即顯示下一個下落的方塊)。還要判斷方塊落下后,一行的空格是否全部填滿或者所有方塊是否全部填滿空格,然后調用加法器把所得分數進行累加,把分數存入數組并用液晶進行顯示。如果列有滿格話游戲就game over,如果在相應時間得到一定分數自動進入下一關,不斷的按照這樣的方法循環掃描,進行相應的工作。由于源程序過長,所以這里除了最關鍵的程序外就不一一陳述了10。4.2 軟件設計重要細節 1)工作區域和方塊定義俄羅斯方塊的工作區域可以利用數組
23、進行存儲,即uchar xdata board2014 = 0; 用于判斷方塊區域是否已被占用(1表示被占用;0表示未被占用)。俄羅斯方塊形狀總共分為5大類,總共又有19種形狀,每個形狀都有四個小正方形組成,如何對這些方塊進行存儲是很重要的事情。我們這里采用數組和坐標的形式,具體如下圖4-1和4-2所示:圖4-1 圖4-2 2)方塊的生成、移動和旋轉方塊的產生很簡單,調用一個隨機函數就可以了。圖形的移動和旋轉就麻煩一點,需要先判斷四周有沒有障礙再進行變化。我們這里同樣利用坐標,就是先計算出方塊的中心點(即X軸、Y軸坐標),再計算X軸和Y軸的最大值,在可行范圍內方塊便可以進行相關變化。 3)碰撞
24、問題這應該是整個程序中最需要考慮的問題吧,與上一點無獨有偶,在分別檢測四個小正方形在改變后的實際位置后,再判斷是否已經有障礙物(墻壁或方塊)存在。 4)消除行滿和記分行滿后進行消除很簡單,只需要掃描底板數組是否出現滿行就可以了。因為之前有進行坐標定位,這個只需要存儲Y行坐標就可以進行消除。記分更簡單,直接用一個加法器就可以了;消除多行的時候采用乘法器。 5)顯示下一個方塊產生方塊的時候我們是采用隨機函數,這里顯示下一個方塊我們直接掉用隨機函數種子就可以了。 6)至于其他游戲初始化、刷新界面、開啟和暫停游戲、游戲結束等問題這里就不一一累贅了,只是簡單寫出它調用的函數。 (1)標記底板用于判斷底板
25、狀態: void Game_tetris_Sign_board(uchar x, uchar y, uchar *p) x,y-需標記底板的起始坐標;0-取消標記,1-標記;*p-被標記方塊的數組名;(2)方塊橫向或縱向最大值: uchar Game_tetris_Count_max_value(uchar sel, uchar *p) Sel-形參;0-x軸方向,1-y軸方向 (3)游戲界面初始化void Game_tetris_Interface_init(void) (4)判斷方塊能否移動:void Game_tetris_Judge_move(void) 形參:dir-方向判斷;(1-
26、left, 2-rignt,3-down)(5)判斷能否方塊旋轉:void Game_tetris_Judge_spin(void) 返回值:0能,1不能(6)方塊快速下移:void Game_tetris_Cube_move_down_rapid(uchar sel)(7)刷新顯示界面:void Game_tetris_Refresh_interface(void)(8)顯示分數:void Game_tetris_Show_score(void)(9)顯示等級:void Game_tetris_Show_level(void)(10)開啟和暫停游戲:void Game_tetris_Star
27、t_suspend(void)(11)判斷游戲是否結束:uchar Game_tetris_End(void)(12)游戲升級:void Game_tetris_Upgrade(void)5 硬件電路設計5.1 組成設備12C5A60SR單片機一塊、LCD液晶顯示器一塊、獨立按鍵六個以及一些細小元件和輔助電路。5.2 電路設計這次設計的俄羅斯方塊最主要的部分就是單片機的最小系統的設計,而單片機的最小系統主要由單片機、晶振電路和復位電路、電源以及輔助電路等組成。顯示接口電路的設計是本設計最重要的是,對不同系統的功能需求,界面設計也不同。最初的設計是在Keil和Proteus聯合進行仿真,利用C語
28、言編程,后期實際焊接生產的。這次的硬件電路采用單片機12C5A60SR控制模塊提供電源,以點陣式LED顯示,采用獨立按鍵,直接在I/O口線上接上按鍵開關,因為設計時精簡和優化了電路,所以剩余的資源還比較多,上下左右四個按鍵分別控制旋轉、左移、右移和下降11。硬件設計圖如圖5-1所示:圖5-1硬件電路設計圖 1)供電和指示電路沒有供電整個系統就無法運行,所以有個穩定的供電模塊是系統平穩運行的前提和基礎。電源一般分為兩種,一種是利用USB數據線來供電,一種是直接采用+5V的電池供電,本設計采用USB供電。指示電路接入了發光二極管,圖5-2中R10為LED的限流電阻給發光二極管提供電流。當電源接通正
29、常工作時,發光二極管會正常發光,否則不會正常工作12。 圖5-2 供電和指示電路圖 2)晶振電路和復位電路單片機的復位是靠外電路實現的,在時鐘電路工作后,只要在單片機的RST引腳上出現24個時鐘振蕩脈沖以上的高電平,便可以實現到初始化狀態。為了保證可靠性,通常RST引腳保持在10ms以上的電平,復位電路連接圖如圖5-3所示。單片機是11.0592MHz晶體和30pF電容器,是一種振蕩電路。晶振的作用就是通過晶振產生時鐘周期,從而來執行程序代碼,這也是單片機不可或缺的13。圖5-3 晶振電路和復位電路圖 3)顯示器電路 顯示器部分是由HD61202液晶顯示控制驅動器和JM12864J液晶顯示器組
30、成的。HD61202液晶顯示控制驅動器是一種點陣圖形輸出液晶顯示控制器,它隱藏在64×64顯示RAM中的數據,每一個對應于光明和黑暗的狀態的液晶屏的點的RAM。它有64列驅動器HD61202讀、寫、輸出,操作序列與68系列單片機是一致的,所以它可以直接連接到68系列單片機的接口。占空比為1/ 64 / 32-1。JM12864J是使用HD61202及其兼容控制驅動器作為列驅動器,同時使用HD61202作為線驅動液晶顯示模塊。因為HD61202不與微處理器連接,所以只要電源線驅動信號和同步信號就可以了。 顯示器是本設計不可或缺的部分,俄羅斯方塊設計需要用到點陣顯示,所以采用LCD進行顯
31、示。在液晶顯示操作,單片機模擬I/O端口的讀寫時序使用14。圖5-4 液晶顯示器電路圖 4)按鍵控制電路按鍵部分采用單獨的六個按鍵,上下左右分別控制方塊的變化、下落、左移和右移,另外兩個控制開始和返回。 當按鍵按下時,與主控芯片連接的端口變為低電平,按鍵松開則也升為高電平。按鍵具有自動彈回的功能,當我們按下按鈕時,接點處于接通狀態;松開按鈕時,接點處于切斷狀態,此時mcu會自動讀取端口的變化來進行相應的操作。圖5-5 按鍵控制電路圖5.3 焊接與調試1)材料準備工欲善其事,必先利其器。焊接電路不僅僅是焊接幾個芯片幾塊板子如此簡單,核心在于電路的設計與調試。要做出實物,首先要選好元件,準備好輔助
32、工具。2)焊接注意事項電路焊接是一件簡單確有需要足夠細心的工作,如果焊接存在問題,那么即使電路原理圖再正確,也不可能得出理想的測試效果。器件的選型,管腳的次序、位置、連接方向,器件是否有損壞以及焊接的點、線是不是有斷開,電阻阻值是否正確準確、導線連接是否正確等問題都是需要注意的。另外在焊接的過程中操作方面也有很多問題要注意,烙鐵的溫度、焊接面是否光滑、焊點大小要合適、焊接時間不要太長、焊接順序基本上是從內到外先低后高等。焊接完成后還要剪掉多余的線頭,不平整的地方還要進行打磨。總而言之,要么不做焊接調試,要做就把它做好。3)電路調試個人認為電路調試的步驟是先檢查電源有沒有問題,再看看復位電路和時
33、鐘電路,最后再檢查總線之類的東西。在焊接硬件時,首先焊接電源部分,然后用萬用表進行供電測試,以及測試接地引腳的電壓是否正常,當全部正常時,才能裝上芯片。其次,調整輸入信號為零,然后調整電位器電阻,盡可能使芯片的輸出是零誤差,這樣各級電路才能正常工作,經過調試以后接通電源接可以開始游戲了。6 游戲測試及結果實物制作完成后,接通電源開始測試游戲。游戲開始后屏幕最頂端會產生一個方塊,按左鍵和右鍵方塊可以以格子為單位進行左右移動,按上鍵方塊可以互相變化,按下鍵方塊能夠加速下落(可以一直按著不動也可以間歇按鍵)。當方塊填滿一行時進行消除并進行記分;當方塊堆放至屏幕最頂端時,游戲結束。 圖6-1 俄羅斯方
34、塊實物圖1圖6-2 俄羅斯方塊實物圖27 總 結經過一個多月的時間終于完成了畢業設計,在設計的過程中,出現了許多問題,但在老師和同學的幫助下順利解決了。在本文中,詳細分析了俄羅斯方塊游戲的控制原理和詳細的設計過程。本游戲機已經達到了掌上娛樂的基本要求,但在設計上還是有需要改善的地方,比如游戲不能進行關卡選擇,游戲界面單一等等。整個畢業設計的過程還是挺曲折的,首先在整體框架上總是把很多程序顛三倒四導致浪費了許多時間。其次在硬件電路設計中,因為對LCD液晶顯示屏不熟悉所以困難重重,甚至在購買原材料時太粗心買了一塊帶字符庫的12864顯示屏,而我需要的是不帶字符庫的,著前前后后又花了許多時間來重新焊
35、接和調試。還有一個老大難的問題就是源程序設計,因為匯編自己不熟悉而且又有C語言基礎,所以最后還是選擇了編寫程序時較為復雜的C。這次設計中源程序、電路設計、電路仿真、實物制作和調試、游戲測試等這些過程真的深深讓我體會到要做好一件事真的要付出很多很多。當那些一個個麻煩問題接踵而至的時候,都想過放棄,但最終還是堅持了下來,沒有辦法,這是畢業的最后一道坎。雖然這次的畢業設計我自己花了很多心血,但是肯定還是有不足的地方,還很請各位老師給予指導和更正。參考文獻1 楊元強.酷比杯獲獎作品選登LEGO 俄羅斯“酷比杯”游戲策劃大賽,20072 Apress.Introduction to Visual Bas
36、ic Programming M.Professional Computing and Web Design,2006.3 張毅剛,彭喜元.單片機原理及接口技術((第六版)M.北京:人民郵電出版社,20084 高凌琴,陳青華.俄羅斯方塊游戲關鍵技術探討M.北京:中國青年出版社,20085 何立民.單片機高級教程(第1版)M.北京:北京航空航天大學出版社,20086 周潤景.keil在MCS-51&ARM7系統中的應用百例M.北京:北京電子工業出版社,20067陳溯鷹.C語言程序設計基礎教程 M.南京:南京大學出版社,20098譚浩強.C程序設計M.北京:清華大學出版社,20039張齊,
37、杜群貴著.單片機應用系統設計技術基于C語言編程M.北京:北京電子工業出版社,200410 51單片機在手持游戲機中的應用 期刊論文稿,2010-12-1611 游安弼,李玉岐.基于JavaBean組件模型的俄羅斯方塊M.全國第四屆Java技術及應用學術會議,200112 Jason Lam.J2ME&Gaming. Addison Wesley,200413單片機最小系統分析及應用.期刊論文稿,2009-514竇振中.單片機外圍器件實用手冊M. 北京:北京航空航天大學出版社,200315謝厚亮. AVR單片機的串行通信J. 電腦編程技巧與維護. 2011附 錄定義
38、俄羅斯方塊的結構體數組uchar code tetris_shape282 = /* shape-1* 口 口口口 口口* 口 口 口 口* 口口 口 口口口 */ 0x88,0xc0, 0xe8,0x00, 0xc4,0x40, 0x2e,0x00,/* shape-2* 口 口口 口口口* 口 口 口 口* 口口 口口口 口 */ 0x44,0xc0, 0x8e,0x00, 0xc8,0x80, 0xe2,0x00,/* shape-3* 口 * 口* 口 口口口口* 口*/ 0x88,0x88, 0xf0,0x00, 0x88,0x88, 0xf0,0x00,/* shape-4* 口
39、口* 口 口口 口口口 口口* 口口口 口 口 口 0x4e,0x00, 0x8c,0x80, 0xe4,0x00, 0x4c,0x40,/* shape-5* 口* 口口 口口* 口 口口*/ 0x8c,0x40, 0x6c,0x00, 0x8c,0x40, 0x6c,0x00,/* shape-6* 口 口口* 口口 口口* 口*/ 0x4c,0x80, 0xc6,0x00, 0x4c,0x80, 0xc6,0x00,/* shape-7* 口口* 口口*/ 0xcc,0x00, 0xcc,0x00, 0xcc,0x00, 0xcc,0x00, ; 計算方塊橫向或縱向的最大值;uchar
40、Game_tetris_Count_max_value(uchar sel, uchar *p) uchar i, j; uchar temp=0; uchar max_value=0; for(i=0; i<2; +i) temp = *(p+i); for(j=0; j<8; +j) if(temp & 0x80) switch(sel) case 0: if(j%4 > max_value) max_value = j%4; ; break; case 1: if(i*2+j/4 > max_value) max_value = i*2+j/4; ; br
41、eak; default: break; temp <<= 1; return (max_value+1);函數功能:游戲界面初始化;void Game_tetris_Interface_init(void)lcd12864_parallel_Init(); lcd12864_parallel_Clear_screen(0); Game_tetris_Draw_frame(); Game_tetris_Show_level(); Game_tetris_Show_score(); Game_tetris_Show_next_cube(); Game_tetris_Draw_cube
42、(cube_x, cube_y, tetris_shaperandom_value, 1); 判斷方塊能否移動;uchar Game_tetris_Judge_move(uchar dir, uchar *p) uchar i, j; uchar temp=0; uchar max_value=0; switch(dir) case 1: if(cube_x = 0) return 1; ; break; case 2: max_value = Game_tetris_Count_max_value(0, p); if(cube_x > 13-max_value) return 1; ;
43、 break; case 3: max_value = Game_tetris_Count_max_value(1, p); if(cube_y > 19-max_value) return 1; ; break; for(i=0; i<2; +i) temp = *(p+i); for(j=0; j<8; +j) if(temp & 0x80) switch(dir) case 1: if(boardcube_y+(i*2)+(j/4)cube_x+j%4-1=1) return 1; ; break; case 2: if(boardcube_y+(i*2)+(j
44、/4)cube_x+j%4+1=1) return 1; ; break; case 3:/下移; if(boardcube_y+(i*2)+(j/4)+1cube_x+j%4=1) return 1; ; break; temp <<= 1; return 0; bottom_sign=1;判斷能否方塊旋轉;uchar Game_tetris_Judge_move(uchar dir, uchar *p) uchar i, j; uchar temp=0; uchar max_value=0; switch(dir) case 1: if(cube_x = 0) return 1; ; break; case 2: max_value = Game_tetris_Count_max_value(0, p); if(cube_x > 13-max_value) return 1; ; break; case 3: max_value = Game_tetris_Count_max_value(1, p)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 網店合同解除協議書范本
- 井水供水合同協議書
- 銷售外包合同協議書
- 電腦租賃創新計劃書
- 健康管理創業項目計劃書
- 中國核廢料處置解決方案行業市場前景預測及投資價值評估分析報告
- 婚前夫妻忠誠合同協議書
- 門市租賃轉讓合同協議書
- 紫色城市品質時尚大氣商業計劃書模板
- 職業中等專業學校現代家政服務與管理專業指導方案
- 大班科學《神奇的中草藥》課件
- 信用修復申請書
- 全過程造價控制流程全圖
- 溫州7.23動車事故調查報告介紹課件
- RAL 勞爾色卡電子版
- 造價咨詢質量控制保證措施及服務質量
- 跳棋教學(課堂PPT)
- 火車過橋問題四年級(課堂PPT)
- MSA偏倚分析報告樣本
- 中國顱腦創傷顱內壓監測專家共識
- 起重機軌道和車輪硬度的關系
評論
0/150
提交評論