求运行在VC++6.0中的蛇代码。

#包括

#包括

#包括

#包括

#包括

#包括

#定义宽度40

#defineHEIGH12

枚举方向{//方向

左边,

对,

向上

下面的

};

结构食品{//食品

Intx

Inty

};

{//画蛇。

intx

inty

structNode * next

};

Structsnake {//snake属性du

intlenth//长度

enumdirectiondir//方向

};

structFood *食品;//食物

structSnake * snake//蛇属性

structNode*snode,* tail//蛇身

intSPEECH = 200

int score = 0;//分数

ints mark = 0;//吃食物标志志记

int times = 0;

int stop = 0;

voidInitfood();//生产食物

voidInitsnake();//构造蛇

void eatfood();//向前看

voidAddnode(intx,inty);//增加蛇身

void display(struct node * shead);//显示蛇坐在刀痕上。

void move();//蛇形运动

void draw();//画一条蛇

void home page();//主页

voidkeybordhit();//监视器键盘按键

void addtail();//吃食物

Voidgotoxy(intx,inty)//定位光标。

{

COORDpos

位置。x = x-1;

位置。y = y-1;

SetConsoleCursorPosition(GetStdHandle(STD _ OUTPUT _ HANDLE),pos);

}

void ini snake()//构造蛇

{

inti

snake =(struct snake *)malloc(sizeof(struct snake));

tail =(struct node *)malloc(sizeof(struct node));

food =(struct food *)malloc(sizeof(struct food));

蛇-& gt;lenth = 5;//初始长度5

蛇-& gt;dir = RIGHT//初始的蛇头方向是对的

for(I = 2;我& lt= snake-& gt;lenth+2;I++)//添加5个节点

{

Addnode(i,2);

}

}

voidinitfood()//生产食物

{

structNode * p = snode

int mark = 1;

srand((无符号)时间(空));//以时间为种子生成随机数。

while(1)

{

食物-& gt;x = rand()%(WIDTH-2)+2;//食物x坐标

食物-& gt;y = rand()%(HEIGH-2)+2;//食物y坐标

而(p!=空)

{

如果((食物-& gt;x = = p-& gt;x)和amp& amp(食物-& gt;y = = p-& gt;Y))//如果食物产生在蛇身上。

{//食物再生。

mark = 0;//无效的食物生成

打破;

}

p = p-& gt;接下来;

}

If(mark = = 1)//如果食物不在蛇身上,生成食物;否则,再生食物。

{

gotoxy(食品-& gt;十、食物-& gt;y);

printf("%c ",3);

打破;

}

mark = 1;

p = snode

}

}

Voidmove ()//move

{

structNode*q,* p = snode

if(snake-& gt;dir = =右)

{

add node(p-& gt;x+1,p->y);

如果(smark==0)

{

while(p->;下一个!=空)

{

q = p;

p = p-& gt;接下来;

}

q->;next = NULL

免费(p);

}

}

if(snake-& gt;方向= =左)

{

add node(p-& gt;x-1,p->y);

如果(smark==0)

{

while(p->;下一个!=空)

{

q = p;

p = p-& gt;接下来;

}

q->;next = NULL

免费(p);

}

}

if(snake-& gt;dir==UP)

{

add node(p-& gt;x,p-& gt;y-1);

如果(smark==0)

{

while(p->;下一个!=空)

{

q = p;

p = p-& gt;接下来;

}

q->;next = NULL

免费(p);

}

}

if(snake-& gt;方向= =向下)

{

add node(p-& gt;x,p-& gt;y+1);

如果(smark==0)

{

while(p->;下一个!=空)

{

q = p;

p = p-& gt;接下来;

}

q->;next = NULL

免费(p);

}

}

}

VoidAddnode(intx,inty)//添加蛇体。

{

struct node * new node =(struct node *)malloc(sizeof(struct node));

structNode * p = snode

新节点-& gt;next = snode

新节点-& gt;x = x

新节点-& gt;y = y

snode = newnode//节点被添加到蛇头

if(x & lt;2 | | x & gt= WIDTH | | y & lt2 | | y & gt=HEIGH)//到达边界

{

STOP = 1;

gotoxy(10,19);

Printf("撞墙,游戏结束,按任意键退出!\ n ");//失败

_ getch();

免费(snode);//释放内存

免费(蛇);

退出(0);

}

而(p!= null)//击中自身

{

如果(p->;下一个!=空)

如果((p-& gt;x = = x)& amp;& amp(p->;y==y))

{

STOP = 1;

gotoxy(10,19);

Printf("打自己,游戏结束,按任意键退出!\ n ");//失败

_ getch();

免费(snode);//释放内存

免费(蛇);

退出(0);

}

p = p-& gt;接下来;

}

}

void eatfood()//吃食物

{

addtail();

得分++;

}

voidaddtail()//添加蛇尾

{

struct node * new node =(struct node *)malloc(sizeof(struct node));

structNode * p = snode

尾巴-& gt;next = newnode

新节点-& gt;x = 50

新节点-& gt;y = 20

新节点-& gt;next = NULL//节点被添加到蛇头

tail = newnode//新的蛇尾

}

void Draw()//绘制蛇

{

structNode * p = snode

inti,j;

而(p!=空)

{

gotoxy(p-& gt;x,p-& gt;y);

printf("%c ",2);

尾巴= p;

p = p-& gt;接下来;

}

if(s node-& gt;x = = food-& gt;x & amp& ampsnode-& gt;y = = food-& gt;Y)//蛇头的坐标等于食物坐标。

{

smark = 1;

eat food();//添加节点

init food();//生产食物

}

如果(smark==0)

{

gotoxy(tail-& gt;x,tail-& gt;y);//食物清完之前没吃尾节点。

printf("%c ",' ');//吃菜的话,不知道尾节点。

}

其他

{

次数= 1;

}

if((smark = = 1)& amp;& amp(times==1))

{

gotoxy(tail-& gt;x,tail-& gt;y);//食物清完之前没吃尾节点。

printf("%c ",' ');//吃菜的话,不知道尾节点。

smark = 0;

}

gotoxy(5012);

Printf ("food: %d,%d ",food-& gt;十、食物-& gt;y);

gotoxy(50,5);

Printf("分数:% d ",分数);

gotoxy(50,7);

Printf("速度:% d ",语音);

gotoxy(15,14);

Printf("按o键加速");

gotoxy(15,15);

Printf("按P键减速");

gotoxy(15,16);

Printf("按空格键暂停");

}

voidhidecursor()//隐藏光标

{

CONSOLE _ CURSOR _ info CURSOR _ info = { 1,0}。

SetConsoleCursorInfo(GetStdHandle(STD _ OUTPUT _ HANDLE),& ampcursor _ info);

}

void home page()//绘制主页

{

intx,y;

hide cursor();//隐藏光标

printf("-\ n ");

printf(" | \ t \ t \ t \ t | \ n ");

printf(" | \ t \ t \ t \ t | \ n ");

printf(" | \ t \ t \ t \ t | \ n ");

printf(" | \ t \ t \ t \ t | \ n ");

printf(" | \ t \ t \ t \ t | \ n ");

printf(" | \ t \ t \ t \ t | \ n ");

printf(" | \ t \ t \ t \ t | \ n ");

printf(" | \ t \ t \ t \ t | \ n ");

printf(" | \ t \ t \ t \ t | \ n ");

printf(" | \ t \ t \ t \ t | \ n ");

printf("-\ n ");

gotoxy(5,13);

Printf("点击任意键开始游戏!根据W.A.S.D . ")控制方向;

_ getch();

init snake();

init food();

gotoxy(5,13);

printf(" ");

}

voidkeybordhit()//监视器键盘

{

charch

if(_kbhit())

{

ch = getch();

开关(通道)

{

案例“w”:

case ' w ':if(snake-& gt;Dir==DOWN)//如果原方向向下,反方向无效。

{

打破;

}

其他

蛇-& gt;dir = UP打破;

案例“a”:

case ' a ':if(snake-& gt;Dir==RIGHT)//如果原方向是对的,但反方向无效。

{

打破;

}

其他

蛇-& gt;dir = LEFT打破;

案例:

case ' s ':if(snake-& gt;Dir==UP)//如果原方向向上,则反方向无效。

{

打破;

}

其他

蛇-& gt;dir = DOWN打破;

案例“d”:

case ' d ':if(snake->;Dir==LEFT)//如果原方向为左,但反方向无效。

{

打破;

}

其他

蛇-& gt;dir = RIGHT打破;

案例“o”:

案例“o”:

if(SPEECH & gt;=150)//加速。

{

语音=语音-50;

}

打破;

案例“p”:

案例“p”:

if(语音& lt=400)//减速

{

演讲=演讲+50;

}

打破;

案例“”://暂停

gotoxy(15,18);

Printf("游戏已经暂停,按任意键恢复游戏");

系统("暂停& gtnul”);

gotoxy(15,18);

printf(" ");

打破;

默认:break

}

}

}

int main(void)//程序入口

{

主页();

而(!停止)

{

keybordhit();//监视器键盘按键

move();//snake的坐标变化

draw();//蛇的重新绘制

睡眠(言语);//暂时挂起线程

}

return0

}

扩展数据:

注意事项:

1.代码将源信息转换成易于交流或存储的符号。解码(Decoding)是一个还原解码的过程,将代码符号转换成接收方能够理解的形式。

2.编码的原因之一是在共同语言(口语或书面语)难以达到的情况下进行交流。例如,旗帜可以用特定的标记来表达特定的信息,而站在远处的另一个人可以解释该标记来再现该信息。