📄 blockgame.lst
字号:
233 1 BOOL bOperated=myTrue;
234 1
235 1 if(!MoveBlock(pGame,eMoveTurn)) /*旋转不成功*/
236 1 {
237 2 bOperated = myFalse;
238 2 }
239 1 if(!bOperated)
240 1 {
241 2 if(MoveBlock(pGame,eMoveLeft))
C51 COMPILER V7.06 BLOCKGAME 11/12/2008 09:12:21 PAGE 5
242 2 {
243 3 if(!MoveBlock(pGame,eMoveTurn)) /*左移旋转不成功*/
244 3 {
245 4 bOperated = myFalse;
246 4 MoveBlock(pGame,eMoveRight);
247 4 }
248 3 else
249 3 bOperated = myTrue;
250 3 }
251 2 }
252 1
253 1 if(!bOperated)
254 1 {
255 2 if(MoveBlock(pGame,eMoveRight))
256 2 {
257 3 if(!MoveBlock(pGame,eMoveTurn)) /*右移旋转不成功*/
258 3 {
259 4 bOperated = myFalse;
260 4 MoveBlock(pGame,eMoveLeft);
261 4 }
262 3 else
263 3 bOperated = myTrue;
264 3 }
265 2 }
266 1
267 1 if(!bOperated)
268 1 {
269 2 if(MoveBlock(pGame,eMoveDown))
270 2 {
271 3 if(!MoveBlock(pGame,eMoveTurn)) /*下移旋转不成功*/
272 3 {
273 4 bOperated = myFalse;
274 4 MoveBlock(pGame,eMoveUp);
275 4 }
276 3 else
277 3 bOperated = myTrue;
278 3 }
279 2 }
280 1
281 1 if(!bOperated)
282 1 {
283 2 if(MoveBlock(pGame,eMoveUp))
284 2 {
285 3 if(!MoveBlock(pGame,eMoveTurn)) /*上移旋转不成功*/
286 3 {
287 4 bOperated = myFalse;
288 4 MoveBlock(pGame,eMoveDown);
289 4 }
290 3 else
291 3 bOperated = myTrue;
292 3 }
293 2 }
294 1
295 1 return bOperated;
296 1 }
297
298 /*-固定方块在方格上-*/
299 void FixCurBlock( BLOCK_GAME* pGame )
300 {
301 1 UINT8 i;
302 1 UINT16 tmp;
303 1 for(i=0;i<4;i++)
C51 COMPILER V7.06 BLOCKGAME 11/12/2008 09:12:21 PAGE 6
304 1 {
305 2 tmp=pGame->GameBlock.BlocksInfo;
306 2 tmp=(tmp>>i*4)&0x000F;
307 2 tmp=tmp<<pGame->GameBlock.nFirstBlockCol;
308 2
309 2 pGame->GameGrid.Grid[pGame->GameBlock.nFirstBlockRow+i] =
310 2 pGame->GameGrid.Grid[pGame->GameBlock.nFirstBlockRow+i]|tmp;
311 2 }
312 1 }
313
314 /*-消满行-*/
315 BOOL AdjustGrid( BLOCK_GAME* pGame )
316 {
317 1 UINT8 i=0,m=0;
318 1 BOOL bAdjusted=0;
319 1
320 1 for(i=GAME_FIRST_ROW;i<=GAME_LAST_ROW;i++)
321 1 {
322 2 if(pGame->GameGrid.Grid[i]==0xFFFF)
323 2 {
324 3 for(m=i;m>GAME_FIRST_ROW;m--){
325 4 pGame->GameGrid.Grid[m]=pGame->GameGrid.Grid[m-1];
326 4 }
327 3 pGame->GameGrid.Grid[0]=myFalse;
328 3 bAdjusted=1;
329 3 }
330 2 }
331 1 return bAdjusted;
332 1 }
333
334 /*--------------------------------------------------------------------------------*/
335
336 void CopyGame( BLOCK_GAME* pDestGame, BLOCK_GAME* pSourGame )
337 {
338 1 memcpy(pDestGame,pSourGame,sizeof(BLOCK_GAME));
339 1 }
340 void CopyGameGrid( GAME_GRID* pDestGrid, GAME_GRID* pSourGrid )
341 {
342 1 memcpy(pDestGrid,pSourGrid,sizeof(GAME_GRID));
343 1 }
344 void CopyGameBlock( BLOCK_ATTR* pDestBlock, BLOCK_ATTR* pSourBlock )
345 {
346 1 memcpy(pDestBlock,pSourBlock,sizeof(BLOCK_ATTR));
347 1 }
348 void CopyGridAttr(GRID_ATTR* pDestAttr, GRID_ATTR* pSourAttr )
349 {
350 1 memcpy(pDestAttr,pSourAttr,sizeof(GRID_ATTR));
351 1 }
352
353 /*--------------------------------------------------------------------------------*/
354
355 void GetGridAttr( BLOCK_GAME* pGame, GRID_ATTR* pGridAttr )
356 {
357 1 pGridAttr->nLastBlockFirstRow = pGame->GameBlock.nFirstBlockRow;
358 1 GetFullRow(pGame,pGridAttr);
359 1 GetIdleBank(pGame,pGridAttr);
360 1 GetGridHigh(pGame,pGridAttr);
361 1 GetHighEdge(pGame,pGridAttr);
362 1 }
363 void GetGridHigh( BLOCK_GAME* pGame, GRID_ATTR* pGridAttr )
364 {
365 1 UINT8 i=0;
C51 COMPILER V7.06 BLOCKGAME 11/12/2008 09:12:21 PAGE 7
366 1 for(i=GAME_FIRST_ROW;i<=GAME_LAST_ROW;i++)
367 1 {
368 2 if(pGame->GameGrid.Grid[i]&0x1FF8){
369 3 break;
370 3 }
371 2 }
372 1 pGridAttr->nGrideHeight = GAME_LAST_ROW-i+1;
373 1 }
374
375 void GetFullRow( BLOCK_GAME* pGame, GRID_ATTR* pGridAttr )
376 {
377 1 UINT8 nFullCount=0;
378 1 UINT8 i=0;
379 1 nFullCount=0;
380 1 for(i=GAME_FIRST_ROW;i<=GAME_LAST_ROW;i++)
381 1 {
382 2 if(pGame->GameGrid.Grid[i]==0xFFFF)
383 2 {
384 3 nFullCount++;
385 3 }
386 2 }
387 1 pGridAttr->nFullRowCount=nFullCount;
388 1 }
389
390 /* 计算无用的空格数 */
391 void GetIdleBank( BLOCK_GAME* pGame, GRID_ATTR* pGridAttr )
392 {
393 1 UINT8 nIdleBankCount=0;
394 1 UINT8 i=0, j=0;
395 1 nIdleBankCount=0;
396 1
397 1 for( j=GAME_FIRST_COL;j<=GAME_LAST_COL;j++)
398 1 {
399 2 i=GAME_FIRST_ROW;
400 2 while(i<=GAME_LAST_ROW
401 2 && (0x0000==(pGame->GameGrid.Grid[i]&(0x0001<<j))) )
402 2 i++; // 找第一个填充格
403 2
404 2 while(i<=GAME_LAST_ROW){
405 3 if( !(pGame->GameGrid.Grid[i++]>>j&0x01) ) nIdleBankCount+=1;
406 3 }
407 2 }
408 1 pGridAttr->nIdleBankCount = nIdleBankCount;
409 1
410 1 }
411 /* 计算高边 */
412 void GetHighEdge(BLOCK_GAME* pGame, GRID_ATTR* pGridAttr )
413 {
414 1 UINT8 i, j, m;
415 1 UINT8 EdgeCount;
416 1 UINT8 tmpBankCount;
417 1 UINT8 MostHighEage;
418 1
419 1 EdgeCount = 0;
420 1 MostHighEage = 0;
421 1
422 1 for(j=GAME_FIRST_COL;j<=GAME_LAST_COL;j++)
423 1 {
424 2 i=GAME_FIRST_ROW;
425 2 while( (i<=GAME_LAST_ROW)
426 2 && (0x0==(pGame->GameGrid.Grid[i]&(0x0001<<j))) )i++;
427 2 m = i;
C51 COMPILER V7.06 BLOCKGAME 11/12/2008 09:12:21 PAGE 8
428 2 tmpBankCount=0; /* 左边 */
429 2 while( (m<=GAME_LAST_ROW)
430 2 && (0x0==(pGame->GameGrid.Grid[m]&(0x0001<<(j-1)))) )
431 2 {
432 3 m++;
433 3 tmpBankCount++;
434 3 MostHighEage=(MostHighEage<tmpBankCount)?tmpBankCount:MostHighEage;
435 3 }
436 2 if(tmpBankCount>2){
437 3 EdgeCount++;
438 3 }
439 2 m = i;
440 2 tmpBankCount=0; /* 右边 */
441 2 while( (m<=GAME_LAST_ROW)
442 2 && (0x0==(pGame->GameGrid.Grid[m]&(0x0001<<(j+1)))) )
443 2 {
444 3 m++;
445 3 tmpBankCount++;
446 3 MostHighEage=(MostHighEage<tmpBankCount)?tmpBankCount:MostHighEage;
447 3 }
448 2 if(tmpBankCount>2){
449 3 EdgeCount++;
450 3 }
451 2 }
452 1 pGridAttr->nHighEdgeCount=EdgeCount;
453 1 pGridAttr->nMostHighEdgeHeight=(0==EdgeCount)?0:MostHighEage;
454 1 }
455 /*--------------------------------------------------------------------------------*/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2394 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 90
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -