📄 mst705Ȧ
字号:
#define _GAME_C_
#include <stdlib.h>
#include "types.h"
#include "board.h"
#include "global.h"
#include "keypaddef.h"
#include "menu.h"
#include "adjust.h"
#include "ms_reg.h"
#include "msosd.h"
#include "power.h"
#include "misc.h"
#include "autofunc.h"
#include "nvram.h"
#include "userpref.h"
#include "panel.h"
#include "mstar.h"
#include "ms_rwreg.h"
#include "adjust.h"
#include "mcu.h"
#include "menustr.h"
#include "msAce.h"
#include "menufunc.h"
#include "Game.h"
#include "keypad.h"
#include "menustr.h"
#include "debug.h"
#if GAME_ENABLE
/********************定义全局变量*****************************/
XDATA BYTE Game_gridMatrix[MaxColume][MaxLine];/*网格数组,0表示该格无方块,1则有运动方块,2则有静止方块*/
XDATA BYTE TempMatrix[3][3];
XDATA WORD Score;
/**************************定义每种方块的形状***********************************/
BYTE code Game_I_SHAPE1[3][3]= {0,1,0,
0,1,0,
0,1,0
}; //*
BYTE code Game_I_SHAPE2[3][3]={0,0,0,
1,1,1,
0,0,0
};
BYTE code Game_O_SHAPE[3][3]= {0,0,0,
0,1,1,
0,1,1
};
BYTE code Game_SO_SHAPE[3][3]= {0,0,0,
0,0,0,
0,0,1
};
BYTE code Game_T_SHAPE1[3][3]={
0,0,0,
1,1,1,
0,1,0
};
BYTE code Game_T_SHAPE2[3][3]={0,1,0,
1,1,0,
0,1,0
};
BYTE code Game_T_SHAPE3[3][3]={0,1,0,
1,1,1,
0,0,0
};
BYTE code Game_T_SHAPE4[3][3]={0,1,0,
0,1,1,
0,1,0
};
BYTE code Game_L_SHAPE1[3][3]={0,1,0,
0,1,0,
0,1,1
};
BYTE code Game_L_SHAPE2[3][3]={0,0,0,
1,1,1,
1,0,0
};
BYTE code Game_L_SHAPE3[3][3]={1,1,0,
0,1,0,
0,1,0
};
BYTE code Game_L_SHAPE4[3][3]={0,0,1,
1,1,1,
0,0,0
};
BYTE code Game_Z_SHAPE1[3][3]={1,0,0,
0,1,0,
0,0,0
};
BYTE code Game_Z_SHAPE2[3][3]={0,1,0,
1,0,0,
0,0,0
};
//=======================================================================
void Game_MenuExec(void)
{
BYTE i,j;
Osd_SetTextColor(CP_BlueColor, CP_TransparenceColor);
for(i=0;i<=MaxColume+10;i++)
for(j=MinLine;j<MinLine+2;j++)
Osd_DrawStr(i,j,"\x089");
Osd_SetTextColor(CP_BlackColor, CP_TransparenceColor);
for(i=0;i<=MaxColume;i++)
for(j=MinLine+2;j<MaxLine;j++)
Osd_DrawStr(i,j,"\x089");
Osd_SetTextColor(CP_YellowColor, CP_BlackColor);
i=MinColume-1;
for(j=MinLine+2;j<MaxLine;j++)
Osd_DrawStr(i,j,"\x08A");
i=MaxColume;
for(j=MinLine+2;j<MaxLine;j++)
Osd_DrawStr(i,j,"\x08A");
Osd_SetTextColor(CP_GreenColor, CP_SeaBlueColor);
Osd_DrawStr(MaxColume+1,MinLine+2," TETRIS ");
Osd_SetTextColor(CP_YellowColor, CP_SeaBlueColor);
Osd_DrawStr(MaxColume+1,MaxLine-5,"CH TURN");
Osd_DrawStr(MaxColume+3,MaxLine-5,"\x08B");
Osd_DrawStr(MaxColume+1,MaxLine-4,"CH DOWN");
Osd_DrawStr(MaxColume+3,MaxLine-4,"\x08C");
Osd_DrawStr(MaxColume+1,MaxLine-3,"VOL-: LEFT");
Osd_DrawStr(MaxColume+1,MaxLine-2,"VOL :RIGHT");
Osd_DrawStr(MaxColume+4,MaxLine-2,"\x08D");
Osd_DrawStr(MaxColume+1,MaxLine-1,"POWER:EXIT");
Osd_SetTextColor(CP_PinkColor, CP_SeaBlueColor);
for(i=MaxColume+1;i<MaxColume+11;i++)
for(j=MinLine+3;j<MinLine+7;j++)
Osd_DrawStr(i,j,"\x089");
Osd_SetTextColor(CP_RedColor, CP_PinkColor);
Osd_DrawStr(MaxColume+4,MinLine+3,"NEXT");
Osd_SetTextColor(CP_YellowColor, CP_RedColor);
Osd_DrawStr(MaxColume+1,MaxLine-6,"SCORE ");
Game_draw_score();
}
void Game_draw_score(void)
{
BYTE GameNum0,GameNum1,GameNum2;
if(Score>999)
Score=999;
GameNum0=Score/100;
GameNum1=(Score%100)/10;
GameNum2=Score%10;
Osd_SetTextColor(CP_YellowColor, CP_RedColor);
DrawNum(MaxColume+7,MaxLine-6,1,GameNum0);
DrawNum(MaxColume+8,MaxLine-6,1,GameNum1);
DrawNum(MaxColume+9,MaxLine-6,1,GameNum2);
}
void Game_draw_next(Gameblock drblock)
{
BYTE i,j;
Game_get_matrix(drblock);
Osd_SetTextColor(CP_RedColor, CP_PinkColor);
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
Osd_DrawStr(MaxColume+4+i,MinLine+4+j,"\x088");
}
Osd_SetTextColor(drblock.color, CP_PinkColor);
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
if(TempMatrix[i][j]==1)
Osd_DrawStr(MaxColume+4+i,MinLine+4+j,"\x087");
}
}
void Game_restart(void)
{
BYTE i,j;
Osd_SetTextColor(CP_SeaBlueColor, CP_SeaBlueColor);
for(i=MinColume;i<MaxColume;i++)
for(j=MinLine+2;j<MaxLine;j++)
Osd_DrawStr(i,j,"\x089");
Osd_SetTextColor(CP_YellowColor, CP_SeaBlueColor);
Osd_DrawStr(MinColume-1,MaxLine-6,"Game Over");
}
void Game_copy_matrix(BYTE Copy[3][3], BYTE Result[3][3])
{
BYTE i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
Result[i][j]=Copy[i][j];
}
}
void Game_get_matrix(Gameblock nblock)
{
switch(nblock.type)
{
case CP_Gameblock_I:
if(nblock.shape==1)
Game_copy_matrix(Game_I_SHAPE1,TempMatrix);
if(nblock.shape==2)
Game_copy_matrix(Game_I_SHAPE2,TempMatrix);
break;
case CP_Gameblock_O:
Game_copy_matrix(Game_O_SHAPE,TempMatrix);
break;
case CP_Gameblock_SO:
Game_copy_matrix(Game_SO_SHAPE,TempMatrix);
break;
case CP_Gameblock_T:
switch(nblock.shape)
{
case(1):
Game_copy_matrix(Game_T_SHAPE1,TempMatrix);
break;
case(2):
Game_copy_matrix(Game_T_SHAPE2,TempMatrix);
break;
case(3):
Game_copy_matrix(Game_T_SHAPE3,TempMatrix);
break;
case(4):
Game_copy_matrix(Game_T_SHAPE4,TempMatrix);
break;
default:
break;
}
break;
case CP_Gameblock_L:
switch(nblock.shape)
{
case(1):
Game_copy_matrix(Game_L_SHAPE1,TempMatrix);
break;
case(2):
Game_copy_matrix(Game_L_SHAPE2,TempMatrix);
break;
case(3):
Game_copy_matrix(Game_L_SHAPE3,TempMatrix);
break;
case(4):
Game_copy_matrix(Game_L_SHAPE4,TempMatrix);
break;
default:
break;
}
break;
case CP_Gameblock_Z:
if(nblock.shape==1)
Game_copy_matrix(Game_Z_SHAPE1,TempMatrix);
if(nblock.shape==2)
Game_copy_matrix(Game_Z_SHAPE2,TempMatrix);
break;
default:
break;
}
}
void Game_draw_block(Gameblock drblock)
{
BYTE i,j;
Game_get_matrix(drblock);
Osd_SetTextColor(drblock.color, CP_BlackColor);
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
if(TempMatrix[i][j]==1)
{
if(drblock.y+j>MinLine+1)
Osd_DrawStr(drblock.x+i,drblock.y+j,"\x087");
Game_gridMatrix[drblock.x+i][drblock.y+j]=1;
}
}
}
void Game_clear_block(Gameblock drblock)
{
BYTE i,j;
Game_get_matrix(drblock);
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
if(TempMatrix[i][j]==1)
{
if(drblock.y+j>MinLine+1)
Osd_DrawStr(drblock.x+i,drblock.y+j,"\x088");
Game_gridMatrix[drblock.x+i][drblock.y+j]=0;
}
}
}
BOOL Game_check_top(Gameblock nblock)
{
BYTE i;
BOOL Flag_1=FALSE;
for(i=1;i<MaxColume;i++)
{
if(Game_gridMatrix[i][nblock.y+2]==1)
Flag_1=TRUE;
}
return Flag_1;
}
BOOL Game_check_lborder(Gameblock nblock)
{
BYTE i,j;
Game_get_matrix(nblock);
for(j=0;j<3;j++)
for(i=0;i<3;i++)
{
if(TempMatrix[i][j]==1)
{
BOOL Flag_1=FALSE;
if((nblock.x+i-1<MinColume)||(Game_gridMatrix[nblock.x+i-1][nblock.y+j]==1))
Flag_1=TRUE;
if(Flag_1)
return TRUE;
else
break;
}
}
return FALSE;
}
BOOL Game_check_rborder(Gameblock nblock)
{
BYTE i,j;
Game_get_matrix(nblock);
for(j=0;j<3;j++)
for(i=2;i>=0;i--)
{
if(TempMatrix[i][j]==1)
{
BOOL Flag_1=FALSE;
if((nblock.x+i+1==MaxColume)||(Game_gridMatrix[nblock.x+i+1][nblock.y+j]==1))
Flag_1=TRUE;
if(Flag_1)
return TRUE;
else
break;
}
}
return FALSE;
}
BOOL Game_check_bottom(Gameblock nblock)
{
BYTE i,j;
Game_get_matrix(nblock);
for(i=0;i<3;i++)
for(j=2;j>=0;j--)
{
if(TempMatrix[i][j]==1)
{
BOOL Flag_1=FALSE;
if(i>3||j>3) //yurian
break;
if((nblock.y+j+1==MaxLine)||(Game_gridMatrix[nblock.x+i][nblock.y+j+1]==1))
Flag_1=TRUE;
if(Flag_1)
return TRUE;
else
break;
}
}
return FALSE;
}
BOOL Game_check_change(Gameblock nblock)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -