?? main.lst
字號:
C51 COMPILER V8.08 MAIN 06/15/2007 17:28:51 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /**********************************************************
2 *名稱:推箱子游戲V0.1 Beta 1 (以占用3513字節 EPROM空間)
3 *編程:飛揚
4 *說明:采用YM12864R液晶(ST7920)+62256+PT6122遙控+AT89S51
5 *下一個版本增加音效,地圖編輯功能,界面顯示美化,撤銷上一步!
6 *主要是學習外擴展RAM才搞這個東東! 我使用的是24MHz晶振
7 *關卡增加到20關
8 **********************************************************/
9 #include <at89x52.h>
10 #include "MAIN.H"
11 /****** 引腳定義 ******/
12 sbit Beep = P3^3; //音頻輸出腳
13
14 /****** 變量/數組定義 ******/
15 uchar code logotab[4][17]={
16 {" "},
17 {" V0.1 Beta 1 "},
18 {" 推箱子游戲 "},
19 {" 編程 飛揚 "}};
20 //存放遙控接收數據
21 uchar xdata KeyCoding[4]={0,0,0,0};
22 //關卡設置
23 uchar guanka = 0;
24 //用1024個字節存放動態繪圖數據,我叫它顯存數據
25 uchar xdata GamePic[1024] _at_ 0x0100; //這里使用了絕對地址
26 //空(用于清空圖形移動后的痕跡)編號0
27 uchar code kong[8]={0,0,0,0,0,0,0,0};
28 //墻壁(用來標識移動的范圍)編號1
29 uchar code qiang[8]={0x00,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x00};
30 //圓形(箱子要推到的地方)編號2
31 uchar code yuan[8]={0x3c,0x66,0xc3,0x81,0x81,0xc3,0x66,0x3c};
32 //箱子(推動的就是他)編號3
33 uchar code xiangzi[8]={0xff,0x81,0xbd,0xbd,0xbd,0xbd,0x81,0xff};
34 //娃娃臉(用于推動箱子)編號4
35 uchar code lian[8]={0x7e,0xff,0xdb,0xff,0xff,0xc3,0xe7,0x7e};
36 //十字形(箱子推到圓形位置后變為十字形)編號5
37 uchar code shizi[8]={0x3c,0x3c,0xff,0xff,0xff,0xff,0x3c,0x3c};
38 //用于計算圖形移動和放置的坐標
39 //實際存放的是GamePic數組的相應下標
40 uint code MoveData[64]={
41 0,1,2,3,4,5,6,7,
42 128,129,130,131,132,133,134,135,
43 256,257,258,259,260,261,262,263,
44 384,385,386,387,388,389,390,391,
45 512,513,514,515,516,517,518,519,
46 640,641,642,643,644,645,646,647,
47 768,769,770,771,772,773,774,775,
48 896,897,898,899,900,901,902,903
49 };
50 /*8X8的游戲地圖數據,同時根據圖形數據判斷娃娃臉是否可以移動,
51 *箱子是否可以推動,箱子推動的方向是否是墻和箱子,是則不
52 *能推動!箱子推到的地方是圓形則用十字形替換(將該位置數據換成5),
53 *推動十字形,則再恢復到箱子的形狀(在換成3).
54 *空(什么都不顯示)=0,墻=1,圓=2,箱子=3,臉=4,十字=5 */
55 uchar code GameMap[20][64]={
C51 COMPILER V8.08 MAIN 06/15/2007 17:28:51 PAGE 2
56 //第一關
57 {1,1,1,1,1,1,1,1,
58 1,0,0,0,1,2,0,1,
59 1,2,0,0,3,0,0,1,
60 1,1,3,1,1,0,0,1,
61 1,0,0,1,1,3,1,1,
62 1,0,0,4,0,0,0,1,
63 1,0,2,1,0,0,0,1,
64 1,1,1,1,1,1,1,1},
65 //第二關
66 {1,1,1,1,1,1,1,1,
67 1,0,0,0,1,0,0,1,
68 1,0,2,0,3,2,0,1,
69 1,1,3,1,1,0,0,1,
70 1,0,0,1,1,3,1,1,
71 1,0,0,4,0,2,0,1,
72 1,0,0,1,0,0,0,1,
73 1,1,1,1,1,1,1,1},
74 //第三關
75 {1,1,1,1,1,1,1,1,
76 1,0,0,0,1,0,0,1,
77 1,0,0,0,3,0,0,1,
78 1,0,3,1,1,0,0,1,
79 1,0,2,1,1,3,1,1,
80 1,0,2,4,0,0,0,1,
81 1,0,2,1,0,0,0,1,
82 1,1,1,1,1,1,1,1},
83 //第四關
84 {1,1,1,1,1,1,1,1,
85 1,0,0,0,1,0,0,1,
86 1,0,2,0,3,2,0,1,
87 1,1,3,1,1,0,0,1,
88 1,0,0,1,1,3,1,1,
89 1,0,2,4,0,0,0,1,
90 1,0,0,1,0,0,0,1,
91 1,1,1,1,1,1,1,1},
92 //第五關
93 {1,1,1,1,1,1,1,1,
94 1,0,0,0,1,0,0,1,
95 1,0,0,2,3,0,0,1,
96 1,1,3,1,1,0,0,1,
97 1,0,2,1,1,3,1,1,
98 1,0,0,4,2,0,0,1,
99 1,0,0,1,0,0,0,1,
100 1,1,1,1,1,1,1,1},
101 //6
102 {1,1,1,1,1,1,1,1,
103 1,0,0,0,1,0,0,1,
104 1,0,0,0,3,0,0,1,
105 1,1,5,1,1,0,0,1,
106 1,0,2,1,1,3,1,1,
107 1,0,2,4,0,0,0,1,
108 1,0,0,1,0,0,0,1,
109 1,1,1,1,1,1,1,1},
110 //7
111 {1,1,1,1,1,1,1,1,
112 1,1,0,1,1,0,2,1,
113 1,0,0,3,0,0,0,1,
114 1,4,3,3,0,0,0,1,
115 1,0,1,0,0,1,0,1,
116 1,0,1,1,1,1,0,1,
117 1,2,0,0,0,0,2,1,
C51 COMPILER V8.08 MAIN 06/15/2007 17:28:51 PAGE 3
118 1,1,1,1,1,1,1,1},
119 //8
120 {1,1,1,1,1,1,1,1,
121 1,0,0,1,0,0,0,1,
122 1,0,0,1,0,5,0,1,
123 1,0,0,1,0,2,1,1,
124 1,1,0,3,0,0,0,1,
125 1,0,3,0,0,2,0,1,
126 1,4,0,1,1,0,0,1,
127 1,1,1,1,1,1,1,1},
128 //9
129 {1,1,1,1,1,1,1,1,
130 1,1,4,0,1,1,1,1,
131 1,0,0,0,3,2,0,1,
132 1,0,0,1,0,0,0,1,
133 1,0,0,0,1,5,0,1,
134 1,1,0,3,0,0,0,1,
135 1,1,1,1,0,2,0,1,
136 1,1,1,1,1,1,1,1},
137 //10
138 {1,1,1,1,1,1,1,1,
139 1,2,0,1,1,1,1,1,
140 1,2,0,0,0,1,1,1,
141 1,0,1,3,0,0,0,1,
142 1,2,0,3,3,1,0,1,
143 1,1,0,0,0,0,0,1,
144 1,1,1,1,1,0,4,1,
145 1,1,1,1,1,1,1,1},
146 //11
147 {1,1,1,1,1,1,1,1,
148 1,1,0,0,0,1,1,1,
149 1,0,1,2,3,0,1,1,
150 1,0,2,4,0,0,1,1,
151 1,0,3,0,3,0,1,1,
152 1,1,0,0,0,1,1,1,
153 1,1,1,1,1,1,1,1,
154 1,1,1,1,1,1,1,1},
155 //12
156 {1,1,1,1,1,1,1,1,
157 1,1,0,1,1,0,2,1,
158 1,0,3,0,3,3,0,1,
159 1,4,0,0,0,0,0,1,
160 1,0,1,0,0,1,0,1,
161 1,0,1,1,1,1,0,1,
162 1,2,0,0,0,0,2,1,
163 1,1,1,1,1,1,1,1},
164 //13
165 {1,1,1,1,1,1,1,1,
166 1,1,1,1,1,1,1,1,
167 1,1,0,0,0,0,1,1,
168 1,1,2,1,1,3,0,1,
169 1,0,2,2,3,0,0,1,
170 1,0,0,1,3,0,0,1,
171 1,0,0,4,0,1,1,1,
172 1,1,1,1,1,1,1,1},
173 //14
174 {1,1,1,1,1,1,1,1,
175 1,1,1,0,0,1,1,1,
176 1,1,0,0,0,0,1,1,
177 1,0,2,0,2,3,1,1,
178 1,0,0,3,4,0,0,1,
179 1,1,1,1,5,1,0,1,
C51 COMPILER V8.08 MAIN 06/15/2007 17:28:51 PAGE 4
180 1,1,1,1,0,0,0,1,
181 1,1,1,1,1,1,1,1},
182 //15
183 {1,1,1,1,1,1,1,1,
184 1,1,1,1,1,1,1,1,
185 1,1,0,2,0,5,0,1,
186 1,1,0,0,1,0,0,1,
187 1,1,4,3,5,0,0,1,
188 1,1,1,0,0,0,1,1,
189 1,1,1,0,0,0,1,1,
190 1,1,1,1,1,1,1,1},
191 //16
192 {1,1,1,1,1,1,1,1,
193 1,1,1,1,1,1,1,1,
194 1,0,2,2,1,1,1,1,
195 1,0,3,0,0,0,0,1,
196 1,0,0,1,3,1,0,1,
197 1,0,4,0,2,3,0,1,
198 1,1,1,1,1,1,1,1,
199 1,1,1,1,1,1,1,1},
200 //17
201 {1,1,1,1,1,1,1,1,
202 1,1,1,1,1,1,1,1,
203 1,2,0,0,4,2,1,1,
204 1,0,0,3,1,0,1,1,
205 1,0,1,0,3,2,0,1,
206 1,0,0,0,3,1,0,1,
207 1,1,1,1,0,0,0,1,
208 1,1,1,1,1,1,1,1},
209 //18
210 {1,1,1,1,1,1,1,1,
211 1,2,0,2,1,1,1,1,
212 1,2,1,3,3,0,1,1,
213 1,0,0,0,4,0,1,1,
214 1,0,3,1,0,0,1,1,
215 1,1,0,0,0,1,1,1,
216 1,1,1,1,1,1,1,1,
217 1,1,1,1,1,1,1,1},
218 //19
219 {1,1,1,1,1,1,1,1,
220 1,1,1,1,1,1,1,1,
221 1,2,0,0,0,2,0,1,
222 1,0,1,0,1,0,0,1,
223 1,4,3,0,0,3,2,1,
224 1,1,1,1,1,0,3,1,
225 1,1,1,1,1,0,0,1,
226 1,1,1,1,1,1,1,1},
227 //20
228 {1,1,1,1,1,1,1,1,
229 1,0,0,1,1,1,1,1,
230 1,0,0,1,1,1,1,1,
231 1,0,2,5,0,0,0,1,
232 1,1,3,0,0,0,0,1,
233 1,1,0,1,3,1,1,1,
234 1,1,2,0,4,1,1,1,
235 1,1,1,1,1,1,1,1}
236 };
237 /*程序存儲器中的數據是只讀的!根據這個地圖刷新顯示.
238 用于復制程序存儲器中的當前地圖數據*/
239 uchar xdata Map[64];
240 /*用于存放圓形的坐標,最多5個圓.yuanPos[6]存放本關有幾個圓*/
241 uchar xdata yuanPos[6] = 0;
C51 COMPILER V8.08 MAIN 06/15/2007 17:28:51 PAGE 5
242
243 /**********************************************************
244 *函數名:CopyMap()
245 *功 能:用于復制程序存儲器中的當前地圖數據
246 *輸 入:入口參數為當前地圖編號
247 **********************************************************/
248 void CopyMap(uchar num)
249 {
250 1 uchar i;
251 1 for (i=0;i<64;i++) Map[i] = GameMap[num][i];
252 1 }
253 /**********************************************************
254 *函數名:WriteMemorizer()
255 *功 能:將圖形數據寫入顯存
256 *pos:要顯示圖形的位置,*p:指針指向要顯示的圖形
257 **********************************************************/
258 void WriteMemorizer(uchar pos,uchar *p)
259 {
260 1 uchar i;
261 1 uint zb;
262 1 zb = MoveData[pos]; //取顯存地址(顯示坐標)
263 1 for (i=0;i<8;i++)
264 1 {
265 2 GamePic[zb] = *p; //要顯示的圖形寫入顯存
266 2 p++; //下一個數據
267 2 zb+=16;//顯存的下一個地址(每個地址之間的差是16)
268 2 } //或者說是間隔是16.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -