movedecidethree.c

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

C
228
字号
//*************************************************************************************************
//*																								  *
//*			******************************判断方块3是否可以移动**************************		  *
//*																								  *
//*************************************************************************************************
#include "GameGraph.h"
#include "GameProcess.h"


//*************************************************************************************************
//*																								  *
//*			***********************************状态1判断********************************		  *
//*																								  *
//*************************************************************************************************
unsigned char ucDecideThreeStateOne(unsigned char ucAction)
{
	switch(ucAction)
		{
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<是否可以旋转>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		case ACTIONROTATE:
				if(uc_BlockRow==0||uc_BlockRow==20)
					return 0;
				if(ucReadBlock(uc_BlockRow-1,uc_BlockLine+1)==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_BlockLine<2||uc_BlockRow==0)
					return 0;
				if(ucReadBlock(uc_BlockRow,uc_BlockLine-2)==0)
					if(ucReadBlock(uc_BlockRow-1,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+1)==0)
							return 1;
				break;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<是否可以向左移动>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		case ACTIONLEFT:
				if(uc_BlockLine>9||uc_BlockRow==0)
					return 0;
				if(ucReadBlock(uc_BlockRow,uc_BlockLine+2)==0)
					if(ucReadBlock(uc_BlockRow-1,uc_BlockLine+1)==0)
						return 1;
				break;

		default:break;
		}
	return 0;
}

//*************************************************************************************************
//*																								  *
//*			***********************************状态2判断********************************		  *
//*																								  *
//*************************************************************************************************
unsigned char ucDecideThreeStateTwo(unsigned char ucAction)
{
	switch(ucAction)
		{
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<是否可以旋转>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		case ACTIONROTATE:
				if(uc_BlockRow==0||uc_BlockLine==11)
					return 0;
				if(ucReadBlock(uc_BlockRow-1,uc_BlockLine-1)==0)
					if(ucReadBlock(uc_BlockRow+1,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_BlockRow==0||uc_BlockLine<2)
					return 0;
				if(ucReadBlock(uc_BlockRow,uc_BlockLine-2)==0)
					if(ucReadBlock(uc_BlockRow-1,uc_BlockLine-1)==0)
						if(ucReadBlock(uc_BlockRow+1,uc_BlockLine-1)==0)
							return 1;
				break;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<是否可以向下移动>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		case ACTIONDOWN:
				if(uc_BlockRow==19)
					return 0;
				if(ucReadBlock(uc_BlockRow+2,uc_BlockLine)==0)
					if(ucReadBlock(uc_BlockRow+1,uc_BlockLine-1)==0)
						return 1;
				break;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<是否可以向左移动>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		case ACTIONLEFT:
				if(uc_BlockLine>10)
					return 0;
				if(ucReadBlock(uc_BlockRow,uc_BlockLine+1)==0)
					if(ucReadBlock(uc_BlockRow-1,uc_BlockLine+1)==0)
						if(ucReadBlock(uc_BlockRow+1,uc_BlockLine+1)==0)
							return 1;
				break;

		default:break;
		}
	return 0;
}

//*************************************************************************************************
//*																								  *
//*			***********************************状态3判断********************************		  *
//*																								  *
//*************************************************************************************************
unsigned char ucDecideThreeStateThree(unsigned char ucAction)
{
	switch(ucAction)
		{
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<是否可以旋转>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		case ACTIONROTATE:
				if(uc_BlockRow==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-1,uc_BlockLine)==0)
							if(ucReadBlock(uc_BlockRow-1,uc_BlockLine+1)==0)
								return 1;
				break;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<是否可以向右移动>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		case ACTIONRIGHT:
				if(uc_BlockLine<2)
					return 0;
				if(ucReadBlock(uc_BlockRow,uc_BlockLine-2)==0)
					if(ucReadBlock(uc_BlockRow+1,uc_BlockLine-1)==0)
						return 1;
				break;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<是否可以向下移动>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		case ACTIONDOWN:
				if(uc_BlockRow>18)
					return 0;
				if(ucReadBlock(uc_BlockRow+2,uc_BlockLine)==0)
					if(ucReadBlock(uc_BlockRow+1,uc_BlockLine-1)==0)
						if(ucReadBlock(uc_BlockRow+1,uc_BlockLine+1)==0)
							return 1;
				break;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<是否可以向左移动>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		case ACTIONLEFT:
				if(uc_BlockLine>9)
					return 0;
				if(ucReadBlock(uc_BlockRow,uc_BlockLine+2)==0)
					if(ucReadBlock(uc_BlockRow+1,uc_BlockLine+1)==0)
						return 1;
				break;

		default:break;
		}
	return 0;
}

//*************************************************************************************************
//*																								  *
//*			***********************************状态4判断********************************		  *
//*																								  *
//*************************************************************************************************
unsigned char ucDecideThreeStateFour(unsigned char ucAction)
{
	switch(ucAction)
		{
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<是否可以旋转>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		case ACTIONROTATE:
				if(uc_BlockRow==0||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-1,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-1,uc_BlockLine-1)==0)
							return 1;
				break;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<是否可以向下移动>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		case ACTIONDOWN:
				if(uc_BlockRow>18)
					return 0;
				if(ucReadBlock(uc_BlockRow+2,uc_BlockLine)==0)
					if(ucReadBlock(uc_BlockRow+1,uc_BlockLine+1)==0)
						return 1;
				break;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<是否可以向左移动>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		case ACTIONLEFT:
				if(uc_BlockLine>9)
					return 0;
				if(ucReadBlock(uc_BlockRow,uc_BlockLine+2)==0)
					if(ucReadBlock(uc_BlockRow+1,uc_BlockLine+1)==0)
						if(ucReadBlock(uc_BlockRow-1,uc_BlockLine+1)==0)
							return 1;
				break;

		default:break;
		}
	return 0;
}

//*************************************************************************************************
//*																								  *
//*			***********************************状态分派函数*****************************		  *
//*																								  *
//*************************************************************************************************
unsigned char ucMoveDecideThree(unsigned char ucAction)
{
	switch(uc_BlockState)
		{
		case STATEONE:return ucDecideThreeStateOne(ucAction);break;
		case STATETWO:return ucDecideThreeStateTwo(ucAction);break;
		case STATETHREE:return ucDecideThreeStateThree(ucAction);break;
		case STATEFOUR:return ucDecideThreeStateFour(ucAction);break;
		default:break;
		}	
	return 0;
}

⌨️ 快捷键说明

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