/* Note:Your choice is C IDE */
#include "stdio.h"
#include "stdlib.h"
#include "graphics.h"
#include "conio.h"
#define UP 0x4800/*光标上键值*/
#define DOWN 0x5000/*光标下键值*/
#define LEFT 0x4b00/*光标左键值*/
#define RIGHT 0x4d00/*光标右键值*/
int n=2;
void startmove();
void changexy();
void drawbody();
struct snake /*蛇头的坐标*/
{
int headx1;
int heady1;
int headx2;
int heady2;
int tailx3;
int taily3;
};
void changexy()
{
int i;
struct snake body[40];
for(i=n-1;i>0;i--)
{
body[i].headx1=body[i-1].headx1;
body[i].heady1=body[i-1].heady1;
body[i].headx2=body[i-1].headx2;
body[i].heady2=body[i-1].heady2;
body[i].tailx3=body[i-1].tailx3;
body[i].taily3=body[i-1].taily3;
}
}
snakebody() /*蛇的身体*/
{
int i;
struct snake body[40];
for(i=0;i<n;i++)
{
setcolor(GREEN);
setlinestyle(0,0,3);
rectangle(body[i].tailx3,body[i].taily3,body[i].headx2,body[i].heady2);
}
}
void startmove()/*蛇开始运动*/
{
int i,j,key;
struct snake body[40]={{20,0,20,10,10,0},
{10,0,10,10,0,0}};
while(1)
{
while(!kbhit())
{
if(body[0].headx1>body[0].tailx3&&body[0].headx1<400)/*向右运动*/
{
changexy();
body[0].headx1+=10;
body[0].headx2+=10;
body[0].tailx3+=10;
drawbody();
}
if(body[0].headx1<body[0].tailx3&&body[0].headx1>0)/*向左运动*/
{
changexy();
body[0].headx1-=10;
body[0].headx2-=10;
body[0].tailx3-=10;
drawbody();
}
if(body[0].heady1<body[0].taily3&&body[0].heady1>0)/*向上运动*/
{
changexy();
body[0].heady1-=10;
body[0].heady2-=10;
body[0].taily3-=10;
drawbody();
}
if(body[0].heady1>body[0].taily3&&body[0].heady1<300)/*向下运动*/
{
changexy();
body[0].heady1+=10;
body[0].heady2+=10;
body[0].taily3+=10;
drawbody();
}
delay(100000);
clearviewport();
}
}
key=bioskey(0);
if(key==UP&&body[0].heady1>0)
{
changexy();
changeup();
drawbody();
delay(100000);
clearviewport();
}
if(key==DOWN&&body[0].heady1<300)
{
changexy();
changedown();
drawbody();
delay(100000);
clearviewport();
}
if(key==LEFT&&body[0].headx1>0)
{
changexy();
changeleft();
drawbody();
delay(100000);
clearviewport();
}
if(key==RIGHT&&body[0].headx1<400)
{
changexy();
changeright();
drawbody();
delay(100000);
clearviewport();
}
}
void drawbody()
{
int i;
struct snake body[40];
for(i=0;i<n;i++)
rectangle(body[i].tailx3,body[i].taily3,body[i].headx2,body[i].heady2);
}
changeup()/*变为向上运动的变化*/
{
struct snake body[40];
changexy();
if(body[0].headx1>body[0].tailx3)/*由向右运动改为向上*/
{
body[0].headx1-=10;
body[0].heady1-=10;
body[0].heady2-=20;
}
if(body[0].headx1<body[0].tailx3)/*由向左运动改为向上*/
{
body[0].heady1-=10;
body[0].headx2+=10;
body[0].heady2-=20;
body[0].tailx3-=10;
}
drawbody();
}
changedown()/*变为向下运动的变化*/
{
struct snake body[40];
changexy();
if(body[0].headx1>body[0].tailx3)/*由向右运动改为向下*/
{
body[0].headx1-=10;
body[0].heady1+=20;
body[0].heady2+=10;
body[0].taily3+=10;
}
if(body[0].headx1<body[0].tailx3)/*由向左运动改为向下*/
{
body[0].heady1+=20;
body[0].headx2+=10;
body[0].heady2+=10;
body[0].tailx3-=10;
body[0].taily3+=10;
}
drawbody();
}
changeleft()/*变为向左运动的变化*/
{
struct snake body[40];
changexy();
if(body[0].heady1<body[0].taily3)/*由向上运动改为向左*/
{
body[0].headx1-=10;
body[0].headx2-=20;
body[0].heady2+=10;
body[0].tailx3-=10;
body[0].taily3-=10;
}
if(body[0].heady1>body[0].taily3)/*由向下运动改为向左*/
{
body[0].headx1-=10;
body[0].heady1-=10;
body[0].headx2-=20;
}
drawbody();
}
changeright()/*变为向右运动的变化*/
{
struct snake body[40];
changexy();
if(body[0].heady1<body[0].taily3)/*由向上运动改为向右*/
{
body[0].headx1+=20;
body[0].headx2+=10;
body[0].heady2+=10;
body[0].tailx3+=10;
body[0].taily3-=10;
}
if(body[0].heady1>body[0].taily3)/*由向下运动改为向右*/
{
body[0].headx1+=20;
body[0].heady1-=10;
body[0].headx2+=10;
body[0].tailx3+=10;
}
drawbody();
}
main()
{
int driver,mode;/*设置系统进入图形模式*/
driver=VGA;mode=VGAHI;
initgraph(&driver,&mode,"C:\\tc");
setcolor(1);
rectangle(50,80,470,400);/*贪吃蛇界面*/
rectangle(60,90,460,390);
setfillstyle(SOLID_FILL,BLUE);
floodfill(55,85,BLUE);
setviewport(60,90,460,390,1);
snakebody();
startmove();
getch();
}
这是我自己写的第一个比较大一点的程序,可能代码很繁冗,希望大家能帮我把不能显示和运动的问题指明一下,在下感谢不敬!!!