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

📄 games_tetris.c

📁 几个嵌入式手机平台小游戏c源代码
💻 C
📖 第 1 页 / 共 3 页
字号:

    ARGUMENTS PASSED:
        

    RETURN VALUE:

        
    IMPORTANT NOTES:
        
==================================================================================================*/
static void ClearRect(OP_UINT8 col,OP_UINT8 row)
{
    LCD_POINT ptLT,ptRB;

    ptLT.x = XLEFTLINE+LINEWIDTH+col*SQUARELENGTH;
    ptLT.y = row*SQUARELENGTH;
    ptRB.x = ptLT.x+SQUARELENGTH-1;
    ptRB.y = ptLT.y+SQUARELENGTH-1;
    ds_fill_rect((OP_UINT16)ptLT.x, (OP_UINT16)ptLT.y, (OP_UINT16)ptRB.x, (OP_UINT16)ptRB.y, TETRIS_BG_COLOR);
}

/*==================================================================================================
    FUNCTION: DrawColorRect

    DESCRIPTION:
        

    ARGUMENTS PASSED:
        

    RETURN VALUE:
        

    IMPORTANT NOTES:
        
==================================================================================================*/
static void DrawColorRect(OP_INT8 col,OP_INT8 row,DS_COLOR  color)
{
    LCD_POINT ptLT,ptRB;

    ptLT.x = XLEFTLINE+LINEWIDTH+col*SQUARELENGTH;
    ptLT.y = row*SQUARELENGTH;
    ptRB.x = ptLT.x+SQUARELENGTH-1;
    ptRB.y = ptLT.y+SQUARELENGTH-1;
    ds_draw_button((OP_INT16)ptLT.x, 
                                (OP_INT16)ptLT.y, 
                                (OP_INT16)ptRB.x, 
                                (OP_INT16)ptRB.y, 
                                COLOR_LIGHT_GRAY, 
                                COLOR_DARK_GRAY, 
                                color);

}


/*==================================================================================================
    FUNCTION: TetrisPutSTRnLINE

    DESCRIPTION:
        

    ARGUMENTS PASSED:
        

    RETURN VALUE:
        

    IMPORTANT NOTES:
        
==================================================================================================*/
static void TetrisPutSTRnLINE(void)
{
    LCD_POINT ptLT,ptLB,pt;
    OP_UINT8 i;

    DrawPiece(indicator);
    
    ptLT.x=0;
    ptLT.y=0;
    ptLB.x=ptLT.x;
    ptLB.y=DS_SCRN_MAX_Y -1;
    for (i=0;i<LINEWIDTH;i++)
    {
        ds_draw_line((OP_UINT16)(ptLT.x+i),(OP_UINT16)ptLT.y,(OP_UINT16)(ptLB.x+i),(OP_UINT16)ptLB.y,COLOR_DARK_BLUE);
    }    
    
    ptLT.x=XLEFTLINE;
    ptLB.x=ptLT.x;
    for (i=0;i<LINEWIDTH;i++)
    {
        ds_draw_line((OP_UINT16)(ptLT.x+i),(OP_UINT16)ptLT.y,(OP_UINT16)(ptLB.x+i),(OP_UINT16)ptLB.y,COLOR_DARK_BLUE);
    }

    ptLT.x=XLEFTLINE+colNum*SQUARELENGTH+LINEWIDTH;
    ptLB.x=ptLT.x;
    for (i=0;i<LINEWIDTH;i++)
    {
        ds_draw_line((OP_UINT16)(ptLT.x+i),(OP_UINT16)ptLT.y,(OP_UINT16)(ptLB.x+i),(OP_UINT16)ptLB.y,COLOR_DARK_BLUE);
    }
    
    pt.x=5;
    pt.y=10;
    ds_draw_text_rm((OP_UINT16)pt.x, (OP_UINT16)pt.y, PMPT_TEXT_SCORE, FONT_SIZE_SMALL, TEXT_COLOR, TETRIS_BG_COLOR);
    pt.y=52;
    ds_draw_text_rm((OP_UINT16)pt.x, (OP_UINT16)pt.y,PMPT_TEXT_LINES, FONT_SIZE_SMALL, TEXT_COLOR, TETRIS_BG_COLOR);
    pt.y=115;
    ds_draw_text_rm((OP_UINT16)pt.x, (OP_UINT16)pt.y,PMPT_TEXT_NEXT, FONT_SIZE_SMALL, TEXT_COLOR, TETRIS_BG_COLOR);

}


/*==================================================================================================
    FUNCTION: InitSquare

    DESCRIPTION:
        

    ARGUMENTS PASSED:
        

    RETURN VALUE:
        
    IMPORTANT NOTES:
        
==================================================================================================*/
static OP_BOOLEAN InitSquare(LPTSquare lpsq,OP_UINT8 col,OP_UINT8 row,DS_COLOR color,OP_BOOLEAN Data)
{
    if(lpsq==OP_NULL)
        return OP_FALSE;

    lpsq->row=row;
    lpsq->col=col;
    lpsq->color=color;
    lpsq->data=Data;
    return     OP_TRUE;
}


/*==================================================================================================
    FUNCTION: DrawPiece

    DESCRIPTION:
        

    ARGUMENTS PASSED:
        

    RETURN VALUE:

        
    IMPORTANT NOTES:
        
==================================================================================================*/
static void DrawPiece(TSquare sq[])
{
    OP_UINT8 i;
    
    for(i=0;i<curPieceNum;i++)
    {
        DrawColorRect(sq[i].col,sq[i].row, sq[i].color);
    }
    ds_refresh();
}    


/*==================================================================================================
    FUNCTION: ClearPiece

    DESCRIPTION:
        

    ARGUMENTS PASSED:
        

    RETURN VALUE:
        

    IMPORTANT NOTES:
        
==================================================================================================*/
static void ClearPiece(TSquare sq[])
{
    OP_UINT8 i;
    
    for(i=0;i<curPieceNum;i++)
    {
        ClearRect(sq[i].col,sq[i].row);
    }
    ds_refresh();
}    


/*==================================================================================================
    FUNCTION: InBounds

    DESCRIPTION:
        

    ARGUMENTS PASSED:
        

    RETURN VALUE:
        

    IMPORTANT NOTES:
        
==================================================================================================*/
static OP_BOOLEAN InBounds(LPTSquare lpsq)
{
    return (lpsq->col>=0 && lpsq->col<colNum
        && lpsq->row>=0 && lpsq->row<rowNum);
}


/*==================================================================================================
    FUNCTION: FieldIsNull

    DESCRIPTION:
        

    ARGUMENTS PASSED:
        

    RETURN VALUE:
        

    IMPORTANT NOTES:
        
==================================================================================================*/
static OP_BOOLEAN FieldIsNull(OP_UINT8 row,OP_UINT8 col)
{
    return (Tetris.field[row][col].isOccupied==OP_FALSE);
}

/*==================================================================================================
    FUNCTION: IsLastLine

    DESCRIPTION:
        

    ARGUMENTS PASSED:
        

    RETURN VALUE:
        

    IMPORTANT NOTES:
        
==================================================================================================*/
static OP_BOOLEAN IsLastLine(TSquare sq[])
{
    OP_UINT8 i;
    for (i=0;i<curPieceNum;i++)
    {
        if (sq[i].row<=0)
            return OP_TRUE;
    }

    return OP_FALSE;        
}

/*==================================================================================================
    FUNCTION: ChangeSqValue

    DESCRIPTION:
        

    ARGUMENTS PASSED:
        

    RETURN VALUE:
        

    IMPORTANT NOTES:
        
==================================================================================================*/
static OP_BOOLEAN ChangeSqValue(LPTSquare lps,LPTSquare lpd)
{
    TSquare    tempSq;
    if(lps==OP_NULL || lpd==OP_NULL)
        return OP_FALSE;

    tempSq.row=lps->row;
    tempSq.col=lps->col;

    lps->row=lpd->row;
    lps->col=lpd->col;
    
    lpd->row=tempSq.row;
    lpd->col=tempSq.col;
    
    return OP_TRUE;
}

/*==================================================================================================
    FUNCTION: DrawDigit

    DESCRIPTION:
        

    ARGUMENTS PASSED:
        

    RETURN VALUE:
        
    IMPORTANT NOTES:
        
==================================================================================================*/
static void DrawDigit(OP_INT16 wInteger,LCD_POINT pt)
{
    OP_UINT8 buffer[8]; 
    OP_UINT8 strINT[16];
    
    op_sprintf((char *)buffer, "%d", wInteger);
    AtoU(strINT, buffer);
    ds_draw_text((OP_UINT16)pt.x, (OP_UINT16)pt.y, strINT, FONT_SIZE_SMALL, TEXT_COLOR, TETRIS_BG_COLOR);
}

/*==================================================================================================
    FUNCTION: Repaint

    DESCRIPTION:
        

    ARGUMENTS PASSED:
        

    RETURN VALUE:
        

    IMPORTANT NOTES:
        
==================================================================================================*/
static void Repaint(void)
{
    OP_UINT8    i,j;
    LCD_POINT pt;
    LCD_RECT_T    u_rect;

    TetrisPutSTRnLINE();
    
    pt.x = 5;
    pt.y = 26;
    DrawDigit(Tetris.theScore,pt);
    pt.y = 68;
    DrawDigit(Tetris.destroyLines,pt);

    for(i=0;i<rowNum;i++)
        for(j=0;j<colNum;j++)
        {
            if(Tetris.field[i][j].isOccupied==OP_TRUE)
            {
                DrawColorRect(j,i,Tetris.field[i][j].color);    
            }
        };

    u_rect.left = ds.rcUpdate.left;
    u_rect.top = ds.rcUpdate.top;
    u_rect.right = ds.rcUpdate.right;
    u_rect.bottom = ds.rcUpdate.bottom;
    
}    

/*==================================================================================================
    FUNCTION: MovePiece

    DESCRIPTION:
        

    ARGUMENTS PASSED:

    RETURN VALUE:

    IMPORTANT NOTES:

==================================================================================================*/
static OP_BOOLEAN canMoveTo(TSquare to[],OP_UINT8 num)
{
    OP_UINT8 i;
    for(i=0;i<num;i++)
    {
        if(InBounds(&to[i])==OP_FALSE)
            return OP_FALSE;
        if(Tetris.field[to[i].row][to[i].col].isOccupied==OP_TRUE)
            return OP_FALSE;
    }
    return OP_TRUE;
}

/*==================================================================================================
    FUNCTION: MovePiece

    DESCRIPTION:
        

    ARGUMENTS PASSED:

    RETURN VALUE:

    IMPORTANT NOTES:

==================================================================================================*/
static OP_BOOLEAN MovePiece(TSquare from[],TSquare to[],OP_UINT8 num)
{
    OP_UINT8 i;

    if (!canMoveTo(to, curPieceNum))
    {
        return OP_FALSE;
    }
    
    /* redraw square */
    ClearPiece(from);

    DrawPiece(to);


    /* change current square value */
    for(i=0;i<num;i++)
    {
        ChangeSqValue(&from[i],&to[i]);
    }
    
    return OP_TRUE;
}

/*==================================================================================================
    FUNCTION: CopyPiece

    DESCRIPTION:
        

    ARGUMENTS PASSED:
        
    RETURN VALUE:

    IMPORTANT NOTES:
        
==================================================================================================*/
static void CopyPiece(TSquare from[],TSquare to[],OP_UINT8 num)
{
    OP_UINT8 i;

    for(i=0;i<num;i++)
    {
        to[i]=from[i];
    }
    
}

/*==================================================================================================
    FUNCTION: InitIndicator

    DESCRIPTION:
        

    ARGUMENTS PASSED:

    RETURN VALUE:

    IMPORTANT NOTES:
        
==================================================================================================*/
static void InitIndicator(void)
{
    OP_UINT8 i;
    OP_INT8 offset_col,offset_row;
    offset_col = (colNum + ((XLEFTLINE + LINEWIDTH*2) / SQUARELENGTH))/2;
    offset_row = rowNum -curPieceNum;

    for(i=0;i<curPieceNum;i++)
    {
        indicator[i].row=Tetris.nextPiece[i].row + offset_row;
        indicator[i].col=Tetris.nextPiece[i].col - offset_col;
        indicator[i].color=Tetris.nextPiece[i].color;
    }

⌨️ 快捷键说明

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