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

📄 transmit_task.c

📁 程序实现了贪吃蛇游戏
💻 C
字号:
///////// Transmit_Task /////////////

void Transmit_Task(void *Id)

{

    int i = 0;

    u8 oldendpos[2];

   

   

    char Game_Over_Caption_8[]="Game Over";

    char Game_Paused_Caption_8[]="Game Paused";

    char Game_Pass_Caption_8[]="Game Passed";

 

    U16 Game_Over_Caption_16[20];

    U16 Game_Paused_Caption_16[20];

    U16 Game_Pass_Caption_16[20];

   

    strChar2Unicode(Game_Over_Caption_16, Game_Over_Caption_8);

    strChar2Unicode(Game_Paused_Caption_16, Game_Paused_Caption_8);

    strChar2Unicode(Game_Pass_Caption_16, Game_Pass_Caption_8);

 

   

    if (initfinished == FALSE)

       OSTimeDly(2000);

   

    while(1)

  {

    if (pause == TRUE)

        {

            TextOut(pdc, 100,115, Game_Paused_Caption_16, TRUE, FONTSIZE_SMALL);

            OSTimeDly(200);

            continue;

        }

    if (gameover == TRUE)

        {

            TextOut(pdc, 100,115, Game_Over_Caption_16, TRUE, FONTSIZE_SMALL);

            OSTimeDly(200);

            continue;

        }

    if (gamepass == TRUE)

    {

        TextOut(pdc,100,115,Game_Pass_Caption_16,TRUE,FONTSIZE_SMALL);

        OSTimeDly(200);

        continue;

    }  

 

           

    oldendpos[0] = EndPos[0];

    oldendpos[1] = EndPos[1];

 

    //判断snake头部的变化

    switch (HeadDirect)

        {

            case 1:

                HeadPos[0] = HeadPos[0] + 1;

                break;

            case 2:

                HeadPos[0] = HeadPos[0] - 1;

                break;

            case 3:

                HeadPos[1] = HeadPos[1] - 1;

                break;

            case 4:

                HeadPos[1] = HeadPos[1] + 1;

                break;

        }

    //判断snake尾部的变化

   

    if (ChangePointCount > 0)

    {

      if ( ( abs(ChangePointPos[ChangePointCount-1][0]-EndPos[0])+abs(ChangePointPos[ChangePointCount-1][1]-EndPos[1])) == 0)

          {

             DelChangePoint();

          }

    }

    switch(EndDirect)

            {

                case 1:

                    EndPos[0] = EndPos[0] + 1;

                    break;

                case 2:

                    EndPos[0] = EndPos[0] - 1;

                    break;

                case 3:

                    EndPos[1] = EndPos[1] - 1;

                    break;

                case 4:

                    EndPos[1] = EndPos[1] + 1;

                    break;

            }

 

    Check();

    if (gameover == TRUE)

        {

            TextOut(pdc, 100,115, Game_Over_Caption_16, TRUE, FONTSIZE_SMALL);

            OSTimeDly(200);

            continue;

        }

    if (gamepass == TRUE)

    {

        TextOut(pdc,100,115,Game_Pass_Caption_16,TRUE,FONTSIZE_SMALL);

        OSTimeDly(200);

        continue;

    }  

 

    if (addcount > 0)

        {

            EndPos[0] = oldendpos[0];

            EndPos[1] = oldendpos[1];

            addcount--;

            catch = FALSE;

        }

 

    //绘制豆子

 

    FillRect2(pdc, psnakeRect, GRAPH_MODE_NORMAL, RGB(255, 255, 255));//清除主窗口的显示 

 

    for(i=0;i<3;i++)

        {

            if (boolbean00[i] == TRUE)

            {

                Circle(pdc,20+5*bean00[i][0]-2, 20+5*bean00[i][1]-2, 2);

            }

        }

    if (boolbean01[0] == TRUE)

        {

            Circle(pdc,20+5*bean01[0][0]-2, 20+5*bean01[0][1]-2, 2);

        }

    if (boolbean10[0] == TRUE)

        {

            Circle(pdc,20+5*bean10[0][0]-2, 20+5*bean10[0][1]-2, 2);

 

        }

    if (boolbean11[0] == TRUE)

        {

            Circle(pdc,20+5*bean11[0][0]-2, 20+5*bean11[0][1]-2, 2);

        }

   

 

   

    //绘制snake

    //ClearScreen();

   

   

    Draw3DRect2(pdc, psnakeRect, RGB(50, 50, 50), RGB(160, 160, 160));

   

    FillRect2(pdc, pbarRect1, GRAPH_MODE_NORMAL, RGB(0, 0, 0));

    FillRect2(pdc, pbarRect2, GRAPH_MODE_NORMAL, RGB(0, 0, 0));

 

   

    if (ChangePointCount==0)

        {

        draw_rect(HeadPos[0],HeadPos[1], EndPos[0], EndPos[1]);

        }

    else

    {

       

        draw_rect(HeadPos[0],HeadPos[1], ChangePointPos[0][0], ChangePointPos[0][1]);

        for(i=1; i<ChangePointCount; i++)

        {

   

            draw_rect(ChangePointPos[i-1][0], ChangePointPos[i-1][1], ChangePointPos[i][0], ChangePointPos[i][1]);

        }

 

        draw_rect(ChangePointPos[i-1][0], ChangePointPos[i-1][1], EndPos[0],EndPos[1]);

    }

 

    OSTimeDly(200);

  }

}

 

//////////////////////////////////////////////////////////////////////////

void DelChangePoint()

{

   

    EndDirect = ChangePointDirect[ChangePointCount-1];

    EndPos[0] = ChangePointPos[ChangePointCount-1][0];

    EndPos[1] = ChangePointPos[ChangePointCount-1][1];

 

   ChangePointPos[ChangePointCount-1][0] = 0;

    ChangePointPos[ChangePointCount-1][1] = 0;

    ChangePointDirect[ChangePointCount-1] = 0;

   

    ChangePointCount--;

}

   

////////check_status///////////////////////

void Check()

{

   

    int i = 0;

    //if( (HeadPos[0]>xmax)||(HeadPos[0] < xmin )||(HeadPos[1] > ymax )||(HeadPos[1] < ymin ) )

 

 

 

    //{

        //gameover = TRUE;

           //return;

        //}

 

    __asm

    {

      cmp HeadPos[0], xmax

      bgt gameend

      cmp HeadPos[0], xmin

      blt gameend

      cmp HeadPos[1], ymax

      bgt gameend

      cmp HeadPos[1], ymin

      bge gamecontinue

     

      gameend:

         mov gameover,#1

      gamecontinue:

    }  

   

    if (gameover == TRUE) return;   

   

    if (IsInRect(pbarRect1_5, HeadPos[0], HeadPos[1]) )

        {

            gameover = TRUE;

            return;

        }

    if  (IsInRect(pbarRect2_5, HeadPos[0], HeadPos[1]) )

        {

            gameover = TRUE;

            return;

        }

       

    if (HeadPos[0] <= 20)

        {

            if (HeadPos[1] <=20)

                {

                    for (i=0;i<3;i++)

                        if (boolbean00[i] == TRUE)

                        {

                        if  ( (bean00[i][0] == HeadPos[0]) && (bean00[i][1] == HeadPos[1]) )

                                {

                                   

                                         catch = TRUE;

                                         boolbean00[i] = FALSE;

                                         addcount = 2;

                                         return;

                                   

                                }

                       

                         }

                }

            else

                {

                    if (boolbean01[0] == TRUE)

                    {

                        if ( (bean01[0][0] == HeadPos[0]) && (bean01[0][1] == HeadPos[1]) )

                            {

                               catch = TRUE;

                               boolbean01[0] = FALSE;

                               addcount = 2;

                               return;

                            }

                       

                    }

                }

        }

    else

        {

            if (HeadPos[1] <=20)

                {

                   

                    if (boolbean10[0] == TRUE)

                    {

                             if ( (bean10[0][0] == HeadPos[0]) && (bean10[0][1] == HeadPos[1]) )

                            {

                               catch = TRUE;

                               boolbean10[0] = FALSE;

                               addcount = 2;

                               return;

                            }

                       

                    }

                }

            else

                {

                    if (boolbean11[0] == TRUE)

                    {

                             if ( (bean11[0][0] == HeadPos[0]) && (bean11[0][1] == HeadPos[1]) )

                            {

                               catch = TRUE;

                               boolbean11[0] = FALSE;

                               addcount = 2;

                               return;

                            }

                       

                    }

 

                }

        }

 

    gamepass = TRUE;

    for (i=0;i<3;i++)

       if (boolbean00[i] == TRUE) 

        gamepass = FALSE;

    if ( (boolbean01[0] == TRUE)|| (boolbean10[0] == TRUE) ||(boolbean11[0] == TRUE) )

        gamepass = FALSE;

   

       

 }

   

 

 

/////////draw_rect///////////////////

void draw_rect(u8 headx, u8 heady, u8 endx, u8 endy)

{

    if (endy == heady)

        {

            if (headx > endx)

                FillRect(pdc, 20+5*(endx-1), 20+5*(endy-1), 20+5*headx, 20+5*endy,GRAPH_MODE_NORMAL, RGB(0, 0, 0));

            else

                FillRect(pdc, 20+5*(headx-1), 20+5*(endy-1), 20+5*endx, 20+5*endy,GRAPH_MODE_NORMAL, RGB(0, 0, 0));

           

        }

    else if (endx == headx)

        {

            if (heady > endy)

                FillRect(pdc, 20 + 5 *(endx - 1), 20 + 5 *(endy - 1), 20 + 5 * headx, 20 + 5 * heady,GRAPH_MODE_NORMAL, RGB(0, 0, 0));

            else

                FillRect(pdc, 20 + 5 *(endx - 1), 20 + 5 *(heady - 1), 20 + 5 * headx, 20 + 5 * endy,GRAPH_MODE_NORMAL, RGB(0, 0, 0));

        }

}

⌨️ 快捷键说明

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