movedecidefour.c
来自「用proteus模拟仿真实现俄罗期方块游戏」· C语言 代码 · 共 218 行
C
218 行
//*************************************************************************************************
//* *
//* ******************************判断方块4是否可以移动************************** *
//* *
//*************************************************************************************************
#include "GameGraph.h"
#include "GameProcess.h"
//*************************************************************************************************
//* *
//* *********************************状态1判断********************************** *
//* *
//*************************************************************************************************
unsigned char ucDecideFourStateOne(unsigned char ucAction)
{
switch(ucAction)
{
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<是否可以旋转>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
case ACTIONROTATE:
if(uc_BlockRow==0)
return 0;
if(ucReadBlock(uc_BlockRow-1,uc_BlockLine)==0)
if(ucReadBlock(uc_BlockRow-1,uc_BlockLine+1)==0)
if(ucReadBlock(uc_BlockRow+1,uc_BlockLine)==0)
if(ucReadBlock(uc_BlockRow+1,uc_BlockLine+1)==0)
return 1;
break;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<是否可以向右移动>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
case ACTIONRIGHT:
if(uc_BlockRow==0||uc_BlockLine==0)
return 0;
if(ucReadBlock(uc_BlockRow-1,uc_BlockLine+1)==0)
if(ucReadBlock(uc_BlockRow,uc_BlockLine-1)==0)
return 1;
break;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<是否可以向下移动>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
case ACTIONDOWN:
if(uc_BlockRow==20)
return 0;
if(ucReadBlock(uc_BlockRow+1,uc_BlockLine)==0)
if(ucReadBlock(uc_BlockRow+1,uc_BlockLine+1)==0)
if(ucReadBlock(uc_BlockRow+1,uc_BlockLine+2)==0)
return 1;
break;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<是否可以向左移动>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
case ACTIONLEFT:
if(uc_BlockRow==0||uc_BlockLine==9)
return 0;
if(ucReadBlock(uc_BlockRow,uc_BlockLine+3)==0)
if(ucReadBlock(uc_BlockRow-1,uc_BlockLine+3)==0)
return 1;
break;
default:break;
}
return 0;
}
//*************************************************************************************************
//* *
//* *********************************状态2判断********************************** *
//* *
//*************************************************************************************************
unsigned char ucDecideFourStateTwo(unsigned char ucAction)
{
switch(ucAction)
{
case ACTIONROTATE:
if(uc_BlockRow<2||uc_BlockLine==11)
return 0;
if(ucReadBlock(uc_BlockRow-1,uc_BlockLine+1)==0)
if(ucReadBlock(uc_BlockRow,uc_BlockLine+1)==0)
if(ucReadBlock(uc_BlockRow,uc_BlockLine-1)==0)
if(ucReadBlock(uc_BlockRow-1,uc_BlockLine-1)==0)
return 1;
break;
case ACTIONRIGHT:
if(uc_BlockLine==1)
return 0;
if(ucReadBlock(uc_BlockRow,uc_BlockLine-1)==0)
if(ucReadBlock(uc_BlockRow-1,uc_BlockLine-1)==0)
if(ucReadBlock(uc_BlockRow-2,uc_BlockLine-2)==0)
return 1;
break;
case ACTIONDOWN:
if(uc_BlockRow==20)
return 0;
if(ucReadBlock(uc_BlockRow+1,uc_BlockLine)==0)
if(ucReadBlock(uc_BlockRow-1,uc_BlockLine-1)==0)
return 1;
break;
case ACTIONLEFT:
if(uc_BlockLine==11)
return 0;
if(ucReadBlock(uc_BlockRow,uc_BlockLine+1)==0)
if(ucReadBlock(uc_BlockRow-1,uc_BlockLine+1)==0)
if(ucReadBlock(uc_BlockRow-2,uc_BlockLine+1)==0)
return 1;
break;
default:break;
}
return 0;
}
//*************************************************************************************************
//* *
//* *********************************状态3判断********************************** *
//* *
//*************************************************************************************************
unsigned char ucDecideFourStateThree(unsigned char ucAction)
{
switch(ucAction)
{
case ACTIONROTATE:
if(uc_BlockRow<2)
return 0;
if(ucReadBlock(uc_BlockRow,uc_BlockLine+1)==0)
if(ucReadBlock(uc_BlockRow,uc_BlockLine+2)==0)
if(ucReadBlock(uc_BlockRow-2,uc_BlockLine+2)==0)
if(ucReadBlock(uc_BlockRow-2,uc_BlockLine+1)==0)
return 1;
break;
case ACTIONRIGHT:
if(uc_BlockLine==0)
return 0;
if(ucReadBlock(uc_BlockRow-1,uc_BlockLine-1)==0)
if(ucReadBlock(uc_BlockRow,uc_BlockLine-1)==0)
return 1;
break;
case ACTIONDOWN:
if(uc_BlockRow==20)
return 0;
if(ucReadBlock(uc_BlockRow,uc_BlockLine+1)==0)
if(ucReadBlock(uc_BlockRow,uc_BlockLine+2)==0)
if(ucReadBlock(uc_BlockRow+1,uc_BlockLine)==0)
return 1;
break;
case ACTIONLEFT:
if(uc_BlockLine==9||uc_BlockRow==0)
return 0;
if(ucReadBlock(uc_BlockRow,uc_BlockLine+1)==0)
if(ucReadBlock(uc_BlockRow-1,uc_BlockLine+3)==0)
return 1;
break;
default:break;
}
return 0;
}
//*************************************************************************************************
//* *
//* *********************************状态4判断********************************** *
//* *
//*************************************************************************************************
unsigned char ucDecideFourStateFour(unsigned char ucAction)
{
switch(ucAction)
{
case ACTIONROTATE:
if(uc_BlockRow<2||uc_BlockLine==0)
return 0;
if(ucReadBlock(uc_BlockRow-1,uc_BlockLine+1)==0)
if(ucReadBlock(uc_BlockRow-1,uc_BlockLine-1)==0)
if(ucReadBlock(uc_BlockRow-2,uc_BlockLine-1)==0)
if(ucReadBlock(uc_BlockRow-2,uc_BlockLine+1)==0)
return 1;
break;
case ACTIONRIGHT:
if(uc_BlockRow<2||uc_BlockLine==0)
return 0;
if(ucReadBlock(uc_BlockRow,uc_BlockLine-1)==0)
if(ucReadBlock(uc_BlockRow-1,uc_BlockLine-1)==0)
if(ucReadBlock(uc_BlockRow-2,uc_BlockLine-1)==0)
return 1;
break;
case ACTIONDOWN:
if(uc_BlockRow==20)
return 0;
if(ucReadBlock(uc_BlockRow+1,uc_BlockLine+1)==0)
if(ucReadBlock(uc_BlockRow+1,uc_BlockLine)==0)
return 1;
break;
case ACTIONLEFT:
if(uc_BlockRow<2||uc_BlockLine==10)
return 0;
if(ucReadBlock(uc_BlockRow,uc_BlockLine+2)==0)
if(ucReadBlock(uc_BlockRow-1,uc_BlockLine+1)==0)
if(ucReadBlock(uc_BlockRow-2,uc_BlockLine+1)==0)
return 1;
break;
default:break;
}
return 0;
}
//*************************************************************************************************
//* *
//* *********************************状态分派函数******************************* *
//* *
//*************************************************************************************************
unsigned char ucMoveDecideFour(unsigned char ucAction)
{
switch(uc_BlockState)
{
case STATEONE:return ucDecideFourStateOne(ucAction);break;
case STATETWO:return ucDecideFourStateTwo(ucAction);break;
case STATETHREE:return ucDecideFourStateThree(ucAction);break;
case STATEFOUR:return ucDecideFourStateFour(ucAction);break;
default:break;
}
return 0;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?