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

📄 block.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
📖 第 1 页 / 共 3 页
字号:
        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 + -