该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
吃蛇的代码,我有些问题想请教下。(下面有完整的代码,帮我看下)
1;当我把蛇的节数(node)一开始调为4时,为什么还可以画出4个节数的蛇来。问这个主要是应为我开始初始只有两个坐标啊 snake.crd[0].x = 0 + SNAKELEN;snake.crd[0].y = 0;snake.crd[1].x = 0;snake.crd[1].y = 0;snake.node = 2;后面没设坐标啊,它怎么可以画出来。
2;还有就是这个程序中几处
void showsnake()
{
int
i;
for (i=snake.node-1; i>=0; i--)
{
rectangle(snake.crd[i].x, snake.crd[i].y,
snake.crd[i].x+SNAKELEN, snake.crd[i].y+SNAKELEN);
}
setcolor(BLACK);
rectangle(snake.crd[snake.node].x, snake.crd[snake.node].y,
snake.crd[snake.node].x+SNAKELEN, snake.crd[snake.node].y+SNAKELEN);
setcolor(WHITE);
rectangle(snake.crd[snake.node-1].x, snake.crd[snake.node-1].y,
snake.crd[snake.node-1].x+SNAKELEN, snake.crd[snake.node-1].y+SNAKELEN);
}
那个(白色)和(黑色)运行的原理,整个思路要完整些。那些作用我是知道额,帮我下,谢谢!!!
以下是完整的代码。。。。
#include
#include
#include
#include
#define SIZEMAX 100 //定义蛇的最大长
#define SNAKELEN 3 //蛇的大小和蛇每次移动的距离
#define SPEED 20 //初始速度
/****************************************/
typedef enum //定义表示方向的枚举变量
{
left, right, up, down
}DIR;
typedef struct //定义一个结构体表示坐标
{
int
x;
int
y;
}COOR;
struct FOOD //定义结构体,来存储食物的相关信息
{
COOR
crd; //食物出现的坐标
int
flag; //食物的状态,1表示食物还没被吃,0表示食物被吃了
}food;
struct SNAKE //定义结构体,来存储蛇的相关信息
{
COOR
crd[SIZEMAX]; //保存蛇的每个结数的坐标,最多有100节
int
node; //保存蛇当前节数
DIR
dir; //当前蛇行进的方向
}snake;
int speed = SPEED; //方便以后在程序中改变速度
/***************************************/
void init(); //初始化游戏
void setfoodcrd(); //设置食物要出现的坐标
void showfood(); //在相应的坐标画出食物
void snakemove(); //移动蛇,实际就是改变蛇各节的坐标
void judgeslod(); //判断蛇是否撞墙或者撞到自己
void judgesef(); //判断蛇是否吃到食物了
void showsnake(); //在屏幕上画出蛇
void changeskdir(); //接受用户输入,改变蛇的前进方向
void gameover(); //游戏结束
/**************************************/
void main()
{
init();
while(1)
{
while(!kbhit())//kbhit(): 检查当前是否有键盘输入,若有则返回一个非0值,否则返回0
{
if
(!food.flag)
{
setfoodcrd();
}
showfood();
judgeslod();
judgesef();
snakemove();
Sleep(speed);//Sleep()里面的单位,是以毫秒为单位,所以如果想让函数滞留1秒的话,应该是Sleep(1000);
}
changeskdir();
}
}
/***********************************/
void init()
{
initgraph(640, 480);
srand(time(NULL));
food.flag = 0;
snake.crd[0].x = 0 + SNAKELEN;
snake.crd[0].y = 0;
snake.crd[1].x = 0;
snake.crd[1].y = 0;
snake.node = 2;
snake.dir = right;
}
void setfoodcrd()
{
food.crd.x = rand() % (600/SNAKELEN) *