您的位置:首页 > 其它

字符版贪吃蛇

2009-07-26 08:32 190 查看
Code:

/*TC下测试通过*/

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#define LEFT 0x4b00

#define RIGHT 0x4d00

#define DOWN 0x5000

#define UP 0x4800

#define ESC 0x011b

#define S struct snakepart /* 蛇节结构体 */

#define LENGTH sizeof(S) /* 结构体长度 */

void creat(void);

void printscore(int n);

void gameover(void);

void game(void);

S

{

int x,y; /* 蛇节坐标 */

S *last; /* 上个蛇节地址 */

};

enum direction

{left,right,down,up};

main()

{

creat();

game();

sleep(1);

getch();

}

void creat(void)/* 建立围栏 */

{

int i,j;

gotoxy(2,2);

for(i=0;i<78;i++)

putchar('#');

gotoxy(2,24);

for(;i>0;i--)

putchar('#');

for(i=3;i<24;i++)

{

gotoxy(2,i);

putchar('#');

gotoxy(79,i);

putchar('#');

}

}

void game(void)

{

S *phead,*ptail,*p;/* 蛇头 蛇尾 检查蛇是否撞到自己 */

int foodx,foody;/* 食物坐标 */

int life=0,score=0;/* 蛇活着 分数为0 */

int food=0;/* 是否需要食物 */

int key;/* 接收按键 */

int n;

enum direction fx;

fx=left;/* 方向向左 */

printscore(score);

randomize();

foodx=3+random(76);

foody=3+random(21);

gotoxy(foodx,foody);

putchar('/17');/* 输出食物 */

phead=malloc(LENGTH);

phead->x=40;

phead->y=13;

phead->last=ptail=malloc(LENGTH);

ptail->x=41;

ptail->y=13;

ptail->last=phead;

gotoxy(phead->x,phead->y);

printf("/4/4/b/b"); /* 输出蛇 */

sleep(2);/* 暂停一下 */

while(1)

{

while(!kbhit())

{

while(food)/* 输出食物 */

{

foodx=3+random(76);

foody=3+random(21);

gotoxy(foodx,foody);

putchar('/17');

food=0;

for(p=ptail;p!=phead;p=p->last)

if(p->x==foodx&&p->y==foody)/* 检查食物是否出现在蛇身体里 */

{

food=1;

}

}

gotoxy(ptail->x,ptail->y);

putchar(' ');/* 把蛇尾擦掉 */

ptail->x=phead->x;

ptail->y=phead->y;

switch(fx)

{

case left :ptail->x=phead->x-1;break;

case right:ptail->x=phead->x+1;break;

case down :ptail->y=phead->y+1;break;

case up :ptail->y=phead->y-1;break;

}

phead=ptail;

ptail=ptail->last;

gotoxy(phead->x,phead->y);

printf("/4/b");

if(phead->x==2||phead->x==79||phead->y==2||phead->y==24)/* 是否撞到墙 */

{

life=1;

gameover();

}

for(p=ptail;p!=phead;p=p->last)

if(p->x==phead->x&&p->y==phead->y)

{

life=1;

gameover();

}

if(life) /* 如果蛇死 */

break; /* 跳出循环 */

if(phead->x==foodx&&phead->y==foody)

{

food=1;/* 需要食物 */

score+=10;

printscore(score);

phead->last=malloc(LENGTH);/* 新蛇尾 */

phead->last->last=ptail;

ptail=phead->last;

}

for(n=0;n<50;n++)

delay(2000-score);

}

if(life)

break;

if((key=bioskey(0))==ESC)

break;

switch(key)

{

case LEFT:if(fx!=right)fx=left;break;

case RIGHT:if(fx!=left)fx=right;break;

case DOWN:if(fx!=up)fx=down;break;

case UP:if(fx!=down)fx=up;break;

}

}

}

void printscore(int n)

{

gotoxy(1,1);

textcolor(2);

cprintf("score:%5d",n);

}

void gameover(void)

{

gotoxy(33,12);

printf("Game Over!");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: