moveblockfive.c

来自「用proteus模拟仿真实现俄罗期方块游戏」· C语言 代码 · 共 228 行

C
228
字号
//*************************************************************************************************
//*																								  *
//*			 ********************************移动方块5********************************			  *
//*																								  *
//*************************************************************************************************
#include "GameGraph.h"
#include "GameProcess.h"



//*************************************************************************************************
//*																								  *
//*			*********************************状态1移动**********************************		  *
//*																								  *
//*************************************************************************************************
void vBlockFiveStateOne(unsigned char ucAction)
{
	switch(ucAction)
		{
		case ACTIONROTATE:
				vCleanBlock(uc_BlockRow,uc_BlockLine);
				vCleanBlock(uc_BlockRow-1,uc_BlockLine);
				vCleanBlock(uc_BlockRow,uc_BlockLine+2);
				vShowBlock(uc_BlockRow-1,uc_BlockLine+1);
				vShowBlock(uc_BlockRow+1,uc_BlockLine);
				vShowBlock(uc_BlockRow+1,uc_BlockLine+1);
				uc_BlockRow++;
				uc_BlockState=STATETWO;
				break;
		case ACTIONRIGHT:
				vCleanBlock(uc_BlockRow-1,uc_BlockLine);
				vCleanBlock(uc_BlockRow,uc_BlockLine+2);
				vShowBlock(uc_BlockRow,uc_BlockLine-1);
				vShowBlock(uc_BlockRow-1,uc_BlockLine-1);
				uc_BlockLine--;
				break;
		case ACTIONDOWN:
				if(uc_BlockRow!=0)
					vCleanBlock(uc_BlockRow-1,uc_BlockLine);
				vCleanBlock(uc_BlockRow,uc_BlockLine+1);
				vCleanBlock(uc_BlockRow,uc_BlockLine+2);
				vShowBlock(uc_BlockRow+1,uc_BlockLine);
				vShowBlock(uc_BlockRow+1,uc_BlockLine+1);
				vShowBlock(uc_BlockRow+1,uc_BlockLine+2);
				uc_BlockRow++;
				break;
		case ACTIONLEFT:
				vCleanBlock(uc_BlockRow,uc_BlockLine);
				vCleanBlock(uc_BlockRow-1,uc_BlockLine);
				vShowBlock(uc_BlockRow-1,uc_BlockLine+1);
				vShowBlock(uc_BlockRow,uc_BlockLine+3);
				uc_BlockLine++;
				break;
		default:break;
		}
}



//*************************************************************************************************
//*																								  *
//*			*********************************状态2移动**********************************		  *
//*																								  *
//*************************************************************************************************
void vBlockFiveStateTwo(unsigned char ucAction)
{
	switch(ucAction)
		{
		case ACTIONROTATE:
				vCleanBlock(uc_BlockRow,uc_BlockLine);
				vCleanBlock(uc_BlockRow,uc_BlockLine+1);
				vCleanBlock(uc_BlockRow-2,uc_BlockLine+1);
				vShowBlock(uc_BlockRow,uc_BlockLine+2);
				vShowBlock(uc_BlockRow-1,uc_BlockLine+2);
				vShowBlock(uc_BlockRow-1,uc_BlockLine);
				uc_BlockLine+=2;
				uc_BlockState=STATETHREE;
				break;
		case ACTIONRIGHT:
				vCleanBlock(uc_BlockRow,uc_BlockLine+1);
				vCleanBlock(uc_BlockRow-1,uc_BlockLine+1);
				vCleanBlock(uc_BlockRow-2,uc_BlockLine+1);
				vShowBlock(uc_BlockRow-1,uc_BlockLine);
				vShowBlock(uc_BlockRow-2,uc_BlockLine);
				vShowBlock(uc_BlockRow,uc_BlockLine-1);
				uc_BlockLine--;
				break;
		case ACTIONDOWN:
				vCleanBlock(uc_BlockRow-2,uc_BlockLine+1);
				vCleanBlock(uc_BlockRow,uc_BlockLine);
				vShowBlock(uc_BlockRow+1,uc_BlockLine);
				vShowBlock(uc_BlockRow+1,uc_BlockLine+1);
				uc_BlockRow++;
				break;
		case ACTIONLEFT:
				vCleanBlock(uc_BlockRow,uc_BlockLine);
				vCleanBlock(uc_BlockRow-1,uc_BlockLine+1);
				vCleanBlock(uc_BlockRow-2,uc_BlockLine+1);
				vShowBlock(uc_BlockRow,uc_BlockLine+2);
				vShowBlock(uc_BlockRow-1,uc_BlockLine+2);
				vShowBlock(uc_BlockRow-2,uc_BlockLine+2);
				uc_BlockLine++;
				break;
		default:break;
		}
}


//*************************************************************************************************
//*																								  *
//*			*********************************状态3移动**********************************		  *
//*																								  *
//*************************************************************************************************
void vBlockFiveStateThree(unsigned char ucAction)
{
	switch(ucAction)
		{
		case ACTIONROTATE:
				vCleanBlock(uc_BlockRow,uc_BlockLine);
				vCleanBlock(uc_BlockRow-1,uc_BlockLine);
				vCleanBlock(uc_BlockRow-1,uc_BlockLine-2);
				vShowBlock(uc_BlockRow-2,uc_BlockLine);
				vShowBlock(uc_BlockRow-2,uc_BlockLine-1);
				vShowBlock(uc_BlockRow,uc_BlockLine-1);
				uc_BlockLine--;
				uc_BlockState=STATEFOUR;
				break;
		case ACTIONRIGHT:
				vCleanBlock(uc_BlockRow,uc_BlockLine);
				vCleanBlock(uc_BlockRow-1,uc_BlockLine);
				vShowBlock(uc_BlockRow,uc_BlockLine-1);
				vShowBlock(uc_BlockRow-1,uc_BlockLine-3);
				uc_BlockLine--;
				break;
		case ACTIONDOWN:
				if(uc_BlockRow>0)
					{
					vCleanBlock(uc_BlockRow-1,uc_BlockLine);
					vCleanBlock(uc_BlockRow-1,uc_BlockLine-1);
					vCleanBlock(uc_BlockRow-1,uc_BlockLine-2);
					}
				vShowBlock(uc_BlockRow,uc_BlockLine-1);
				vShowBlock(uc_BlockRow,uc_BlockLine-2);
				vShowBlock(uc_BlockRow+1,uc_BlockLine);
				uc_BlockRow++;
				break;
		case ACTIONLEFT:
				vCleanBlock(uc_BlockRow-1,uc_BlockLine-2);
				vCleanBlock(uc_BlockRow,uc_BlockLine);
				vShowBlock(uc_BlockRow,uc_BlockLine+1);
				vShowBlock(uc_BlockRow-1,uc_BlockLine+1);
				uc_BlockLine++;
				break;
		default:break;
		}
}


//*************************************************************************************************
//*																								  *
//*			*********************************状态4移动**********************************		  *
//*																								  *
//*************************************************************************************************
void vBlockFiveStateFour(unsigned char ucAction)
{
	switch(ucAction)
		{
		case ACTIONROTATE:
				vCleanBlock(uc_BlockRow,uc_BlockLine);
				vCleanBlock(uc_BlockRow-2,uc_BlockLine);
				vCleanBlock(uc_BlockRow-2,uc_BlockLine+1);
				vShowBlock(uc_BlockRow-1,uc_BlockLine+1);
				vShowBlock(uc_BlockRow-1,uc_BlockLine-1);
				vShowBlock(uc_BlockRow-2,uc_BlockLine-1);
				uc_BlockRow--;
				uc_BlockLine--;
				uc_BlockState=STATEONE;
				break;
		case ACTIONRIGHT:
				vCleanBlock(uc_BlockRow,uc_BlockLine);
				vCleanBlock(uc_BlockRow-1,uc_BlockLine);
				vCleanBlock(uc_BlockRow-2,uc_BlockLine+1);
				vShowBlock(uc_BlockRow,uc_BlockLine-1);
				vShowBlock(uc_BlockRow-1,uc_BlockLine-1);
				vShowBlock(uc_BlockRow-2,uc_BlockLine-1);
				uc_BlockLine--;
				break;
		case ACTIONDOWN:
				if(uc_BlockRow>1)
					{
					vCleanBlock(uc_BlockRow-2,uc_BlockLine);
					vCleanBlock(uc_BlockRow-2,uc_BlockLine+1);
					}
				vShowBlock(uc_BlockRow+1,uc_BlockLine);
				if(uc_BlockRow!=0)
				vShowBlock(uc_BlockRow-1,uc_BlockLine+1);
				uc_BlockRow++;
				break;
		case ACTIONLEFT:
				vCleanBlock(uc_BlockRow,uc_BlockLine);
				vCleanBlock(uc_BlockRow-1,uc_BlockLine);
				vCleanBlock(uc_BlockRow-2,uc_BlockLine);
				vShowBlock(uc_BlockRow,uc_BlockLine+1);
				vShowBlock(uc_BlockRow-1,uc_BlockLine+1);
				vShowBlock(uc_BlockRow-2,uc_BlockLine+2);
				uc_BlockLine++;
				break;
		default:break;
		}
}


//*************************************************************************************************
//*																								  *
//*			*********************************状态分派函数*******************************		  *
//*																								  *
//*************************************************************************************************
void vMoveBlockFive(unsigned char ucAction)
{
	switch(uc_BlockState)
	{
	case STATEONE:vBlockFiveStateOne(ucAction);break;
	case STATETWO:vBlockFiveStateTwo(ucAction);break;
	case STATETHREE:vBlockFiveStateThree(ucAction);break;
	case STATEFOUR:vBlockFiveStateFour(ucAction);break;
	default:break;
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?