📄 badgerbash.lst
字号:
C51 COMPILER V8.05a BADGERBASH 05/06/2009 21:14:12 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE BADGERBASH
OBJECT MODULE PLACED IN badgerbash.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE badgerbash.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 *文件说明:打地鼠程序
3 *时 间:2009-05-01
4 *作 者:小树
5 *修改时间:
6 *修改人 :
7 */
8
9 #include <reg52.h>
10 #include <stdlib.h>
11 #include "badgerbash_header.h"
12 #include "LCD1602.h"
13 /**添加还需要的头文件**/
14
15 /**********************函数声明区**********************/
16
17 /**函数:void delay_ms(uchar num)
18 * 参数:num----延时时间
19 * 功能:延时程序
20 * 返回:无
21 */
22 void delay_ms(uchar num)
23 {
24 1 uchar i=200;
25 1 while(num--)
26 1 {
27 2 while(--i);
28 2 }
29 1 }
30
31
32 void initial(void);
33
34 /**函数:int creatbadger(int num);
35 * 参数:num----产生地鼠的个数
36 * 功能:生成地鼠随机位置
37 * 返回:
38 */
39 void creatbadger(uchar num, uint p[posNum][2]);
40
41 /**函数:void showbadger(uchar p[posNum]);
42 * 参数:p[posNum][2]----地鼠位置、时间数组
43 * 功能:在相应位置上显示地鼠
44 * 返回:无
45 */
46 void showbadger(uint p[posNum][2]);
47
48 /**函数:void bash(uchar key);
49 * 参数:key----按下的键号
50 * 功能:打地鼠处理函数,打中与否处理,积分处理
51 * 返回:无
52 */
53 void bashPro(uchar key, uint p[posNum][2]);
54
55 /**函数:uchar keyscan(void);
C51 COMPILER V8.05a BADGERBASH 05/06/2009 21:14:12 PAGE 2
56 * 参数:无
57 * 功能:按键扫描
58 * 返回:按键编号
59 */
60 uchar keyscan(void);
61
62 /**函数:void modeControl(uchar m);
63 * 参数:m----游戏模式
64 * 功能:模式设置
65 * 返回:无
66 */
67 void modeControl(uchar m);
68
69 /**函数:void setMode(void);
70 * 参数:无
71 * 功能:游戏设置
72 * 返回:无
73 */
74 void set_Mode(void);
75
76 /**函数:void monitor(void);
77 * 参数:无
78 * 功能:系统监控
79 * 返回:无
80 */
81 void monitor(void);
82
83 void setgrade(uchar g);
84
85 /**********************定义全局变量**********************/
86 uint showTime; /*地鼠出现时间*/
87 uchar badgerNum; /*地鼠同时出现数目*/
88 uchar badgerNow; /*已经出现的数目,通过该数与badgerNum的差,立即再产生(badgerNum-badgerNow)个*/
89
90 uchar grade; /*游戏难度等级*/
91 uint levelscore[LEVEL] = {0, 50, 150, 350, 650, 1050, 1550, 2150, 2850}; /*进入各关卡所需的分数*/
92 uchar newlevel;
93
94 uint showPos[posNum][2]; /*地鼠出现位置,出现所在位置为1,第二位表示出现的时间*/
95 uchar keyNum; /*按键编号*/
96
97 uint sc; uchar score[5]; /*游戏积分*/
98 uint gain; /*每打中一个的得分*/
99
100 uchar showEn; /*显示控制*/
101 uchar start, run; /*游戏开始*/
102 uchar setsound,set_mod; /*声音、模式设置标志。0:未设置,1:允许/模式1,2:禁止/模式2 ***/
103
104 uint count, count2;
105 /**********************程序入口点,main函数**********************/
106
107 int main(void)
108 {
109 1 /*系统初始化*/
110 1 initial();
111 1
112 1 /*循环处理*/
113 1 while(1)
114 1 {
115 2 //LCD_SetDisplay(LCD_SHOW|LCD_CURSOR|LCD_FLASH);
116 2
117 2 if (run == 1) /*设置完成,游戏开始*/
C51 COMPILER V8.05a BADGERBASH 05/06/2009 21:14:12 PAGE 3
118 2 {
119 3 keyNum = keyscan();
120 3
121 3 bashPro(keyNum, showPos);
122 3
123 3 if (showEn > 9) /*为了更准确扫描键盘,控制显示刷新频率,500ms刷新一次*/
124 3 {
125 4 monitor();
126 4 showbadger(showPos);
127 4 showEn = 0;
128 4 }
129 3 }
130 2 else /*刚进入系统,进行游戏设置*/
131 2 set_Mode();
132 2 }
133 1
134 1 }
135
136 void initial(void)
137 {
138 1 uchar i = 50;
139 1
140 1 /*定时器初始化*/
141 1 TMOD = 0x01; /*设置定时器0为工作方式1*/
142 1 TH0 = 0x3c; /*定时50ms*/
143 1 TL0 = 0xb0;
144 1 EA = 1;
145 1 ET0 = 1; /*开定时器0中断*/
146 1 TR0 = 1; /*启动T0*/
147 1
148 1 /*地鼠显示清空*/
149 1 showPort = 0xff;
150 1 showbit = 1;
151 1
152 1 /*清空按键号,无键按下*/
153 1 keyNum = 254;
154 1
155 1 /*设置打地鼠相关参数*/
156 1 /*改为在模式中设定*/
157 1
158 1 /*生成地鼠*/
159 1 creatbadger(badgerNum, showPos);
160 1 badgerNow = badgerNum;
161 1
162 1 score[0] = 0 + '0';
163 1 score[1] = 0 + '0';
164 1 score[2] = 0 + '0';
165 1 score[3] = 0 + '0';
166 1 score[4] = '\0';
167 1
168 1 /*液晶初始化*/
169 1 LCD_Initial();
170 1 GotoXY(0,0);
171 1 Print(" Badger Inside! ");
172 1 GotoXY(0,1);
173 1 Print("Let's bash it..");
174 1
175 1 /*延时定格欢迎画面*/
176 1 delay_ms(200);
177 1 delay_ms(200);
178 1 delay_ms(200);
179 1 delay_ms(200);
C51 COMPILER V8.05a BADGERBASH 05/06/2009 21:14:12 PAGE 4
180 1
181 1 /*产生随机种子*/
182 1 srand(0);
183 1 while(i--)
184 1 rand();
185 1
186 1 /*其他初始化操作*/
187 1
188 1 }
189
190 void creatbadger(uchar num, uint p[posNum][2])
191 {
192 1 uchar i,temp;
193 1 i = num;
194 1 /*参数范围检查*/
195 1 if((num < 0) || (num > posNum - 1))
196 1 return;
197 1
198 1 while(i > 0)
199 1 {
200 2 temp = rand()%posNum; /*产生0~posNum之间的随机数*/
201 2 if (p[temp][0] == 0) /*该位置没出现地鼠*/
202 2 {
203 3 p[temp][0] = 1; /*在相应的位置上置1,即产生地鼠*/
204 3 p[temp][1] = showTime;
205 3 }
206 2 else /*该位置已有地鼠,重新产生*/
207 2 continue;
208 2 i--;
209 2 }
210 1
211 1 }
212
213 void showbadger(uint p[posNum][2])
214 {
215 1 uchar i;
216 1 uchar showdata;
217 1 showdata = 0xff;showbit = 1; /*显示数据清零*/
218 1
219 1 /*将地鼠所在位置数组-->转换成-->直接输出端口的数据*/
220 1 for (i = 0;i < posNum-1; i++)
221 1 {
222 2 /*低8位*/
223 2 if (p[i][0] == 1 && p[i][1] > 0)
224 2 showdata &=~(0x01<<i);
225 2 }
226 1
227 1 /*将数据输出,显示地鼠*/
228 1 showPort = showdata;
229 1 /*最高位*/
230 1 if (p[i][0] == 1 && p[i][1] > 0)
231 1 showbit = 0;
232 1 }
233
234 void bashPro(uchar key, uint p[posNum][2])
235 {
236 1 uint t;
237 1 uchar i, l[2];
238 1
239 1 if (key > posNum-1) /*无按键按下*/
240 1 return;
241 1
C51 COMPILER V8.05a BADGERBASH 05/06/2009 21:14:12 PAGE 5
242 1 if (p[key][0] == 1) /*打中地鼠*/
243 1 {
244 2 p[key][0] = 0; /*地鼠消失*/
245 2 p[key][1] = 0;
246 2 /*if (setsound == 1)*/
247 2 /*beep(); 发出声效*/
248 2 //right = ~right;
249 2 sc += gain; /*积分增加*/
250 2
251 2 /*只有在模式1下,进入新关卡*/
252 2 if (set_mod == 1)
253 2 {
254 3 for (i=0; i< LEVEL; i++)
255 3 if (sc == levelscore[i])
256 3 {
257 4 grade = i + 1;
258 4 setgrade(grade);
259 4
260 4 l[0] = grade + '0';
261 4 l[1] = '\0';
262 4
263 4 GotoXY(0,0);
264 4 Print("Level ");
265 4 GotoXY(6,0);
266 4 Print(l);
267 4 }
268 3 }
269 2 /*只有在击中的情况下才刷新LCD*/
270 2 score[0] = sc/1000 + '0';
271 2 t = sc % 1000;
272 2 score[1] = t/100 + '0';
273 2 t = t % 100;
274 2 score[2] = t/10 + '0';
275 2 t = t % 10;
276 2 score[3] = t + '0';
277 2 score[4] = '\0';
278 2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -