📄 mdesign.lst
字号:
195 1 {
196 2 ClrLastBlock();
197 2 DrawCurBlock();
198 2 Delay(10000);
199 2 }
200 1 }
201
202 void ComputerRun()
203 {
204 1
205 1 GAME_GRID idata GridBack;
206 1 BLOCK_ATTR idata BlockBack;
207 1 BLOCK_GAME idata GameBack;
208 1
209 1 GRID_ATTR idata CurGridAttr;
210 1 GRID_ATTR idata BestGridAttr;
211 1
212 1 struct{
213 1 UINT8 i:4;
214 1 UINT8 j:4;
215 1 UINT8 col:4;
216 1 UINT8 TurnCount:4; //需要旋转的次数
217 1 UINT8 BestCol;
218 1 }st_tmp;
219 1
220 1
221 1 st_tmp.BestCol=myGame.GameBlock.nFirstBlockCol; // 最好状态所在列
222 1
223 1 BestGridAttr.nFullRowCount=-1; // 保证比较不出问题
224 1
225 1 CopyGame(&GameBack, &myGame); // 备份初始状态
226 1
227 1 for(st_tmp.i=0;st_tmp.i<4;st_tmp.i++)
228 1 {
229 2 for(st_tmp.j=0;st_tmp.j<st_tmp.i;st_tmp.j++) TurnBlock(&myGame); // 旋转i次
230 2
231 2 while(MoveBlock(&myGame,eMoveLeft)); // 移到最左边
232 2 do{
233 3 CopyGameGrid(&GridBack,&myGame.GameGrid); // 保存格子
234 3 CopyGameBlock(&BlockBack,&myGame.GameBlock); // 保存方块
235 3
236 3 st_tmp.col=myGame.GameBlock.nFirstBlockCol;
237 3
238 3 while(MoveBlock(&myGame,eMoveDown)); // 落下
239 3 FixCurBlock(&myGame); // 固定
240 3 GetGridAttr(&myGame,&CurGridAttr); // 获取属性
241 3
C51 COMPILER V7.06 MDESIGN 11/12/2008 09:12:22 PAGE 5
242 3 if(JudgeBetterAttr(&CurGridAttr,&BestGridAttr))
243 3 {
244 4 CopyGridAttr(&BestGridAttr,&CurGridAttr);
245 4 st_tmp.TurnCount=st_tmp.i;
246 4 st_tmp.BestCol=st_tmp.col;
247 4 }
248 3
249 3 CopyGameGrid(&myGame.GameGrid,&GridBack); // 恢复格子
250 3 CopyGameBlock(&myGame.GameBlock,&BlockBack); // 恢复方块
251 3
252 3 }while(MoveBlock(&myGame,eMoveRight)); // 单步向右移动
253 2
254 2 CopyGame(&myGame,&GameBack); // 恢复为初时状态
255 2 }
256 1 DriveBlockRun(st_tmp.TurnCount,st_tmp.BestCol);
257 1 }
258
259 void main()
260 {
261 1 idata struct{
262 1 UINT8 i;
263 1 UINT8 j;
264 1 }rowcol;
265 1
266 1 SINT8 tKey=-1;
267 1
268 1 UINT8 code bmpInfo[31][8]={
269 1 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
270 1 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
271 1 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
272 1 0x29,0x00,0x00,0x03,0x60,0x00,0x01,0x80,
273 1 0xb1,0x80,0x00,0x06,0x80,0x00,0x01,0x82,
274 1 0xfd,0x80,0x00,0x13,0x70,0x80,0x01,0x8c,
275 1 0xcd,0xe1,0x00,0x25,0xe8,0x81,0x07,0x82,
276 1 0x31,0xc3,0x01,0x37,0x74,0xe0,0x81,0xa7,
277 1 0x51,0x82,0x03,0x15,0x50,0x90,0x86,0xba,
278 1 0x39,0xc0,0x01,0x17,0xf0,0x91,0x8b,0xae,
279 1 0xd1,0x30,0x01,0x1d,0x78,0x91,0x09,0x9d,
280 1 0x91,0x10,0xc6,0x03,0xc4,0xe1,0x0b,0x80,
281 1 0x71,0x00,0x00,0x00,0x00,0x20,0x01,0x80,
282 1 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
283 1 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
284 1 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
285 1 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
286 1 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
287 1 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
288 1 0x01,0x00,0x00,0x00,0xf8,0x09,0x82,0x80,
289 1 0x81,0xc7,0x33,0xc6,0x49,0x1e,0xea,0x87,
290 1 0x81,0x40,0x4a,0x29,0xf8,0x2f,0x4a,0x80,
291 1 0x01,0x83,0x4b,0x29,0xc0,0x18,0x4a,0x81,
292 1 0x81,0xf8,0x4a,0x49,0x60,0x1b,0x8a,0x80,
293 1 0x81,0x40,0x4a,0x89,0xf8,0x1d,0x42,0x83,
294 1 0x81,0x81,0x33,0xe6,0x41,0x62,0x32,0x8e,
295 1 0x01,0x06,0x00,0x00,0x40,0x00,0x0e,0x80,
296 1 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
297 1 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
298 1 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
299 1 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
300 1 };
301 1
302 1 TMOD =0x20;
303 1 TH0 = 0x00;
C51 COMPILER V7.06 MDESIGN 11/12/2008 09:12:22 PAGE 6
304 1 TH1 = 0xFF;
305 1 TR0=1;
306 1 DB=0xff;
307 1 P3=0x00;
308 1 _nop_(); _nop_(); _nop_();
309 1 _nop_(); _nop_(); _nop_();
310 1
311 1 DrawRect(0,0,0,63,1);
312 1 DrawRect(0,0,96,0,1);
313 1 DrawRect(0,63,96,63,1);
314 1
315 1 for(rowcol.i=0;rowcol.i<31;rowcol.i++)
316 1 {
317 2 for(rowcol.j=0;rowcol.j<8;rowcol.j++)
318 2 {
319 3 SetDispCurPage(1,rowcol.j);
320 3 SetDispCurCol(1,(97+rowcol.i)%64);
321 3 WriteData(1,bmpInfo[rowcol.i][rowcol.j]);
322 3 }
323 2 }
324 1 while(kBegin);
325 1 srand(TH1<<8|TH0);
326 1 TR0=0;
327 1 NewGame(&myGame);
328 1
329 1 while(1){
330 2 KEY=0xFF;
331 2 while(kBegin);
332 2 if(!kAutoRun){
333 3 ComputerRun();
334 3 LastKey=KEY;
335 3 continue;
336 3 }
337 2 if(LastKey!=KEY){
338 3 tKey=KEY;
339 3 Delay(5); // 消抖
340 3 }
341 2 else{
342 3 tKey=-1;
343 3 }
344 2 if(tKey==KEY){
345 3 LastKey=KEY;
346 3 if(!kMoveTurn){
347 4 MoveBlock(&myGame,eMoveTurn);
348 4 ClrLastBlock();
349 4 DrawCurBlock();
350 4 }
351 3 if(!kMoveLeft){
352 4 MoveBlock(&myGame,eMoveLeft);
353 4 ClrLastBlock();
354 4 DrawCurBlock();
355 4 }
356 3 if(!kMoveRight){
357 4 MoveBlock(&myGame,eMoveRight);
358 4 ClrLastBlock();
359 4 DrawCurBlock();
360 4 }
361 3 if(!kMoveDown){
362 4 while(DriveBlockDown(&myGame)){
363 5 ClrLastBlock();
364 5 DrawCurBlock();
365 5 Delay(100);
C51 COMPILER V7.06 MDESIGN 11/12/2008 09:12:22 PAGE 7
366 5 }
367 4 }
368 3 }
369 2 timer+=1;
370 2 if(timer>=MAX_TIMER)
371 2 {
372 3 timer=0;
373 3 if(DriveBlockDown(&myGame))
374 3 {
375 4 ClrLastBlock();
376 4 DrawCurBlock();
377 4 }
378 3 }
379 2 }
380 1 }
381
382
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1623 ----
CONSTANT SIZE = 248 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 26
IDATA SIZE = 49 112
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -