📄 block.c
字号:
BlockNextMat[i] = temp;
}
}
/******************************************************
Name: BlockValueInit
Desc: 游戏开始前各种变量的初始化
Param: 无
Return: 无
Global: 有
Note:
Author:czs
Log:
******************************************************/
void BlockValueInit(void)
{
unsigned int i, j;
for (i = 0; i < BLOCKGAME_SCOPE_ROW; i++)
{
for (j = 0; j < BLOCKGAME_SCOPE_COL; j++)
{
BlockScopeBuf[i][j] = BLOCK_IMAGE_NULL;
}
BlockInsertFlag[i] = 0;
}
BlockInsertFlag[i++] = 0xFFFF;
BlockInsertFlag[i++] = 0xFFFF;
BlockInsertFlag[i++] = 0xFFFF;
BlockInsertFlag[i++] = 0xFFFF;
CurBlock = 0;
BlockAspect = 0;
BlockInitNextMat();
BlockGameLevel = 0;
BlockGameLevelBase = 0;
BlockGameScore = 0;
BlockGameState = BLOCKGAME_STOP;
MoveBlock_Y = 0;
MoveBlock_X = 6;
BlockFlashing = 0;
}
/******************************************************
Name: BlockDispInit
Desc: 游戏开始前各种显示的初始化
Param: 无
Return: 无
Global: 有
Note:
Author:czs
Log:
******************************************************/
void BlockDispInit(void)
{
// unsigned int color_tmp;
unsigned short tmpbuf[8];
unsigned long score_tmp;
ColorDesc col;
col.backward = ColorBlack;
col.forward = 0x00ff0000;
col.mode = DSPM_Normal;
//BlockDrawBackground();
//------------------------------------------------------------------------------
// 以下为界面相关的初始化(测试用的简单)
//------------------------------------------------------------------------------
//color_tmp = LCD_GetColor();
DrawStringIdEx(BLOCKGAME_DISP_NEXT_BLOCK_X + 2, BLOCKGAME_DISP_NEXT_BLOCK_Y - 16, 45, SID_Block_Next, Font12X12, &col, 0);
DrawStringIdEx(BLOCKGAME_DISP_SCORE_X, BLOCKGAME_DISP_SCORE_Y, 30, SID_Block_Score, Font12X12, &col, 0);
score_tmp = BlockGameScore;
tmpbuf[0] = (unsigned short)(score_tmp / 10000 + '0');
score_tmp = score_tmp % 10000;
tmpbuf[1] = (unsigned short)(score_tmp / 1000 + '0');
score_tmp = score_tmp % 1000;
tmpbuf[2] = (unsigned short)(score_tmp / 100 + '0');
score_tmp = score_tmp % 100;
tmpbuf[3] = (unsigned short)(score_tmp / 10 + '0');
score_tmp = score_tmp % 10 + '0';
tmpbuf[4] = (unsigned short)(score_tmp);
tmpbuf[5] = 0;
DrawStringEx(BLOCKGAME_DISP_SCORE_X, BLOCKGAME_DISP_SCORE_Y + 14, 30, tmpbuf, Font12X12, &col, 0);
DrawStringIdEx(BLOCKGAME_DISP_LEVEL_X, BLOCKGAME_DISP_LEVEL_Y, 30, SID_Block_Level, Font12X12, &col, 0);
tmpbuf[0] = BlockGameLevel / 10 + '0';
tmpbuf[1] = BlockGameLevel % 10 + '0';
tmpbuf[2] = 0;
DrawStringEx(BLOCKGAME_DISP_LEVEL_X + 12, BLOCKGAME_DISP_LEVEL_Y + 14, 30, tmpbuf, Font12X12, &col, 0);
DrawStringIdEx(BLOCKGAME_DISP_STATE_X, BLOCKGAME_DISP_STATE_Y, 30, BlockGameState == BLOCKGAME_RUN ? SID_Block_Run : SID_Block_Stop, Font12X12, &col, 0);
//BlockDispNext();
//BlockDrawGameArea();
}
/******************************************************
Name: BlockDrawBackground
Desc: 重画游戏底图
Param: 无
Return: 无
Global: 有
Note:
Author:czs
Log:
******************************************************/
void BlockDrawBackground(void)
{
DrawBmpId(0, 0, BID_Block_Back);
}
/*
**********************************************************
* Copyright (C),2004-2005, Fuzhou Rockchip Co.,Ltd.
* Function name : BlockInsert()
* Author: ZhenFu Fang
* Description: 方块插入
* Calls:
* Input:
* Return: 非 0 时方块移动的空间已经有其它方块。
* Remark:
*
* History:
* <author> <time> <version> <desc>
* FZF 06/03/17 1.0 ORG
*
***********************************************************
*/
unsigned int BlockInsert(void)
{
unsigned int i, j;
unsigned int BMask;
unsigned int ChkBit = 0;
unsigned int BlockTemp;
unsigned int *pBlockScopeBuf;
unsigned int *pBlockInsertFlag;
unsigned int *pBlock;
pBlockInsertFlag = &BlockInsertFlag[MoveBlock_Y];
pBlock = &BlockDat[CurBlock][BlockAspect][0];
for (i = 0; i < 4; i++)
{
BlockTemp = ((*pBlock) << MoveBlock_X);
if (BlockTemp & BLOCK_LIMIT_MASK)
{
ChkBit = 1;
break;
}
if ((BlockTemp + (*pBlockInsertFlag)) != (BlockTemp | (*pBlockInsertFlag)))
{
ChkBit = 1;
break;
}
pBlockInsertFlag++;
pBlock++;
}
if (ChkBit == 0)
{
pBlock = &BlockDat[CurBlock][BlockAspect][0];
pBlockScopeBuf = &BlockScopeBuf[MoveBlock_Y][0];
pBlockInsertFlag = &BlockInsertFlag[MoveBlock_Y];
for (i = 0; i < 4; i++)
{
pBlockScopeBuf = &BlockScopeBuf[MoveBlock_Y+i][0];
BlockTemp = ((*pBlock) << MoveBlock_X);
*pBlockInsertFlag |= BlockTemp;
BMask = 0x1000;
for (j = 0; j < BLOCKGAME_SCOPE_COL; j++)
{
if (BlockTemp&BMask)
{
*(pBlockScopeBuf + j) = CurBlock;
}
BMask >>= 1;
}
pBlockInsertFlag++;
pBlock++;
}
}
return(ChkBit);
}
/*
**********************************************************
* Copyright (C),2004-2005, Fuzhou Rockchip Co.,Ltd.
* Function name : BlockChk()
* Author: ZhenFu Fang
* Description: 方块移动检测
* Calls:
* Input:
* mode: 方块方向
* x,y: 方块在游戏区域的坐标
* Return: 非 0 时方块移动的空间已经有其它方块。
* Remark:
*
* History:
* <author> <time> <version> <desc>
* FZF 06/03/17 1.0 ORG
*
***********************************************************
*/
unsigned int BlockChk(unsigned int mode, unsigned int x, unsigned int y)
{
unsigned int i, j;
unsigned int BlockTemp;
unsigned int BMask = 0x1000;
unsigned int *pBlock;
unsigned int *pBlockScopeBuf;
unsigned int *pBlockInsertFlag;
unsigned int ChkBit = 0;
pBlock = &BlockDat[CurBlock][mode][0];
pBlockScopeBuf = &BlockScopeBuf[y][0];
pBlockInsertFlag = &BlockInsertFlag[y];
for (i = 0; i < 4; i++)
{
pBlockScopeBuf = &BlockScopeBuf[y+i][0];
BlockTemp = ((*pBlock) << x);
*pBlockInsertFlag &= ~(BlockTemp | BLOCK_LIMIT_MASK);
BMask = 0x1000;
for (j = 0; j < BLOCKGAME_SCOPE_COL; j++)
{
if (BlockTemp&BMask)
{
*(pBlockScopeBuf + j) = BLOCK_IMAGE_NULL;
}
BMask >>= 1;
}
pBlockInsertFlag++;
pBlock++;
}
pBlockInsertFlag = &BlockInsertFlag[MoveBlock_Y];
pBlock = &BlockDat[CurBlock][BlockAspect][0];
//j = MoveBlock_Y;
for (i = 0; i < 4; i++)
{
BlockTemp = ((*pBlock) << MoveBlock_X);
if (BlockTemp)
j = MoveBlock_Y + i;
if (BlockTemp & BLOCK_LIMIT_MASK)
{
ChkBit = 1;
break;
}
if ((BlockTemp + (*pBlockInsertFlag)) != (BlockTemp | (*pBlockInsertFlag)))
{
ChkBit = 1;
break;
}
pBlockInsertFlag++;
pBlock++;
}
if (j >= BLOCKGAME_SCOPE_ROW)
ChkBit = 1;
if (ChkBit == 0)
{
pBlock = &BlockDat[CurBlock][BlockAspect][0];
pBlockScopeBuf = &BlockScopeBuf[MoveBlock_Y][0];
pBlockInsertFlag = &BlockInsertFlag[MoveBlock_Y];
for (i = 0; i < 4; i++)
{
pBlockScopeBuf = &BlockScopeBuf[MoveBlock_Y+i][0];
BlockTemp = ((*pBlock) << MoveBlock_X);
*pBlockInsertFlag |= BlockTemp;
BMask = 0x1000;
for (j = 0; j < BLOCKGAME_SCOPE_COL; j++)
{
if (BlockTemp&BMask)
{
*(pBlockScopeBuf + j) = CurBlock;
}
BMask >>= 1;
}
pBlockInsertFlag++;
pBlock++;
}
}
else
{
pBlock = &BlockDat[CurBlock][mode][0];
pBlockScopeBuf = &BlockScopeBuf[y][0];
pBlockInsertFlag = &BlockInsertFlag[y];
for (i = 0; i < 4; i++)
{
pBlockScopeBuf = &BlockScopeBuf[y+i][0];
BlockTemp = ((*pBlock) << x);
*pBlockInsertFlag |= BlockTemp;
BMask = 0x1000;
for (j = 0; j < BLOCKGAME_SCOPE_COL; j++)
{
if (BlockTemp&BMask)
{
*(pBlockScopeBuf + j) = CurBlock;
}
BMask >>= 1;
}
pBlockInsertFlag++;
pBlock++;
}
}
return(ChkBit);
}
/*
**********************************************************
* Copyright (C),2004-2005, Fuzhou Rockchip Co.,Ltd.
* Function name : BlockRefLine()
* Author: ZhenFu Fang
* Description: 消除一行
* Calls:
* Input: yy: 方块要消除的所在行
* Return:
* Remark:
*
* History:
* <author> <time> <version> <desc>
* FZF 06/03/17 1.0 ORG
*
***********************************************************
*/
void BlockRefLine(unsigned int yy)
{
unsigned int i, j;
unsigned int *pBlockBuf;
unsigned int *pBlockBuf2;
unsigned int *pBlockInsertFlag;
pBlockBuf = &BlockScopeBuf[yy][0];
pBlockInsertFlag = &BlockInsertFlag[yy];
*pBlockInsertFlag = 0;
for (j = 0; j < BLOCKGAME_SCOPE_COL; j++)
{
*pBlockBuf++ = BLOCK_IMAGE_NULL;
}
pBlockBuf = &BlockScopeBuf[yy][0];
pBlockInsertFlag = &BlockInsertFlag[yy];
for (i = yy; i > 0; i--)
{
pBlockBuf = &BlockScopeBuf[i][0];
pBlockBuf2 = &BlockScopeBuf[i-1][0];
*pBlockInsertFlag = *(pBlockInsertFlag - 1);
for (j = 0; j < BLOCKGAME_SCOPE_COL; j++)
{
*pBlockBuf++ = *pBlockBuf2++;
}
pBlockInsertFlag--;
}
//------------------------------------------------------------------------------
pBlockBuf = &BlockScopeBuf[0][0];
pBlockInsertFlag = &BlockInsertFlag[0];
*pBlockInsertFlag = 0;
for (j = 0; j < BLOCKGAME_SCOPE_COL; j++)
{
*pBlockBuf++ = BLOCK_IMAGE_NULL;
}
//------------------------------------------------------------------------------
}
/*
**********************************************************
* Copyright (C),2004-2005, Fuzhou Rockchip Co.,Ltd.
* Function name : BlockShowScore()
* Author: ZhenFu Fang
* Description: 显示游戏分数和字串
* Calls:
* Input:
* Return:
* Remark: 根据需要修改
*
* History:
* <author> <time> <version> <desc>
* FZF 06/03/17 1.0 ORG
*
***********************************************************
*/
void BlockShowScore() //????????
{
unsigned short pScore[6];
ColorDesc col;
unsigned long Score_tmp = BlockGameScore;
col.backward = 0x00000000;
col.forward = 0x00ff0000;
col.mode = DSPM_Normal;
DrawStringIdEx(BLOCKGAME_DISP_NEXT_BLOCK_X + 2, BLOCKGAME_DISP_NEXT_BLOCK_Y - 16, 45, SID_Block_Next, Font12X12, &col, 0);
DrawStringIdEx(BLOCKGAME_DISP_SCORE_X, BLOCKGAME_DISP_SCORE_Y, 30, SID_Block_Score, Font12X12, &col, 0);
DrawStringIdEx(BLOCKGAME_DISP_LEVEL_X, BLOCKGAME_DISP_LEVEL_Y, 30, SID_Block_Level, Font12X12, &col, 0);
DrawStringIdEx(BLOCKGAME_DISP_STATE_X, BLOCKGAME_DISP_STATE_Y, 30, BlockGameState == BLOCKGAME_RUN ? SID_Block_Run : SID_Block_Stop, Font12X12, &col, 0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -