movedecidefive.c

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

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


//*************************************************************************************************
//*																								  *
//*			*********************************状态1判断**********************************		  *
//*																								  *
//*************************************************************************************************
unsigned char ucDecideFiveStateOne(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+2)==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,uc_BlockLine-1)==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+2)==0)
							return 1;
				break;
		case ACTIONLEFT:
				if(uc_BlockRow==0||uc_BlockLine==9)
					return 0;
				if(ucReadBlock(uc_BlockRow-1,uc_BlockLine+1)==0)
					if(ucReadBlock(uc_BlockRow,uc_BlockLine+3)==0)
						return 1;
				break;
		default:break;
		}
	return 0;
}

//*************************************************************************************************
//*																								  *
//*			*********************************状态2判断**********************************		  *
//*																								  *
//*************************************************************************************************
unsigned char ucDecideFiveStateTwo(unsigned char ucAction)
{
	switch(ucAction)
		{
		case ACTIONROTATE:
				if(uc_BlockRow<2||uc_BlockLine==10)
					return 0;
				if(ucReadBlock(uc_BlockRow-1,uc_BlockLine)==0)
					if(ucReadBlock(uc_BlockRow-2,uc_BlockLine)==0)
						if(ucReadBlock(uc_BlockRow,uc_BlockLine+2)==0)
							if(ucReadBlock(uc_BlockRow-1,uc_BlockLine+2)==0)
								return 1;
				break;
		case ACTIONRIGHT:
				if(uc_BlockRow<2||uc_BlockLine==0)
					return 0;
				if(ucReadBlock(uc_BlockRow-1,uc_BlockLine)==0)
					if(ucReadBlock(uc_BlockRow-2,uc_BlockLine)==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)
						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+2)==0)
						if(ucReadBlock(uc_BlockRow-2,uc_BlockLine+2)==0)
							return 1;
				break;
		default:break;
		}
	return 0;
}

//*************************************************************************************************
//*																								  *
//*			*********************************状态3判断**********************************		  *
//*																								  *
//*************************************************************************************************
unsigned char ucDecideFiveStateThree(unsigned char ucAction)
{
	switch(ucAction)
		{
		case ACTIONROTATE:
				if(uc_BlockRow<2)
					return 0;
				if(ucReadBlock(uc_BlockRow-2,uc_BlockLine)==0)
					if(ucReadBlock(uc_BlockRow-2,uc_BlockLine-1)==0)
						if(ucReadBlock(uc_BlockRow,uc_BlockLine-1)==0)
							if(ucReadBlock(uc_BlockRow,uc_BlockLine-2)==0)
								return 1;
				break;
		case ACTIONRIGHT:
				if(uc_BlockLine==2)
					return 0;
				if(ucReadBlock(uc_BlockRow,uc_BlockLine-1)==0)
					if(ucReadBlock(uc_BlockRow-1,uc_BlockLine-3)==0)
						return 1;
				break;
		case ACTIONDOWN:
				if(uc_BlockRow==20)
					return 0;
				if(ucReadBlock(uc_BlockRow+1,uc_BlockLine)==0)
					if(ucReadBlock(uc_BlockRow,uc_BlockLine-1)==0)
						if(ucReadBlock(uc_BlockRow,uc_BlockLine-2)==0)
							return 1;
				break;
		case ACTIONLEFT:
				if(uc_BlockLine==11||uc_BlockRow==0)
					return 0;
				if(ucReadBlock(uc_BlockRow,uc_BlockLine+1)==0)
					if(ucReadBlock(uc_BlockRow-1,uc_BlockLine+1)==0)
						return 1;
				break;
		default:break;
		}
	return 0;
}

//*************************************************************************************************
//*																								  *
//*			*********************************状态4判断**********************************		  *
//*																								  *
//*************************************************************************************************
unsigned char ucDecideFiveStateFour(unsigned char ucAction)
{
	switch(ucAction)
		{
		case ACTIONROTATE:
				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)
							if(ucReadBlock(uc_BlockRow-1,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)==0)
					if(ucReadBlock(uc_BlockRow-1,uc_BlockLine+1)==0)
						return 1;
				break;
		case ACTIONLEFT:
				if(uc_BlockRow<2||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-2,uc_BlockLine+2)==0)
							return 1;
				break;
		default:break;
		}
	return 0;
}
//*************************************************************************************************
//*																								  *
//*			*********************************状态分派函数*******************************		  *
//*																								  *
//*************************************************************************************************
unsigned char ucMoveDecideFive(unsigned char ucAction)
{
	switch(uc_BlockState)
		{
		case STATEONE:return ucDecideFiveStateOne(ucAction);break;
		case STATETWO:return ucDecideFiveStateTwo(ucAction);break;
		case STATETHREE:return ucDecideFiveStateThree(ucAction);break;
		case STATEFOUR:return ucDecideFiveStateFour(ucAction);break;
		default:break;
		}
	return 0;
}

⌨️ 快捷键说明

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