版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 《單片機原理及應(yīng)用》課程設(shè)計報告</p><p> 基于MCS-51單片機的俄羅斯方塊游戲設(shè)計</p><p><b> 目錄</b></p><p> 一、課程設(shè)計的目的4</p><p><b> 二、題目要求4</b></p><p>
2、<b> 三、原理概述4</b></p><p><b> 四、調(diào)試過程4</b></p><p><b> 五、驗收結(jié)果4</b></p><p><b> 六、個人體會10</b></p><p><b> 七、參考文獻1
3、0</b></p><p><b> 八、致謝10</b></p><p> 附錄一:外電路原理圖11</p><p> 附錄二:程序清單12</p><p><b> 一、課程設(shè)計的目的</b></p><p> 加深對單片機的理解,熟悉單片機的
4、原理,掌握單片機的編程方法與技巧</p><p> 靈活運用單片機的基礎(chǔ)知識,增強利用理論知識解決實際問題的能力</p><p><b> 二、題目要求</b></p><p> 1.驗收時,先在仿真機的LED上顯示自己學(xué)號的后6位,再進行相應(yīng)內(nèi)容驗收。</p><p> 2.能在單片機實驗箱通用板上的液晶顯示屏
5、(LCD)上玩俄羅斯方塊游戲,使用4*4鍵盤輸入,能夠完美實現(xiàn)俄羅斯方塊的基本游戲內(nèi)容,界面優(yōu)美,最后可以顯示分?jǐn)?shù)和級別,如果游戲失敗顯示“GAME OVER”,最后顯示本人姓名“YANG XIN”和學(xué)號“200911880”。</p><p><b> 原理概述</b></p><p><b> 1. 程序整體思路</b></p>
6、;<p> 單片機上的程序設(shè)計一般是一個大循環(huán)結(jié)構(gòu),對于俄羅斯方塊的程序設(shè)計,首先產(chǎn)生一個偽隨機數(shù),其范圍是0-6,分別對應(yīng)俄羅斯方塊中隨機產(chǎn)生的七種方塊,然后程序根據(jù)此數(shù)值所對應(yīng)的圖形模塊裝入RAM的固定區(qū)域內(nèi),緊接著將此圖像寫入LCD所對應(yīng)的顯示緩沖區(qū)中,顯示程序?qū)⒕彌_區(qū)內(nèi)的內(nèi)容顯示在顯示屏上,如果沒有控制鍵按下,圖形將自動向下移動。如果有鍵按下,程序?qū)⒏鶕?jù)按下的鍵來改變圖形存儲區(qū)的值,同時程序?qū)⑴袛鄨D形是否已到達邊
7、界,當(dāng)圖形最上層到達顯示區(qū)頂部,則游戲結(jié)束,此時將清除顯示緩沖的內(nèi)容,游戲重新開始。</p><p><b> 2.圖形顯示</b></p><p> QH12864T液晶顯示器一共有128*64個像素點,本程序中每個像素點用一個坐標(biāo)表示,左上角為(0,0),右下角為(128,64)。對于顯示類的基本操作是任意點亮一個點,熄滅一個點,任意點亮n個點,滅掉n個點,如
8、此一來游戲的第一個關(guān)鍵點就完成了。</p><p> 我們將RAM中選取一段為顯示緩沖區(qū),這里面的每一位對應(yīng)LCD上的的一個點,LCD將實時顯示緩沖區(qū)的內(nèi)容,也就是當(dāng)此緩沖區(qū)內(nèi)容一改變,LCD上看到的也會做出相應(yīng)的改變。同時游戲中的那些方塊被存放在一個類似于一維的數(shù)組之中,每一個方塊對應(yīng)四個小方塊,根據(jù)偽隨機數(shù)將這四個小方塊對應(yīng)的值裝入RAM固定的區(qū)域內(nèi)。如果要顯示方塊只需將這些方塊所對應(yīng)的點寫入緩沖區(qū)就可以了
9、。</p><p><b> 3.消層算法</b></p><p> 設(shè)置循環(huán)變量數(shù)R2=128,即總共要掃描128次,每一次循環(huán)過程中檢測此行是否已滿,也就是檢測這一行所對應(yīng)的存儲單元是否全為1,如果全為1則將此行消去,即將此行對應(yīng)的RAM清零。同時將此行上面RAM的內(nèi)容按每列依次下移,下移完之后重新令R2=0,又從第一行開始檢測。此行不全為零時只需令R2=R2
10、+1,直到R2=128消層過程結(jié)束。</p><p><b> 4.旋轉(zhuǎn)算法</b></p><p> 首先要確定一個旋轉(zhuǎn)中心,假如旋轉(zhuǎn)中心的編號是n,將n除以64,商是m存入R1余數(shù)是l存入R2,及時用商和余數(shù)建立坐標(biāo)系。此時若以此為旋轉(zhuǎn)中心的圖形需要旋轉(zhuǎn),則將每一個小方塊對應(yīng)編號除以64,商減去R1,余數(shù)減去R2,而每一個方塊一次將旋轉(zhuǎn)90度,所以有公式x1,
11、y1,x2,y2 , x2= - y1,y2= x1,其中x1,y1為旋轉(zhuǎn)之前的坐標(biāo),x2,y2為旋轉(zhuǎn)之后的坐標(biāo)。旋轉(zhuǎn)完之后將x2加上R1將y2加上R2,然后將x2乘以64再加上y2。執(zhí)行四次,此過程旋轉(zhuǎn)結(jié)束。</p><p><b> 調(diào)試過程</b></p><p> 1、學(xué)號顯示部分單獨調(diào)試</p><p> 這個在之前的很多實驗
12、中都有涉及,程序較為簡單,語句也不復(fù)雜,本實驗中才用的是并行動態(tài)顯示,調(diào)試一次成功。</p><p><b> 游戲程序調(diào)試相關(guān)</b></p><p><b> 驗收結(jié)果</b></p><p> 下圖為當(dāng)時的整個實驗裝置:</p><p> 實驗中,游戲隨機產(chǎn)生方塊</p>
13、<p> 按下控制鍵,方塊旋轉(zhuǎn):</p><p> 按下控制鍵,方塊加速下落</p><p> 方塊下落到底部,最底層被填滿:</p><p> 最底層填滿后,自動消去這一層:</p><p> 隨機產(chǎn)生下一個方塊,每次產(chǎn)生方塊完全隨機:</p><p> 最后一幅圖為游戲結(jié)束后,顯示所得分?jǐn)?shù),
14、每消去一行得到一分,顯示“GAME OVER”和游戲者姓名學(xué)號。</p><p> 本次實驗?zāi)J游戲者為本人YANG XIN(楊欣),學(xué)號(U)200911880</p><p><b> 六、個人體會</b></p><p> 在這次實驗過程中,特別是調(diào)試的時候,如果能夠順利排除BUG實現(xiàn)程序預(yù)定功能是最讓人開心的,這個過程也會讓我很
15、享受。但是如果由于一些搞不清楚的原因遲遲達不到目標(biāo),也是最讓人煩躁的。而其中的問題,只能漫無目的地去嘗試,無法在邏輯中得到答案,我個人遇到了這種狀況,確實很無奈。不知道是否是因為我的分析不到位,而實際上有一個合乎邏輯的答案在那里呢?</p><p> 這次課程設(shè)計,第一周主要是在修改程序的驅(qū)動部分,從第二周開始上機調(diào)試,用了差不多半個月的時間,最終也沒有成功調(diào)試出結(jié)果,實在很受打擊,讓我很沮喪。從單片機課程到單
16、片機實驗到如今的單片機課程設(shè)計,我感觸最深的一點就是:必須有耐心、足夠細心。單片機程序前前后后有不少聯(lián)系,可能前面用的某個變量跟后面重復(fù)、字與字節(jié)搞亂等等細小的問題,如果不能耐心、細心地去尋找,很難發(fā)現(xiàn)。</p><p> 最后,我還體會到了,硬件學(xué)習(xí)是編寫程序前最重要的部分,只有對所使用的硬件設(shè)備完全了解才能編寫出適合使用的程序,否則會做很多無用功,浪費很多時間和精力。以后一定要謹(jǐn)記這個道理!</p&g
17、t;<p><b> 七、主要參考文獻</b></p><p> 【1】《單片機原理及應(yīng)用》 姜志海主編</p><p> 【2】《MCS-51系列單片機原理及應(yīng)用實驗指導(dǎo)書》 </p><p><b> 八、致謝</b></p><p> 感謝黃勁老師的耐心指導(dǎo)!<
18、;/p><p> 感謝管理實驗室的老師多日來為我們開放實驗室!</p><p><b> 附錄一:電路原理圖</b></p><p><b> 按鍵與單片機連接:</b></p><p> 按照4*4鍵盤上的布置,游戲控制鍵分別為:Move_Left 8 ,Move_Right A,A
19、dd_Speed 9,Change_Shape D,Game_Star C,Game_Pause E</p><p> 液晶顯示器與單片機的連接:</p><p><b> 附錄二:程序清單:</b></p><p> ?。ㄒ虺绦蚍倍?,此處只列出.C文件程序,如果老師要看完成程序,請看電子檔報告)</p>&l
20、t;p><b> STARPUP.C</b></p><p><b> $NOMOD51</b></p><p> ;------------------------------------------------------------------------------</p><p> ; This
21、file is part of the C51 Compiler package</p><p> ; Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc.</p><p> ; Version 8.01</p><p><b> ;</b></
22、p><p> ; *** <<< Use Configuration Wizard in Context Menu >>> ***</p><p> ;------------------------------------------------------------------------------</p><p>
23、; STARTUP.A51: This code is executed after processor reset.</p><p><b> ;</b></p><p> ; To translate this file use A51 with the following invocation:</p><p><b>
24、; ;</b></p><p> ; A51 STARTUP.A51</p><p><b> ;</b></p><p> ; To link the modified STARTUP.OBJ file to your application use the following</p><p&
25、gt; ; Lx51 invocation:</p><p><b> ;</b></p><p> ; Lx51 your object file list, STARTUP.OBJ controls</p><p><b> ;</b></p><p> ;--------
26、----------------------------------------------------------------------</p><p><b> ;</b></p><p> ; User-defined <h> Power-On Initialization of Memory</p><p><
27、b> ;</b></p><p> ; With the following EQU statements the initialization of memory</p><p> ; at processor reset can be defined:</p><p><b> ;</b></p>
28、<p> ; <o> IDATALEN: IDATA memory size <0x0-0x100></p><p> ; <i> Note: The absolute start-address of IDATA memory is always 0</p><p> ; <i> The ID
29、ATA space overlaps physically the DATA and BIT areas.</p><p> IDATALEN EQU 80H</p><p><b> ;</b></p><p> ; <o> XDATASTART: XDATA memory start address
30、<0x0-0xFFFF> </p><p> ; <i> The absolute start address of XDATA memory</p><p> XDATASTART EQU 0 </p><p><b> ;</b></p><p> ;
31、 <o> XDATALEN: XDATA memory size <0x0-0xFFFF> </p><p> ; <i> The length of XDATA memory in bytes.</p><p> XDATALEN EQU 0 </p><p><b> ;
32、</b></p><p> ; <o> PDATASTART: PDATA memory start address <0x0-0xFFFF> </p><p> ; <i> The absolute start address of PDATA memory</p><p> PDATASTART
33、 EQU 0H</p><p><b> ;</b></p><p> ; <o> PDATALEN: PDATA memory size <0x0-0xFF> </p><p> ; <i> The length of PDATA memory in bytes.</p>
34、;<p> PDATALEN EQU 0H</p><p><b> ;</b></p><p><b> ;</h></b></p><p> ;------------------------------------------------------------
35、------------------</p><p><b> ;</b></p><p> ;<h> Reentrant Stack Initialization</p><p><b> ;</b></p><p> ; The following EQU statemen
36、ts define the stack pointer for reentrant</p><p> ; functions and initialized it:</p><p><b> ;</b></p><p> ; <h> Stack Space for reentrant functions in the SMA
37、LL model.</p><p> ; <q> IBPSTACK: Enable SMALL model reentrant stack</p><p> ; <i> Stack space for reentrant functions in the SMALL model.</p><p> IBPSTACK
38、 EQU 0 ; set to 1 if small reentrant is used.</p><p> ; <o> IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF></p><p> ; <i> Set the top of the stack to
39、 the highest location.</p><p> IBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 </p><p><b> ; </h></b></p><p><b> ;</b></p><p> ;
40、 <h> Stack Space for reentrant functions in the LARGE model. </p><p> ; <q> XBPSTACK: Enable LARGE model reentrant stack</p><p> ; <i> Stack space for reentrant fun
41、ctions in the LARGE model.</p><p> XBPSTACK EQU 0 ; set to 1 if large reentrant is used.</p><p> ; <o> XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF>&
42、lt;/p><p> ; <i> Set the top of the stack to the highest location.</p><p> XBPSTACKTOP EQU 0xFFFF +1 ; default 0FFFFH+1 </p><p><b> ; </h></b>&
43、lt;/p><p><b> ;</b></p><p> ; <h> Stack Space for reentrant functions in the COMPACT model. </p><p> ; <q> PBPSTACK: Enable COMPACT model reentrant stack
44、</p><p> ; <i> Stack space for reentrant functions in the COMPACT model.</p><p> PBPSTACK EQU 0 ; set to 1 if compact reentrant is used.</p><p><b>
45、; ;</b></p><p> ; <o> PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF></p><p> ; <i> Set the top of the stack to the highest location.</p><
46、;p> PBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 </p><p><b> ; </h></b></p><p><b> ;</h></b></p><p> ;---------------------------
47、---------------------------------------------------</p><p><b> ;</b></p><p> ; Memory Page for Using the Compact Model with 64 KByte xdata RAM</p><p> ; <e>Co
48、mpact Model Page Definition</p><p><b> ;</b></p><p> ; <i>Define the XDATA page used for PDATA variables. </p><p> ; <i>PPAGE must conform with the PPAG
49、E set in the linker invocation.</p><p><b> ;</b></p><p> ; Enable pdata memory page initalization</p><p> PPAGEENABLE EQU 0 ; set to 1 if pdata object a
50、re used.</p><p><b> ;</b></p><p> ; <o> PPAGE number <0x0-0xFF> </p><p> ; <i> uppermost 256-byte address of the page used for PDATA variables.</
51、p><p> PPAGE EQU 0</p><p><b> ;</b></p><p> ; <o> SFR address which supplies uppermost address byte <0x0-0xFF> </p><p> ; <i&g
52、t; most 8051 variants use P2 as uppermost address byte</p><p> PPAGE_SFR DATA 0A0H</p><p><b> ;</b></p><p><b> ; </e></b></p><p&
53、gt; ;------------------------------------------------------------------------------</p><p> ; Standard SFR Symbols </p><p> ACC DATA 0E0H</p><p> B DATA 0F0H<
54、/p><p> SP DATA 81H</p><p> DPL DATA 82H</p><p> DPH DATA 83H</p><p> NAME ?C_STARTUP</p><p> ?C_C51STARTUP SEGMENT CODE<
55、/p><p> ?STACK SEGMENT IDATA</p><p> RSEG ?STACK</p><p><b> DS 1</b></p><p> EXTRN CODE (?C_START)</p><p> PUBLIC ?C_STAR
56、TUP</p><p> CSEG AT 0</p><p> ?C_STARTUP: LJMP STARTUP1</p><p> RSEG ?C_C51STARTUP</p><p><b> STARTUP1:</b></p><p> IF I
57、DATALEN <> 0</p><p> MOV R0,#IDATALEN - 1</p><p><b> CLR A</b></p><p> IDATALOOP: MOV @R0,A</p><p> DJNZ R0,IDATALOOP</p>
58、;<p><b> ENDIF</b></p><p> IF XDATALEN <> 0</p><p> MOV DPTR,#XDATASTART</p><p> MOV R7,#LOW (XDATALEN)</p><p> IF (LOW (XDATALEN)
59、) <> 0</p><p> MOV R6,#(HIGH (XDATALEN)) +1</p><p><b> ELSE</b></p><p> MOV R6,#HIGH (XDATALEN)</p><p><b> ENDIF</b></p>
60、<p><b> CLR A</b></p><p> XDATALOOP: MOVX @DPTR,A</p><p> INC DPTR</p><p> DJNZ R7,XDATALOOP</p><p> DJNZ R6,XDATALOOP<
61、/p><p><b> ENDIF</b></p><p> IF PPAGEENABLE <> 0</p><p> MOV PPAGE_SFR,#PPAGE</p><p><b> ENDIF</b></p><p> IF PDATALEN
62、<> 0</p><p> MOV R0,#LOW (PDATASTART)</p><p> MOV R7,#LOW (PDATALEN)</p><p><b> CLR A</b></p><p> PDATALOOP: MOVX @R0,A</p&
63、gt;<p> INC R0</p><p> DJNZ R7,PDATALOOP</p><p><b> ENDIF</b></p><p> IF IBPSTACK <> 0</p><p> EXTRN DATA (?C_IBP)</p><p
64、> MOV ?C_IBP,#LOW IBPSTACKTOP</p><p><b> ENDIF</b></p><p> IF XBPSTACK <> 0</p><p> EXTRN DATA (?C_XBP)</p><p> MOV ?C_XBP,#HIGH XBPST
65、ACKTOP</p><p> MOV ?C_XBP+1,#LOW XBPSTACKTOP</p><p><b> ENDIF</b></p><p> IF PBPSTACK <> 0</p><p> EXTRN DATA (?C_PBP)</p><p> M
66、OV ?C_PBP,#LOW PBPSTACKTOP</p><p><b> ENDIF</b></p><p> MOV SP,#?STACK-1</p><p> ; This code is required if you use L51_BANK.A51 with Banking Mode 4</p>
67、<p> ;<h> Code Banking</p><p> ; <q> Select Bank 0 for L51_BANK.A51 Mode 4</p><p><b> #if 0 </b></p><p> ; <i> Initialize bank mechani
68、sm to code bank 0 when using L51_BANK.A51 with Banking Mode 4.</p><p> EXTRN CODE (?B_SWITCH0)</p><p> CALL ?B_SWITCH0 ; init bank mechanism to code bank 0</p><p><b>
69、; #endif</b></p><p><b> ;</h></b></p><p> LJMP ?C_START</p><p><b> END</b></p><p> Fangkuai.c</p><p> #include
70、 "t6963c.h"</p><p> #include "typedef.h"</p><p> #include "key.h"</p><p> #define X_START 5</p><p> #define Y_START 0</p><p
71、> #define MIN_SLOW_SPEED 300</p><p> #define BX_START 30</p><p> #define BY_START 15</p><p> #define Nothing 100</p><p><b> //全局?jǐn)?shù)據(jù)</b></p>
72、;<p> code uchar Game_Char[]={0x27,0x41,0x4d,0x45};</p><p> code uchar Over_Char[]={0x2f,0x56,0x45,0x52};</p><p> static uchar xx,yy; //方塊的位置</p><p> static uint
73、 Game_Score=0;</p><p> static uchar xdata Platform[14][21]; //游戲平臺數(shù)據(jù)</p><p> static uchar This_shape;//當(dāng)前形狀</p><p> static uchar Next_shape=0;</p><p> static
74、 uint Game_Speed=MIN_SLOW_SPEED; //等級速度,正常情況,方塊下降的速度</p><p> static uchar Game_Stop=1;</p><p> static uchar Game_Level=0;</p><p> //////////////////////////////////////////////
75、///////////////////////////////////</p><p> /////////////////////////////////////////////////////////////////////////////////</p><p> /////////方塊形狀的定義//////////////////////////////////////////
76、////////////////</p><p> /////////////////////////////////////////////////////////////////////////////////</p><p> struct POINT{</p><p><b> uchar x;</b></p>&l
77、t;p><b> uchar y;</b></p><p><b> };</b></p><p> struct SHAPE{</p><p> struct POINT point[4];</p><p> uchar next;//下一個形狀</p><p
78、><b> } </b></p><p> xdata shape[19]={ </p><p> { 1,0,0,1,1,1,2,1,1 },</p><p> { 1,0,1,1,2,1,1,2,2 },</p><p> { 0,0,1,0,2,0,1,1,3 },</p>&l
79、t;p> { 1,0,0,1,1,1,1,2,0 },</p><p> { 1,0,2,0,1,1,1,2,5 },</p><p> { 0,0,1,0,2,0,2,1,6 },</p><p> { 2,0,2,1,2,2,1,2,7 },</p><p> { 0,0,0,1,1,1,2,1,4 },<
80、/p><p> { 1,0,2,0,2,1,2,2,9 },</p><p> { 2,0,0,1,1,1,2,1,10 },</p><p> { 1,0,1,1,1,2,2,2,11 },</p><p> { 0,0,1,0,2,0,0,1,8 },</p><p> { 0,0,0,1,1,1,1,2
81、,13 },</p><p> { 1,0,2,0,0,1,1,1,12 },</p><p> { 2,0,1,1,2,1,1,2,15 },</p><p> { 0,0,1,0,1,1,2,1,14 },</p><p> { 1,0,1,1,1,2,1,3,17 },</p><p> { 0,1,1
82、,1,2,1,3,1,16 },</p><p> { 1,0,2,0,1,1,2,1,18 }, </p><p><b> }; </b></p><p> ////////////////////////////////////////////////////////////////////////////</p>
83、<p> //**************************************************************************</p><p> //= 函數(shù)原型:void Init_GamePlatform()</p><p> //= 功 能: 初始化游戲平臺</p><p> //= 參 數(shù)
84、: 無</p><p> //= 返 回 值: 無</p><p> //= 函數(shù)性質(zhì):公有函數(shù)</p><p> //= 注 意:</p><p> //*************************************************************************** </p&g
85、t;<p> void Show_score(uchar);</p><p> void Init_GamePlatform()</p><p><b> {</b></p><p><b> uchar i;</b></p><p><b> uchar j;&l
86、t;/b></p><p> // uchar N_Hanzi;</p><p> Wr_line(1,33,13,64,1 );//初始化游戲平臺邊界畫游戲區(qū)域</p><p> Wr_line(1,33,14,64,1 ); //畫上橫線</p><p> Wr_line(0,33,15,100,1);</p
87、><p> Wr_line(0,34,15,100,1); //畫左豎線</p><p> Wr_line(1,33,115,64,1); </p><p> Wr_line(1,33,116,64,1); //畫下橫線</p><p> Wr_line(0,95,15,100,1);</p><p> W
88、r_line(0,96,15,100,1); //畫右豎線</p><p> //--------------------------------------------------------</p><p> for(i=1;i<13;i++)//游戲平臺數(shù)據(jù)清零</p><p><b> {</b></p>
89、<p> for(j=0;j<20;j++)</p><p><b> {</b></p><p> Platform[i][j]=0;</p><p><b> }</b></p><p><b> }</b></p><p&g
90、t; for(i=1;i<13;i++)</p><p><b> {</b></p><p> Platform[i][20]=1; //游戲平臺最下面一行的每一個方塊位置為1,作為下邊界</p><p><b> }</b></p><p> for(j=0;j<20;
91、j++)//游戲平臺左右方塊位置置1,作為左右邊界</p><p><b> {</b></p><p> Platform[0][j]=1;</p><p> Platform[13][j]=1;</p><p><b> }</b></p><p> //-
92、-------------------------------------------------------- </p><p> hanzhi(13,3,6,1); //輸入“分”漢字</p><p> hanzhi(13,8,8,1); //輸入“級”漢字</p><p> Show_score(0); //顯示初始分?jǐn)?shù)</p&
93、gt;<p> Show_num(13,11,Game_Level); //顯示初始等級水平</p><p> Game_Speed=MIN_SLOW_SPEED/(Game_Level+1); //根據(jù)水平確定速度</p><p> //----------------------------------------------------------------
94、--</p><p> Game_Score=0;</p><p> xx=X_START ;</p><p> yy=Y_START ;</p><p><b> }</b></p><p> ////////////////////////Init_Game/////////////
95、////////</p><p> void Init_Game()</p><p><b> {</b></p><p> Game_Stop=1;</p><p> Init_GamePlatform();</p><p> hanzhi(7,3,9,1); //輸入“按”漢字&l
96、t;/p><p> Show_num(7,6,7); //顯示7</p><p> hanzhi(7,8,10,1); //輸入“開”漢字</p><p> hanzhi(7,10,11,1); //輸入“始”漢字</p><p><b> }</b></p><p> //*****
97、*********************************************************************</p><p> //= 函數(shù)原型:void XiaoFengKuai(uchar x,uchar y,uchar mode)</p><p> //= 功 能: 顯示一個小方塊</p><p> //= 參
98、數(shù): 小方塊的橫x,堅坐標(biāo)y,mode=1:顯示小方塊,mode=0:刪除小方塊</p><p> //= 返 回 值:</p><p> //= 函數(shù)性質(zhì):私有函數(shù)</p><p> //= 注 意:</p><p> //*************************************************
99、************************** </p><p> void XiaoFengKuai(uchar x,uchar y,bit mode)</p><p><b> {</b></p><p> uchar x1=5*x+BX_START;//將方塊在平臺的位置轉(zhuǎn)化成LCD的點坐標(biāo)(地址轉(zhuǎn)換)</p>
100、<p> uchar y1=5*y+BY_START; </p><p><b> uchar i;</b></p><p> if(mode==1)</p><p><b> {</b></p><p> for(i=0;i<5;i++)</p>&l
101、t;p><b> {</b></p><p> Point(x1+i,y1,1); //畫一條橫線</p><p><b> }</b></p><p><b> y1+=4;</b></p><p> for(i=0;i<5;i++)</p>
102、<p><b> {</b></p><p> Point(x1+i,y1,1); //畫第二條橫線</p><p><b> }</b></p><p> for(i=0;i<5;i++)</p><p><b> {</b></p>
103、<p> Point(x1,y1-i,1); //畫第1條堅線</p><p><b> }</b></p><p><b> x1+=4;</b></p><p> for(i=0;i<5;i++)</p><p><b> {</b></
104、p><p> Point(x1,y1-i,1); //畫第2條堅線</p><p><b> }</b></p><p><b> y1-=4;</b></p><p> for(i=0;i<5;i++)</p><p><b> {</b>
105、</p><p> Point(x1-i,y1+i,1); //畫斜線</p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b&
106、gt;</p><p> for(i=0;i<5;i++)</p><p><b> {</b></p><p> Point(x1+i,y1,0); //畫一條橫線</p><p><b> }</b></p><p><b> y1+=4;<
107、;/b></p><p> for(i=0;i<5;i++)</p><p><b> {</b></p><p> Point(x1+i,y1,0); //畫第二條橫線</p><p><b> }</b></p><p> for(i=0;i<
108、5;i++)</p><p><b> {</b></p><p> Point(x1,y1-i,0); //畫第1條堅線</p><p><b> }</b></p><p><b> x1+=4;</b></p><p> for(i=0;
109、i<5;i++)</p><p><b> {</b></p><p> Point(x1,y1-i,0); //畫第2條堅線</p><p><b> }</b></p><p><b> y1-=4;</b></p><p> for
110、(i=0;i<5;i++)</p><p><b> {</b></p><p> Point(x1-i,y1+i,0); //畫斜線</p><p><b> }</b></p><p><b> }</b></p><p><b&
111、gt; }</b></p><p> //////////////////////////////////////////////////////////////////////////</p><p> ////////////////左沖突檢測//////////////////////////////////////////////</p><p
112、> bit Left_Anti()</p><p><b> {</b></p><p><b> uchar i;</b></p><p> for(i=0;i<4;i++)</p><p><b> {</b></p><p>
113、 if(Platform[xx+shape[This_shape].point[i].x-1][yy+shape[This_shape].point[i].y]==1) </p><p><b> return 1;</b></p><p><b> }</b></p><p><b> return 0
114、;</b></p><p><b> } </b></p><p> ////////////////右沖突檢測///////////////////////////////////////////</p><p> bit Right_Anti()</p><p><b> {<
115、;/b></p><p><b> uchar i;</b></p><p> for(i=0;i<4;i++)</p><p><b> {</b></p><p> if(Platform[xx+shape[This_shape].point[i].x+1][yy+shape
116、[This_shape].point[i].y]==1)</p><p><b> return 1;</b></p><p><b> } </b></p><p><b> return 0;</b></p><p><b> }</b&g
117、t;</p><p> ////////////////////////////////////////下沖突檢測//////////////////////////</p><p> bit Bottom_Anti()</p><p><b> {</b></p><p><b> uchar i;&
118、lt;/b></p><p> for(i=0;i<4;i++)</p><p><b> {</b></p><p> if(Platform[xx+shape[This_shape].point[i].x][yy+shape[This_shape].point[i].y+1]==1)</p><p>
119、;<b> return 1;</b></p><p><b> }</b></p><p> return 0; </p><p><b> }</b></p><p> //////////////////////////////////改變形狀時產(chǎn)生的沖
120、突檢測////////////////////</p><p> bit Change_Shape_Anti()</p><p><b> {</b></p><p><b> uchar i;</b></p><p> for(i=0;i<4;i++)</p><
121、p><b> {</b></p><p> if(Platform[xx+shape[shape[This_shape].next].point[i].x][yy+shape[shape[This_shape].next].point[i].y]==1)</p><p> return 1; //檢測一個形狀的沖突情況</p><
122、p><b> }</b></p><p><b> return 0;</b></p><p><b> }</b></p><p> //////////////////////////////////產(chǎn)生一個隨機數(shù),返回一個隨機數(shù)///////////////</p>
123、<p> uchar Random()</p><p><b> {</b></p><p> static uchar m;</p><p><b> m+=49;</b></p><p> return (m%19);</p><p><b>
124、; }</b></p><p> //////////////計分函數(shù),參數(shù)為 消行行數(shù)n///////////////////////////////////////</p><p> void Show_score(uchar n)</p><p><b> {</b></p><p> Gam
125、e_Score=Game_Score+10*n;</p><p> if(Game_Score<10)</p><p><b> {</b></p><p> Show_num(13,6,Game_Score%10);//顯示個位</p><p><b> }</b></p&
126、gt;<p> else if(Game_Score<100)</p><p><b> { </b></p><p> Show_num(14,6,Game_Score%10);</p><p> Show_num(13,6,Game_Score/10%100);//顯示個位,十位</p><
127、;p><b> }</b></p><p> else if(Game_Score<1000)</p><p><b> {</b></p><p> Show_num(14,6,Game_Score%10);</p><p> Show_num(13,6,Game_Score
128、/10%10);</p><p> Show_num(12,6,Game_Score/100%10);//顯示個位 ,十位,百位</p><p><b> }</b></p><p><b> else</b></p><p><b> { </b></p&g
129、t;<p> Show_num(15,6,Game_Score%10);</p><p> Show_num(14,6,Game_Score/10%10);</p><p> Show_num(13,6,Game_Score/100%10);//顯示個位 ,十位,百位,千位</p><p> Show_num(12,6,Game_Score/
130、1000);</p><p><b> }</b></p><p> if(Game_Score%1000==0)</p><p><b> {</b></p><p> if(Game_Score>0)</p><p><b> {</b&g
131、t;</p><p> Game_Level++;</p><p> if(Game_Level==10)</p><p><b> {</b></p><p> Game_Stop=1;</p><p> hanzhi(7,5,12,1); //輸出“太棒了"</p
132、><p> hanzhi(7,7,13,1); </p><p> hanzhi(7,9,14,1);</p><p><b> }</b></p><p> Show_num(13,11,Game_Level); //顯示水平</p><p><b> }</b>
133、</p><p><b> }</b></p><p><b> }</b></p><p> //**************************************************************************</p><p> //= 函數(shù)原型:voi
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 51單片機課程設(shè)計---俄羅斯方塊
- 俄羅斯方塊單片機課程設(shè)計作品說明書
- 基于單片機的俄羅斯方塊游戲機課程設(shè)計
- 俄羅斯方塊課程設(shè)計報告
- 《c++俄羅斯方塊》課程設(shè)計--俄羅斯方塊
- 俄羅斯方塊課程設(shè)計報告
- 俄羅斯方塊課程設(shè)計
- 俄羅斯方塊課程設(shè)計
- 課程設(shè)計---俄羅斯方塊
- 俄羅斯方塊課程設(shè)計
- 俄羅斯方塊課程設(shè)計
- 課程設(shè)計--俄羅斯方塊設(shè)計報告
- 俄羅斯方塊課程設(shè)計
- 俄羅斯方塊課程設(shè)計
- 俄羅斯方塊課程設(shè)計
- 俄羅斯方塊編程課程設(shè)計報告
- 俄羅斯方塊游戲課程設(shè)計報告
- java課程設(shè)計報告-俄羅斯方塊
- c課程設(shè)計--俄羅斯方塊
- 簡單俄羅斯方塊課程設(shè)計
評論
0/150
提交評論