📄 game.lst
字号:
Game_clear_block(nblock);
nblock.shape++;
break;
case(4):
if((nblock.x+2==MaxLine)||Game_check_change(nblock))
return nblock;
Game_clear_block(nblock);
nblock.shape=1;
break;
}
break;
case CP_Gameblock_Z:
switch(nblock.shape)
{
case(1):
if((Game_gridMatrix[nblock.x+1][nblock.y])||(Game_gridMatrix[nblock.x][nblock.y+1]))
return nblock;
Game_clear_block(nblock);
nblock.shape++;
break;
case(2):
if((Game_gridMatrix[nblock.x][nblock.y])||(Game_gridMatrix[nblock.x+1][nblock.y+1]))
return nblock;
Game_clear_block(nblock);
nblock.shape--;
break;
}
break;
default:
break;
}
return nblock;
}
void Game_draw_delline(BYTE nline,BOOL Line1,BOOL Line2,BOOL Line3)
{
BYTE i,j,k;
for(k=0;k<2;k++)
{
Osd_SetTextColor(CP_BlueColor, CP_BlackColor);
for(j=nline;j<nline+3;j++)
for(i=1;i<MaxColume;i++)
{
if(j==nline)
{
if(!Line1)
break;
}
else if(j==nline+1)
{
if(!Line2)
break;
}
else
{
if(!Line3)
break;
}
C51 COMPILER V8.01 GAME 11/28/2006 08:08:06 PAGE 11
Osd_DrawStr(i,j,"\x087");
}
Delay1ms(200);
Osd_SetTextColor(CP_BlackColor, CP_BlackColor);
for(j=nline;j<nline+3;j++)
for(i=1;i<MaxColume;i++)
{
if(j==nline)
{
if(!Line1)
break;
}
else if(j==nline+1)
{
if(!Line2)
break;
}
else
{
if(!Line3)
break;
}
Osd_DrawStr(i,j,"\x088");
}
Delay1ms(200);
}
}
BOOL Game_del_line(BYTE nline)
{
BYTE i,j,k,m;
BOOL Flag_1=FALSE;
BOOL Flag_del1=FALSE,Flag_del2=FALSE,Flag_del3=FALSE;
for(j=nline;j<nline+3;j++)
for(i=1;i<MaxColume;i++)
{
if(j>=MaxLine)
break;
if(!Game_gridMatrix[i][j])
break;
if(i==MaxColume-1)
{
Score++;
if(j==nline)
Flag_del1=TRUE;
else if(j==nline+1)
Flag_del2=TRUE;
else
Flag_del3=TRUE;
Flag_1=TRUE;
for(m=j;m>0;m--)
for(k=0;k<MaxColume;k++)
Game_gridMatrix[k][m]=Game_gridMatrix[k][m-1];
}
C51 COMPILER V8.01 GAME 11/28/2006 08:08:06 PAGE 12
}
if(Flag_1)
Game_draw_delline(nline,Flag_del1,Flag_del2,Flag_del3);
return Flag_1;
}
void GameVariableInitial(void)
{
g_bGameEnable=0;
g_ucGameKeyControlStatus=GK_GameKeyNop;
}
BOOL Game_initial(void)
{
Score=0;
g_bGameEnable=1;
g_ucGameStatus=GS_GameReStart;
return TRUE;
}
BOOL Game_Start(void)
{
g_ucGameStatus=GS_GameRunning;
Game_MenuExec();
Game_ini_grid();
g_GameNowBlock=Game_createblock();
g_GameNextBlock=Game_createblock();
Game_draw_next(g_GameNextBlock);
Game_draw_block(g_GameNowBlock);
return TRUE;
}
void GameOverCheck(void)
{
if(Game_check_top(g_GameNextBlock))
{
g_ucGameStatus=GS_GameStop;
Game_restart();
}
else
{
g_GameNowBlock=g_GameNextBlock;
g_GameNextBlock=Game_createblock();
Game_draw_next(g_GameNextBlock);
Game_draw_block(g_GameNowBlock);
}
}
void Gameprocess(void)
{
if(g_ucGameKeyControlStatus)
{
switch(g_ucGameKeyControlStatus)
{
case GK_GameKeyDown://for change block
Set_GameBlockFastDownFlag();
g_uwGameMsCounter=GameFastTick;
break;
case GK_GameKeyTurn://for change block
g_GameNowBlock=Game_change(g_GameNowBlock);
C51 COMPILER V8.01 GAME 11/28/2006 08:08:06 PAGE 13
Game_draw_block(g_GameNowBlock);
if(Game_check_bottom(g_GameNowBlock))
{
if(Game_del_line(g_GameNowBlock.y))
{Game_draw_score();}
Game_draw_grid(g_GameNowBlock);
GameOverCheck();
}
break;
case GK_GameKeyLeft:
if(!Game_check_lborder(g_GameNowBlock)&&!Game_check_bottom(g_GameNowBlock))
{
Game_clear_block(g_GameNowBlock);
g_GameNowBlock.x-=1;
Game_draw_block(g_GameNowBlock);
}
break;
case GK_GameKeyRight:
if(!Game_check_rborder(g_GameNowBlock)&&!Game_check_bottom(g_GameNowBlock))
{
Game_clear_block(g_GameNowBlock);
g_GameNowBlock.x+=1;
Game_draw_block(g_GameNowBlock);
}
break;
default:
break;
}
g_ucGameKeyControlStatus=GK_GameKeyNop;
}
if (GameBlockDownFlag)
{
Clr_GameBlockDownFlag() ;
if(!Game_check_bottom(g_GameNowBlock))
{
Game_clear_block(g_GameNowBlock);
g_GameNowBlock.y+=1;
Game_draw_block(g_GameNowBlock);
}
else
{
if(Game_del_line(g_GameNowBlock.y))
{
Game_draw_score();
}
Game_draw_grid(g_GameNowBlock);
GameOverCheck();
}
}
}
void GameHandle(void)
{
if (!g_bGameEnable)
return;
switch(g_ucGameStatus)
{
case GS_GameRunning:
Gameprocess();
break;
C51 COMPILER V8.01 GAME 11/28/2006 08:08:06 PAGE 14
case GS_GameReStart:
Game_Start();
break;
case GS_GameExit:
Osd_Hide();
g_ucMenuPageIndex=RootMenu;
g_ucMenuItemIndex=0;
g_bGameEnable=0;
Set_InputTimingChangeFlag();
break;
case GS_GameStop:
break;
}
}
#endif
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = ---- ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -