#include "config.h"
uint8 xdata mapBuf[32][8]; // 32*32dot图形映射区,屏幕上每一个方块单元位置
// 在映射区都有与之对应的一个点,这样程序通过读取
// 图形映射区的点状态就可以知道这一点是否已经有
// 方块单元,从而可以判断方块是否可以移动、旋转
/******************************************************************************
**
** 函数功能: 清空图形映射区
**
** 输 入: 无
**
** 输 出: 无
**
*******************************************************************************/
void ClrMapBuf()
{
uint8 i,j;
for(i = 0; i < 32; i++)
{
for(j = 0; j < 8; j++)
mapBuf[i][j] = 0;
}
}
/******************************************************************************
**
** 函数功能: 按坐标图形映射区设置位
**
** 输 入: 坐标
**
** 输 出: 无
**
*******************************************************************************/
void SetDot(struct POINT pTemp)
{
mapBuf[pTemp.y][pTemp.x/8] |= BIT(pTemp.x%8);
}
/******************************************************************************
**
** 函数功能: 按坐标图形映射区清除位
**
** 输 入: 坐标
**
** 输 出: 无
**
*******************************************************************************/
void ClrDot(struct POINT pTemp)
{
mapBuf[pTemp.y][pTemp.x/8] &= ~BIT(pTemp.x%8);
}
/******************************************************************************
**
** 函数功能: 按坐标读取图形映射区位状态
**
** 输 入: 坐标
**
** 输 出: 位状态
**
*******************************************************************************/
bool GetDot(struct POINT pTemp)
{
return mapBuf[pTemp.y][pTemp.x/8] & BIT(pTemp.x%8);
}
/******************************************************************************
**
** 函数功能: 左边界移动判断
**
** 输 入:
**
** 输 出: 0 没到最左 1 已到最左
**
*******************************************************************************/
bool LeftLimitJudge()
{
uint8 i;
for(i = 0; i < 4; i ++)
{
if((buf.unitCoordinate[i].x + pShift.x) <= FRAME_LEFT)
return 1;
}
return 0;
}
/******************************************************************************
**
** 函数功能: 右边界移动判断
**
** 输 入:
**
** 输 出: 0 没到最右 1 已到最右
**
*******************************************************************************/
bool RightLimitJudge()
{
uint8 i;
for(i = 0; i < 4; i ++)
{
if((buf.unitCoordinate[i].x + pShift.x) >= FRAME_RIGHT)
return 1;
}
return 0;
}
/******************************************************************************
**
** 函数功能: 到底部判断
**
** 输 入: 无
**
** 输 出: 0 没到底部 1 已到底部
**
*******************************************************************************/
bool BottomLimitJudge()
{
uint8 i;
for(i = 0; i < 4; i ++)
{
if((buf.unitCoordinate[i].y + pShift.y) >= FRAME_BOTTOM) // 越界判断
return 1;
}
return 0;
}
/******************************************************************************
**
** 函数功能: 方块移动处理
**
** 输 入: 移动的方向(枚举)
**
** 输 出: ABLE 可以移动 DISABLE 不能移动
**
*******************************************************************************/
bool BlockMoveJudge(eDIRECTION direction)
{
uint8 i;
struct POINT pTemp;
pTemp = pShift;
switch(direction)
{
case DOWN:
if(BottomLimitJudge()) // 如果已到底部
return DISABLE;
pTemp.y++;
break;
case LEFT:
if(LeftLimitJudge()) // 如果已到左边界
return DISABLE;
pTemp.x--;
break;
case RIGHT:
if(RightLimitJudge()) // 如果已到右边界
return DISABLE;
pTemp.x++;
break;
}
for(i = 0; i < 4; i ++)
{
pTemp.x += buf.unitCoordinate[i].x;
pTemp.y += buf.unitCoordinate[i].y;
if(GetDot(pTemp)) // 如果此位置已被占用
return DISABLE;
pTemp.x -= buf.unitCoordinate[i].x; // 判断完了恢复pTemp,进行下一方块单元的判断
pTemp.y -= buf.unitCoordinate[i].y;
}
return ABLE; // 返回可以移动
}
/******************************************************************************
**
** 函数功能: 方块旋转处理
**
** 输 入: 无
**
** 输 出: ABLE 可以旋转 DISABLE 不能旋转
**
*******************************************************************************/
bool BlockRotateJudge()
{
extern struct POINT code unitCoordinateTbl[][4];
struct POINT pTemp;
uint8 styleTemp,i;
styleTemp = RotateGetNewIndex(buf.blockIndex); // 旋转后方块索引
for(i = 0; i < 4; i ++)
{
pTemp.x = pShift.x + unitCoordinateTbl[styleTemp][i].x;
pTemp.y = pShift.y + unitCoordinateTbl[styleTemp][i].y;
if(GetDot(pTemp)) // 如果此位置已被占用
return DISABLE;
if(pTemp.x < FRAME_LEFT || pTemp.x > FRAME_RIGHT || pTemp.y > FRAME_BOTTOM ) // 越界判断
return DISABLE;
}
return ABLE;
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
block.rar (45个子文件)
block
block.bmp 96B
lst
block.lst 10KB
T6963.lst 11KB
MovementJudge.lst 10KB
main.lst 7KB
key.lst 3KB
score.lst 10KB
block.m51 49KB
block_Opt.Bak 2KB
block 330B
obj
block 83KB
block.plg 470B
block.obj 17KB
block.hex 18KB
main.obj 13KB
T6963.obj 22KB
MovementJudge.obj 15KB
score.obj 17KB
key.obj 10KB
block.Opt 2KB
H
key.h 314B
config.h 793B
t6963.h 2KB
en.h 9KB
block.h 936B
MovementJudge.h 504B
cn.h 6KB
score.h 362B
C
block.c.bak 5KB
key.c 692B
main.c 3KB
score.c 4KB
T6963.c 5KB
main.c.bak 3KB
MovementJudge.c 5KB
block.c 5KB
proteus
block.PWI 1KB
Last Loaded block7_0.DBK 100KB
block.DSN 101KB
Last Loaded block.DBK 100KB
block7_0.DSN 100KB
block7_0.PWI 1KB
block_Uv2.Bak 2KB
block.Uv2 2KB
game.bmp 665KB
共 45 条
- 1
资源评论
smj080210329
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功