| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 989 人关注过本帖
标题:求助,我这个贪吃蛇前半边未开始吃怎么不能显示和动啊?
只看楼主 加入收藏
tovey2008
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-9-29
收藏
 问题点数:0 回复次数:2 
求助,我这个贪吃蛇前半边未开始吃怎么不能显示和动啊?


/* 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();

}
这是我自己写的第一个比较大一点的程序,可能代码很繁冗,希望大家能帮我把不能显示和运动的问题指明一下,在下感谢不敬!!!

搜索更多相关主题的帖子: 贪吃 
2007-10-15 22:32
eakcon
Rank: 1
等 级:新手上路
帖 子:754
专家分:0
注 册:2007-11-7
收藏
得分:0 

ff

2007-11-14 10:08
eakcon
Rank: 1
等 级:新手上路
帖 子:754
专家分:0
注 册:2007-11-7
收藏
得分:0 

好强呀!


此主题相关图片如下:

2007-11-14 10:09
快速回复:求助,我这个贪吃蛇前半边未开始吃怎么不能显示和动啊?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.110898 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved