c程序游戏
我的想法是,在各个身体部位的运动中,最后一个方块的下一个位置坐标永远是前一个方块的X 1和Y 1。
也就是说,后面的方块总是遵循前面方块的轨迹。
而且第一个方块不能回头,所以如果((a[0].x0!=(a[1].x0-dx))...
我也想编一个类似蛇的游戏...别人写的没有评论,所以我不是很懂...所以我先按照自己的想法写了。
一个小实验,写的差不多了,但是很多细节没有处理好!!比如我没写蛇摸自己会死;也
就是食物的随机位置可能出现在身体所在的地方,以至于看不到。。等一下。
*/
#包含“stdio.h”
#包含“graphics.h”
#包含" stdlib.h "
#定义右0x4d00
#定义左0x4b00
#定义高达0x4800
#向下定义0x5000
#定义ESC 0x011b
int dx/*移动时改变X轴主体的距离*/
int dy/*移动时Y轴主体改变距离*/
int N = 4;/*身体部分的数量*/
/*存储身体每个部位的信息*/
结构体
{
int x0,y0;/*每个方块左上角的坐标,当对象移动时首先改变*/
int x1,y 1;/*每个方块左上角的坐标,但主要是为后面的方块指定他下一个位置的坐标*/
} a[80]= { { 300100300100 },
{290,100,290,100},/*定义了四个几何体*/
{280,100,280,100},
{270,100,270,100}
};
/*存储每种食物的信息*/
结构框
{
int x;/*食物左上角的横坐标*/
int y;/*食物左上角的纵坐标*/
int live/*食物是否存在,1:是,0:否*/
}框;/*定义一个食物变量*/
/*初始化图形*/
void initgr()
{
int gd=DETECT,GM;
init graph(& amp;gd,& ampgm,“”;
setcolor(黄色);
setlinestyle(0,0,3);
矩形(200,150,440,200);
set color(7);
settextstyle(0,0,4);
set color(9);
outtextxy(240,160,"蛇");
settextstyle(0,0,1);
set color(7);
outtextxy(280,220,“由UFO zh”);
outtextxy(230,240,"按任意键继续...");
getch();
clear device();
setfillstyle(1,蓝色);
吧(150,80,450,380);
}
/*****************************************************************************/
主()
{
int n,I;
int键;/*存储键值*/
dx = 10;/*每个方块运动的长度*/
dy = 10;
initgr();
setlinestyle(0,0,1);
set color(wh 99 ve);
randomize();/*游戏开始前抽取第一个吃的方块*/
box . x = 300+10 *(rand()% 14+1);
box . y = 100+10 *(rand()% 26+1);
box . live = 1;
矩形(box.x,box.y,box.x+10,box . y+10);
/*默认情况下,初始条向右移动*/
而(!kbhit())
{
a[0]. x0 = a[0]. x0+dx;
for(I = 1;我& ltn;i++)
{
a[I]. x0 = a[I-1]. x 1;
a[I]. y0 = a[I-1]. y 1;
}
setcolor(蓝色);
for(n = 0;n & lt4;n++)
矩形(a[n].x1,a[n].y1,a[n].x1+dx,a[n]. y 1+dy);
set color(wh 99 ve);
延时(3000);
for(n = 0;n & lt4;n++)
矩形(a[n].x0,a[n].y0,a[n].x0+dx,a[n]. y0+dy);
for(I = 0;我& ltn;i++)
{
a[I]. x 1 = a[I]. x0;
a[I]. y 1 = a[I]. y0;
}
延时(50000);
}
key = BIOS key(0);
while(1)
{
开关(钥匙)
{
case RIGHT:if((a[0].x0!= (a [1] .x0-dx))/*当第一个方块不在第二个方块的右侧时,条形向右移动,否则case LEFT*/
{
而(!kbhit())
{
if(a[0]. x0 & lt;150 | | a[0]. x0 & gt;450 | | a[0]. y0 & lt;80 | | a[0]. y0 & gt;380) /*当第一个框跨越任意四个边界时,退出*/
退出(0);
If(box.live==0) /*当食物不存在时,随机添加一种食物*/
{
box . x = 10 *(rand()% 30+15);
box . y = 10 *(rand()% 30+8);
矩形(box.x,box.y,box.x+10,box . y+10);
box . live = 1;/*食物成为存在*/
}
/*当乌鳢直接在食物的左边并且食物存在时,食物被吃掉*/
if((a[0]. x0 = =(box . x-10))& amp;& amp(a[0]. y0 = = box . y))& amp;& amp(box.live==1))
{
for(I = N;我& gt=1;I-)/*将现有车身向后移动一个单位*/
{
a[I]. x0 = a[I-1]. x0;
a[I]. x 1 = a[I-1]. x 1;
a[I]. y0 = a[I-1]. y0;
a[I]. y 1 = a[I-1]. y 1;
a[0]. x0 = box . x;/*给黑鱼添加食物作为身体*/
a[0]. y0 = box . y;
a[0]. x 1 = a[0]. x0;
a[0]. y 1 = a[0]. y0;
n++;/*车身编号加1*/
box . live = 0;/*食物消失*/
}