贪吃蛇游戏的制作记录
关于蛇的实现代码
#include "snake.h"
#include "globalvar.h"
#include <graphics.h>
int fangXiang = 1;//方向 0 右 1 上 2 左 3 下
int snakeHang[100] = { 10,11,12,13,14 };//蛇 每节所在行
int snakeLie[100] = { 10,10,10,10,10 };//蛇 每节所在列
int snakeLength = 5;//当前的长度
IMAGE imgHead[4];
IMAGE imgBody;
void snakeMove()
{
//身体爬行
for (int j = snakeLength - 1; j >= 1; j--)
{
snakeHang[j] = snakeHang[j - 1];
snakeLie[j] = snakeLie[j - 1];
}
//头爬行
switch (fangXiang)
{
case 0:
snakeLie[0]++;//右
break;
case 1:
snakeHang[0]--;//上
break;
case 2:
snakeLie[0]--;//左
break;
case 3:
snakeHang[0]++;//下
break;
}
}
int enabledEat()
{
return snakeHang[0] == appleHang && snakeLie[0] == appleLie;
}
void snakeGrow()
{
snakeLength++;
}
int enabledOver()
{
return snakeHang[0] == 0 || snakeHang[0] == 19 || snakeLie[0] == 0 || snakeLie[0] == 19;
}
int enabledEatSelf()
{
//状态思维:
int yes = 0;
//检查
for (int i = 1; i < snakeLength; i++)
{
if (snakeHang[0] == snakeHang[i] && snakeLie[0] == snakeLie[i])
{
yes = 1;
break;
}
}
return yes;
}
void snakeDown()
{
if (fangXiang != 1)
{
fangXiang = 3;
}
}
void snakeUp()
{
fangXiang = 1;
}
void snakeRight()
{
fangXiang = 0;
}
void snakeLeft()
{
fangXiang = 2;
}
void snakegraph()
{
putimage(snakeLie[0] * 30, snakeHang[0] * 30, &imgHead[fangXiang]);
for (int j = 1; j < snakeLength; j++)
{
putimage(snakeLie[j] * 30, snakeHang[j] * 30, &imgBody);
}
}
void snakegraphHead()
{
TCHAR str[100];
for (int i = 0; i < 4; i++)
{
_stprintf(str, L".\\she\\head%d.bmp", i);
loadimage(&imgHead[i], str);
}
loadimage(&imgBody, L".\\she\\body.bmp");
}