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

📄 snake.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
📖 第 1 页 / 共 3 页
字号:
/******************************************************
Name: SnakeAddSnakeLen
Desc: 增加贪吃蛇的长度 
Param:int indexX--坐标x
   int indexY--坐标y
Return: 无
Global: 有
Note:
Author:czs
Log:
******************************************************/
void SnakeAddSnakeLen(int indexX, int indexY)
{
    int i;
    for (i = m_snakeLen;i > 0;i--)
        m_ptSnake[i] = m_ptSnake[i-1];
    m_ptSnake[0].x = indexX;
    m_ptSnake[0].y = indexY;
    m_snakeLen++;
}
/******************************************************
Name: SnakeClearArray
Desc: 将所有的方格为清空 
Param:无
Return: 无
Global: 有
Note:
Author:czs
Log:
******************************************************/
void  SnakeClearArray()
{
    int i, j;
    for (j = 0;j < SNAKEGAME_SCOPE_COL;j++)
        for (i = 0;i < SNAKEGAME_SCOPE_ROW;i++)
            m_snakeArray[j][i] = SNAKEGAME_CELLTYPE_NULL;
}
/******************************************************
Name: SnakeSetStone
Desc: 将指定的方格填充石头障碍物 
Param:int ix--坐标x
   int iy--坐标y
Return: 无
Global: 有
Note:
Author:czs
Log:
******************************************************/
void SnakeSetStone(int ix, int iy)
{
    m_snakeArray[iy][ix] = SNAKEGAME_CELLTYPE_STONE;
}
/******************************************************
Name: SnakeSetLevel_00
Desc: 设置游戏的关卡为第零关 
Param:无
Return: 无
Global: 有
Note:
Author:czs
Log:
******************************************************/
void SnakeSetLevel_00()
{

}
/******************************************************
Name: SnakeSetLevel_01
Desc: 设置游戏的关卡为第一关 
Param:无
Return: 无
Global: 有
Note:
Author:czs
Log:
******************************************************/
void SnakeSetLevel_01()
{
    int i;
    for (i = 4;i <= 10;i++)
        SnakeSetStone(i, 10);
}
/******************************************************
Name: SnakeSetLevel_02
Desc: 设置游戏的关卡为第二关 
Param:无
Return: 无
Global: 有
Note:
Author:czs
Log:
******************************************************/
void SnakeSetLevel_02()
{
    SnakeSetStone(5, 8);
    SnakeSetStone(9, 8);
    SnakeSetStone(4, 8);
    SnakeSetStone(4, 9);
    SnakeSetStone(4, 10);
    SnakeSetStone(4, 11);
    SnakeSetStone(10, 8);
    SnakeSetStone(10, 9);
    SnakeSetStone(10, 10);
    SnakeSetStone(10, 11);
    SnakeSetStone(5, 11);
    SnakeSetStone(9, 11);
}
/******************************************************
Name: SnakeSetLevel_03
Desc: 设置游戏的关卡为第三关 
Param:无
Return: 无
Global: 有
Note:
Author:czs
Log:
******************************************************/
void SnakeSetLevel_03()
{
    int i;
    for (i = 0;i <= 12;i++)
        SnakeSetStone(9, i);
    for (i = 7;i <= 19;i++)
        SnakeSetStone(5, i);
}
/******************************************************
Name: SnakeSetLevel_04
Desc: 设置游戏的关卡为第四关 
Param:无
Return: 无
Global: 有
Note:
Author:czs
Log:
******************************************************/
void SnakeSetLevel_04()
{
    int i;
    for (i = 3;i <= 11;i++)
        SnakeSetStone(i, 10);
    for (i = 6;i <= 14;i++)
        SnakeSetStone(7, i);
}
/******************************************************
Name: SnakeSetLevel_05
Desc: 设置游戏的关卡为第五关 
Param:无
Return: 无
Global: 有
Note:
Author:czs
Log:
******************************************************/
void SnakeSetLevel_05()
{
    int i;
    for (i = 0;i <= 4;i++)
        SnakeSetStone(i, 4);
    for (i = 0;i <= 4;i++)
        SnakeSetStone(i, 15);
    for (i = 5;i <= 7;i++)
        SnakeSetStone(4, i);
    for (i = 12;i <= 14;i++)
        SnakeSetStone(4, i);
    ////////////////////
    for (i = 10;i <= 14;i++)
        SnakeSetStone(i, 4);
    for (i = 10;i <= 14;i++)
        SnakeSetStone(i, 15);
    for (i = 5;i <= 7;i++)
        SnakeSetStone(10, i);
    for (i = 12;i <= 14;i++)
        SnakeSetStone(10, i);
}
/******************************************************
Name: SnakeSetLevel_06
Desc: 设置游戏的关卡为第六关 
Param:无
Return: 无
Global: 有
Note:
Author:czs
Log:
******************************************************/
void SnakeSetLevel_06()
{
    int i, j;
    for (i = 4;i <= 14;i += 5)
    {
        for (j = 2;j <= 5;j++)
        {
            SnakeSetStone(j, i);
            SnakeSetStone(j + 7, i);
        }
    }
}
/******************************************************
Name: SnakeSetLevel_07
Desc: 设置游戏的关卡为第七关 
Param:无
Return: 无
Global: 有
Note:
Author:czs
Log:
******************************************************/
void SnakeSetLevel_07()
{
    int i;
    for (i = 2;i <= 17;i++)
    {
        SnakeSetStone(2, i);
        SnakeSetStone(12, i);
    }
    for (i = 5;i <= 9;i++)
    {
        SnakeSetStone(i, 6);
        SnakeSetStone(i, 13);
    }
}
/******************************************************
Name: SnakeSetLevel_08
Desc: 设置游戏的关卡为第八关 
Param:无
Return: 无
Global: 有
Note:
Author:czs
Log:
******************************************************/
void SnakeSetLevel_08()
{
    int i;
    for (i = 3;i <= 11;i++)
    {
        SnakeSetStone(i, 9);
        SnakeSetStone(i, 10);
    }
    for (i = 11;i <= 15;i++)
    {
        SnakeSetStone(3, i);
        SnakeSetStone(7, i);
        SnakeSetStone(11, i);
    }
    for (i = 5;i <= 8;i++)
    {
        SnakeSetStone(3, i);
        SnakeSetStone(11, i);
    }
    for (i = 2;i <= 4;i++)
    {
        SnakeSetStone(i, 4);
        SnakeSetStone(i + 8, 4);
    }
}
/******************************************************
Name: SnakeSetLevel_09
Desc: 设置游戏的关卡为第九关 
Param:无
Return: 无
Global: 有
Note:
Author:czs
Log:
******************************************************/
void SnakeSetLevel_09()
{
    int i, j;
    for (i = 2, j = 9;i <= 9 && j >= 2;i++, j--)
    {
        SnakeSetStone(i, j);
        SnakeSetStone(i + 3, j + 8);
    }
    for (i = 6;i <= 8;i++)
    {
        SnakeSetStone(i, 9);
        SnakeSetStone(i, 10);
    }
}
/******************************************************
Name: SnakeSetAnyLevel
Desc: 设置游戏的关卡 
Param:无
Return: 无
Global: 有
Note:
Author:czs
Log:
******************************************************/
void SnakeSetAnyLevel(int nLevel)
{
    switch (nLevel)
    {
        case 1:
            SnakeSetLevel_00();
            break;
        case 2:
            SnakeSetLevel_01();
            break;
        case 3:
            SnakeSetLevel_02();
            break;
        case 4:
            SnakeSetLevel_03();
            break;
        case 5:
            SnakeSetLevel_04();
            break;
        case 6:
            SnakeSetLevel_05();
            break;
        case 7:
            SnakeSetLevel_06();
            break;
        case 8:
            SnakeSetLevel_07();
            break;
        case 9:
            SnakeSetLevel_08();
            break;
        case 10:
            SnakeSetLevel_09();
        default:
            SnakeSetLevel_00();
    }
}
/******************************************************
Name: SnakeDoNextLevel
Desc: 当前关卡顺利过关,重新进行当前关卡的游戏 
Param:无
Return: 无
Global: 有
Note:
Author:czs
Log:
******************************************************/
void SnakeDoNextLevel()
{
    if (m_snakeLevel == 0)
        m_snakeLevel = 1;
    SnakeClearArray();
    SnakeSetAnyLevel(m_snakeLevel);
    m_snakeLen = 1;
    m_ptSnake[0].x = 7;
    m_ptSnake[0].y = 0;
    m_snakeCurDir = 1;//1:down 2:Up 3:left 4:right
    m_snakeCurDirTemp = 1;
    SnakeCreateNewFood(SNAKEGAME_CELLTYPE_FOOD);
    //SnakeShowLevel();
    //SnakeShowSnakeLen();
    //SnakeDrawGame();
}
/******************************************************
Name: SnakeReDoLevel
Desc: 当前关卡未能过关,重新进行当前关卡的游戏 
Param:无
Return: 无
Global: 有
Note:
Author:czs
Log:
******************************************************/
void SnakeReDoLevel()
{
    SnakeClearArray();
    SnakeSetAnyLevel(m_snakeLevel);
    m_snakeLen = 1;
    m_ptSnake[0].x = 7;
    m_ptSnake[0].y = 0;
    m_snakeCurDir = 1;//1:down 2:Up 3:left 4:right
    m_snakeCurDirTemp = 1;
    m_bsnakeDied = FALSE;
    SnakeCreateNewFood(SNAKEGAME_CELLTYPE_FOOD);
    //SnakeDrawGame();

}
/******************************************************
Name: SnakeCheckCanEat
Desc: 检查蛇前进过程中所遇到的物体,
如果是食物,则身体加长,如果是奖金,则加分数,如果是加生命奖励,则加生命 
Param:无
Return: FALSE--不是食物
        TRUE--是食物
Global: 有
Note:
Author:czs
Log:
******************************************************/
UINT8 SnakeCheckCanEat()
{
    int ix, iy;
    switch (m_snakeCurDir)
    {
        case 1://down
            ix = m_ptSnake[0].x;
            iy = (m_ptSnake[0].y + 1) % SNAKEGAME_SCOPE_COL;
            break;
        case 2://up
            ix = m_ptSnake[0].x;
            iy = m_ptSnake[0].y - 1;
            if (iy == -1)
                iy = SNAKEGAME_SCOPE_COL - 1;
            break;
        case 3://left
            ix = m_ptSnake[0].x - 1;
            iy = m_ptSnake[0].y;
            if (ix == -1)
                ix = SNAKEGAME_SCOPE_ROW - 1;
            break;
        case 4://right
            ix = (m_ptSnake[0].x + 1) % SNAKEGAME_SCOPE_ROW;
            iy = m_ptSnake[0].y;
            break;
    }
    if (m_snakeArray[iy][ix] == SNAKEGAME_CELLTYPE_FOOD)
    {
        m_snakeArray[iy][ix] = SNAKEGAME_CELLTYPE_NULL;
        SnakeAddSnakeLen(ix, iy);
        return TRUE;
    }
    else if (m_snakeArray[iy][ix] == SNAKEGAME_CELLTYPE_AWARD)
    {
        m_snakeArray[iy][ix] = SNAKEGAME_CELLTYPE_NULL;
        m_snakeTotalScore += 10;
        //SnakeShowScore();
        return FALSE;
    }
    else if (m_snakeArray[iy][ix] == SNAKEGAME_CELLTYPE_LIFE)
    {
        m_snakeArray[iy][ix] = SNAKEGAME_CELLTYPE_NULL;
        m_snakeLife++;
        //SnakeShowSnakeLife();
        return FALSE;
    }
    return FALSE;
}
/******************************************************
Name: SnakeCheckDie
Desc: 检查蛇是否死亡
Param:无
Return: FALSE--没死亡
        TRUE--死亡
Global: 有
Note:
Author:czs
Log:
******************************************************/
UINT8 SnakeCheckDie()
{
    int indexX, indexY, i;
    switch (m_snakeCurDir)
    {
        case 1://down
            indexX = m_ptSnake[0].x;
            indexY = m_ptSnake[0].y + 1;
            if (!m_bsnakeCanThrough)//禁止穿越边界
            {
                if (indexY >= SNAKEGAME_SCOPE_COL)//出了边界
                    return TRUE;
            }
            break;

⌨️ 快捷键说明

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