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