📄 gameprocess.lst
字号:
C51 COMPILER V8.05a GAMEPROCESS 11/06/2007 17:08:34 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE GAMEPROCESS
OBJECT MODULE PLACED IN .\Target\GameProcess.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE sources\GameProcess.c BROWSE INCDIR(.\include) DEBUG OBJECTEXTEND PRINT(.\L
-ST\GameProcess.lst) OBJECT(.\Target\GameProcess.obj)
line level source
1 //*************************************************************************************************
2 //* *
3 //* ******************************游戏动作处理程序************************** *
4 //* *
5 //*************************************************************************************************
6 #include "includes.h"
7
8 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<方块动作>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
9 #define ACTIONROTATE 0
10 #define ACTIONRIGHT 1
11 #define ACTIONDOWN 2
12 #define ACTIONLEFT 3
13
14 #define STARTROW ROW(-3) //方块起始位置。
15 #define STARTLINE LINE(5)
16 #define ROW(x) (100+x) //把方块位置加100,防止在--时产生负数。
17 #define LINE(x) (100+x)
18
19
20 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定义当前方块属性变量>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
21 BLOCK *psta_BlockCur=sta_BlockSet; //指向当前方块设定的指针。
22
23 unsigned char uc_BlockRow,uc_BlockLine; //当前方块位置。
24
25 bit b_GameStart=0; //游戏开始标志位。
26
27 unsigned int ui_GameMark=0; //当前游戏分数。
28
29 //*************************************************************************************************
30 //* *
31 //* **********************************创建一个方块****************************** *
32 //* *
33 //*************************************************************************************************
34 void vCreateBlock() //在当前位置创建一个方块。
35 {
36 1 unsigned char ucRowOffset,ucLineOffset;
37 1 for(ucRowOffset=0;ucRowOffset<4;ucRowOffset++)
38 1 for(ucLineOffset=0;ucLineOffset<4;ucLineOffset++)
39 1 {
40 2 if((0x01&(unsigned char)((psta_BlockCur->uiBlockMap)>>(ucRowOffset*4+ucLineOffset)))
41 2 &&(uc_BlockRow+ucRowOffset)>=ROW(0))
42 2 vShowBlock(uc_BlockRow+ucRowOffset-ROW(0),uc_BlockLine+ucLineOffset-LINE(0));
43 2 }
44 1 }
45
46 //*************************************************************************************************
47 //* *
48 //* **********************************删除一个方块****************************** *
49 //* *
50 //*************************************************************************************************
51 void vDeleteBlock() //在当前位置删除一个方块。
52 {
53 1 unsigned char ucRowOffset,ucLineOffset;
54 1 for(ucRowOffset=0;ucRowOffset<4;ucRowOffset++)
C51 COMPILER V8.05a GAMEPROCESS 11/06/2007 17:08:34 PAGE 2
55 1 for(ucLineOffset=0;ucLineOffset<4;ucLineOffset++)
56 1 {
57 2 if((0x01&(unsigned char)((psta_BlockCur->uiBlockMap)>>(ucRowOffset*4+ucLineOffset)))
58 2 &&(uc_BlockRow+ucRowOffset)>=ROW(0))
59 2 vCleanBlock(uc_BlockRow+ucRowOffset-ROW(0),uc_BlockLine+ucLineOffset-LINE(0));
60 2 }
61 1 }
62
63
64 //*************************************************************************************************
65 //* *
66 //* **********************************产生一个新的方块**************************** *
67 //* *
68 //*************************************************************************************************
69 void vNewBlock()
70 {
71 1 unsigned char ucBlockSelect; //用于选择方块类型及状态的数,通过取
72 1 ucBlockSelect=(TH0+TH1)%18; //定时器的值产生随机数。
73 1 psta_BlockCur=&sta_BlockSet[ucBlockSelect];
74 1 }
75 //*************************************************************************************************
76 //* *
77 //* ********************************游戏初始化******************************* *
78 //* *
79 //*************************************************************************************************
80 void vGameInitialize()
81 {
82 1 unsigned char ucCountOne,ucCountTwo;
83 1
84 1 vWriteCMD(0x01); //清屏。
85 1 vShowOneChin(1,2,uca_FEN); //显示“分数”。
86 1 vShowOneChin(1,18,uca_SHU);
87 1 ui_GameMark=0; //清空游戏分数。
88 1 vShowNumber(4,0,ui_GameMark); //显示初始分数。
89 1
90 1 vShowFrame(); //显示边框。
91 1
92 1 for(ucCountOne=0;ucCountOne<21;ucCountOne++) //清空游戏区域。
93 1 for(ucCountTwo=0;ucCountTwo<12;ucCountTwo++)
94 1 vCleanBlock(ucCountOne,ucCountTwo);
95 1
96 1 uc_BlockRow=STARTROW;
97 1 uc_BlockLine=STARTLINE;
98 1 vNewBlock();
99 1 vCreateBlock(); //新建方块。;
100 1 b_GameStart=1; //开启定时器定时下降。
101 1 }
102 //*************************************************************************************************
103 //* *
104 //* ******************************判断游戏是否结束************************** *
105 //* *
106 //*************************************************************************************************
107 unsigned char ucIsGameOver()
108 {
109 1 unsigned char ucCount;
110 1 for(ucCount=0;ucCount<12;ucCount++)
111 1 if(ucReadBlock(0,ucCount))
112 1 return 1;
113 1 return 0;
114 1 }
115
116
C51 COMPILER V8.05a GAMEPROCESS 11/06/2007 17:08:34 PAGE 3
117 //*************************************************************************************************
118 //* *
119 //* ******************************游戏结束处理函数************************** *
120 //* *
121 //*************************************************************************************************
122 void vGameOver()
123 {
124 1 b_GameStart=0;
125 1 vShowGraph(3,40,70,2,uca_GameOver);
126 1 }
127
128 void vGetMark()
129 {
130 1 unsigned char ucRow,ucLine,ucCount,ucTemp=0;
131 1 for(ucRow=uc_BlockRow+3;ucRow>0;ucRow--)
132 1 if((uca_BlockMap[ucRow*2]==0xFF)&&(uca_BlockMap[ucRow*2+1]==0x0F))
133 1 {
134 2 for(ucCount=ucRow;ucCount>0;ucCount--)
135 2 for(ucLine=0;ucLine<12;ucLine++)
136 2 {
137 3 vCleanBlock(ucCount,ucLine);
138 3 if(ucReadBlock(ucCount-1,ucLine))
139 3 vShowBlock(ucCount,ucLine);
140 3 }
141 2 ucRow++;
142 2 ui_GameMark+=(++ucTemp);
143 2 }
144 1 vShowNumber(4,0,ui_GameMark);
145 1
146 1 }
147 //*************************************************************************************************
148 //* *
149 //* ******************************游戏动作处理函数**************************** *
150 //* *
151 //*************************************************************************************************
152 void vBlockAction(unsigned char ucAction)
153 {
154 1 if(ucMoveDecide(ucAction)) //判断方块是否可以移动。
155 1 vMoveBlock(ucAction); //如果可以,则移动方块。
156 1 else
157 1 if(ucAction==ACTIONDOWN)
158 1 {
159 2 if(ucIsGameOver())
160 2 vGameOver();
161 2 else
162 2 {
163 3 vGetMark();
164 3 uc_BlockRow=STARTROW;
165 3 uc_BlockLine=STARTLINE;
166 3 vNewBlock();
167 3 vCreateBlock();
168 3 }
169 2 }
170 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 539 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 12
C51 COMPILER V8.05a GAMEPROCESS 11/06/2007 17:08:34 PAGE 4
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -