c程序游戏

愿意可以和我交流,86711527。

我的想法是,在各个身体部位的运动中,最后一个方块的下一个位置坐标永远是前一个方块的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;/*食物消失*/

}