⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 movedecide.c

📁 单片机的俄罗斯方块程序,含Proteus 仿真文件及详细注释
💻 C
字号:
//*************************************************************************************************
//*																								  *
//*			 ******************************方块移动判定函数**************************			  *
//*																								  *
//*************************************************************************************************
#include "includes.h"

unsigned char ucMoveDecide(unsigned char ucAction)
{
	unsigned char ucRow=uc_BlockRow,ucLine=uc_BlockLine;   //把当前方块位置暂存。
	unsigned char ucRowOffset,ucLineOffset;				   //方块位置偏移量。
	unsigned int uiDecideMap;							   //方块判断位图。

	if(ucAction==ACTIONROTATE)
		uiDecideMap=psta_BlockCur->uiRotateDecide;
	else
		{
		uiDecideMap=psta_BlockCur->uiBlockMap;
		switch(ucAction)
			{
			case ACTIONLEFT:
					uiDecideMap=(~(0x7777&(uiDecideMap>>1)))&uiDecideMap;
					ucLine++;break;
			case ACTIONRIGHT:
					uiDecideMap=(~(0xEEEE&(uiDecideMap<<1)))&uiDecideMap;
					ucLine--;break;
			case ACTIONDOWN:
					uiDecideMap=(~(uiDecideMap>>4))&uiDecideMap;
					ucRow++;break;
			default:break;
			}	
		}
	for(ucRowOffset=0;ucRowOffset<4;ucRowOffset++)
		for(ucLineOffset=0;ucLineOffset<4;ucLineOffset++)
			{
			if(0x01&(unsigned char)(uiDecideMap>>(ucRowOffset*4+ucLineOffset)))
				{
				if((ucLine+ucLineOffset)<LINE(0)||(ucLine+ucLineOffset)>LINE(11)
					||(ucRow+ucRowOffset)>ROW(20))
					return 0;
				if(ucReadBlock(ucRow+ucRowOffset-ROW(0),ucLine+ucLineOffset-LINE(0)))
					return 0;
				}
			}		  
	return 1;
}

⌨️ 快捷键说明

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