?? 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 + -