📄 snake.c
字号:
/******************************************************
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 + -