Login
网站首页 > 文章中心 > 其它

贪吃蛇代码_谁有用c语言制作贪吃蛇的代码,及使用方法,用VC打

作者:小编 更新时间:2023-06-14 09:21:30 浏览量:286人看过

下面是我做的:

#include

#define UP 0x4800

#define DOWN 0x5000

#define RIGHT 0x4d00

#define LEFT 0x4b00

#define ESC 0x11b

#define ENTER 0x1c0d

#define SPACE 0x3920

struct Food/*食物结构闹团体*/

{

int x;

int y;

int yes;

}food;

struct Snake /*蛇结构体*/

int x[100];

int y[100];

int n;

int color;

int direction;

}snake;

int speed=0000;

void main()/*主函数*/

void wall();

void start();

void close();

void game();

void score();

void leavl();

void select();

void sw();

int key;

while(1)

start();

select();

cleardevice();

wall();

sw();

game();

setcolor(RED);

outtextxy(250,220,"Please press ESC Quit");

outtextxy(250,240,"昌和Press any-key GO ON");

key=bioskey(0);

if(key==ESC) break;

}

close();

void close()

getch();

closegraph();

void start()/*BGI初始化*/

int gd=DETECT,gm;

registerbgidriver(EGAVGA_driver);

initgraph(&gd,&gm,"");

void wall()

{ /*画墙*/

int i;

randomize();

for(i=0;i<=1000;i◆◆)

putpixel(random(640),random(480),random(14)◆1);

setcolor(random(14)◆1);

rectangle(60,140,580,410);

rectangle(62,142,578,408);

setlinestyle(0,1,3);

rectangle(68,148,571,401);

setcolor(LIGHTBLUE);

void game() /*主游戏*/

int i,key,gamespeed;

snake.color=random(14)◆1;

food.yes=1;

setcolor(GREEN);

outtextxy(400,50,"Press ESC Qiut");

outtextxy(400,70,"Press ENTER Stop"液迅橘);

outtextxy(100,100,"score:");

outtextxy(300,100,"leavl:");

snake.x[0]=150;

snake.y[0]=200;

snake.x[1]=140;

snake.y[1]=200;

snake.n=2;

snake.direction=2;

setcolor(WHITE);

setlinestyle(0,1,1);

setfillstyle(1,snake.color);

for(i=0;i

bar(snake.x[i],snake.y[i],snake.x[i]◆9,snake.y[i]◆9); /*画蛇*/

key=bioskey(0); /*设置按键*/

if(bioskey(1)) key=bioskey(0);

if(key==ENTER) bioskey(0);

/*if(key==SPACE) select();*/

if(key==LEFT&&snake.direction!=2) snake.direction=1;

if(key==RIGHT&&snake.direction!=1) snake.direction=2;

if(key==UP&&snake.direction!=4) snake.direction=3;

if(key==DOWN&snake.direction!=3) snake.direction=4;

while(!kbhit())

delay(speed);

gamespeed=60000-(snake.n-2)*1000; /*蛇每增加一节延时减少1000毫秒*/

delay(gamespeed);

leavl();

if(gamespeed==0)

setcolor(snake.color);

settextstyle(0,0,5);

outtextxy(140,250,"You win!!");

outtextxy(220,200,"GOOD!");

settextstyle(0,0,1);

bioskey(0);

return;

setfillstyle(1,BLACK);

if(food.yes==1)/*如果蛇头碰到食物,不运行下面语句*/

bar(snake.x[snake.n-1],snake.y[snake.n-1],snake.x[snake.n-1]◆9,snake.y[snake.n-1]◆9); /*擦除蛇尾*/

0;i--) /*蛇的后一节的坐标等于前一节的坐标*/

snake.x[i]=snake.x[i-1];

snake.y[i]=snake.y[i-1];

switch(snake.direction)

case 1:snake.x[0]-=10; break;

case 2:snake.x[0]◆=10; break;

case 3:snake.y[0]-=10; break;

case 4:snake.y[0]◆=10; break;

bar(snake.x[0],snake.y[0],snake.x[0]◆9,snake.y[0]◆9); /*在蛇头的前面画出新的一节*/

if(food.x==snake.x[0]&&food.y==snake.y[0]) /*蛇头碰到食物*/

food.yes=0;

snake.n◆◆;

=570||snake.x[0]=400||snake.y[0]<=140) /*判断蛇是否撞墙*/

3;i--)

if(snake.x[0]==snake.x[i]&&snake.y[0]==snake.y[i]) /*判断蛇是否碰到自身*/

score();

void score() /*记分*/

char a[10];

bar(140,100,300,110);

sprintf(a,"score:%d",(snake.n-2)*10);

outtextxy(100,100,a);

} /*等级*/

void leavl()

char str[10];

bar(340,100,400,110);

sprintf(str,"leavl:%d",(snake.n-1)/5);

outtextxy(300,100,str);

bar(200,120,300,130);

if((snake.n-1)%5==0)

outtextxy(200,120,"LEAVL UP!"),

snake.color◆◆;

15)

snake.color=1;

void sw()/*画食物*/

food.x=random(500)◆70;

food.y=random(250)◆150;

for(i=0;i<=snake.n;i◆◆)

while(snake.x[i]==food.x||snake.y[i]==food.y) /*判断食物是否出现在蛇身上*/

food.x=random(500)◆70,food.y=random(250)◆150;

while((food.x)!=0)

food.x--;

while((food.y)!=0)

food.y--;

setfillstyle(1,YELLOW);

bar(food.x,food.y,food.x◆9,food.y◆9);

void select()

static int x=129,y=148;

setcolor(LIGHTGREEN);

outtextxy(140,300,"Press ENTER Select");

rectangle(x,y,x◆30,y◆30);

settextstyle(0,0,4);

outtextxy(190,50,"Speed");

outtextxy(130,150,"5 4 3 2 1");

if(key==ENTER) break;

if(key==RIGHT&&x<=350)

speed◆=10000;

setcolor(0);

x◆=64;

=160)

speed-=10000;

x-=64;

网友们,很荣幸回答你的问题,我这里是一个c的贪吃蛇源代码,希望对你有帮助,不过运行这个时需要你的软件包含惊蛰EasyX图形函数,比如vc◆◆6.0,如遇到槐凳问题问题可以关注本站,希望对你有帮助。

#define LEFT 'a'

#define RIGHT 'd'

#define DOWN 's'

#define UP 'w'

#define ESC 27

#define N 200 /*蛇的最大长度*/

char key;

int score=0; /*得分*/

int gamespeed=100; /*游戏速度自己调整*/

struct Food

int x;/*食物的横坐标*/

int y;/*食物的纵坐标*/

int yes; /*判断是否要出现食物的变量*/

}food;/*食物的结构体*/

struct Snake

int x[N];

int y[N];

int node; /*蛇的节数*/

int direction;/*蛇移动方差明庆向*/

int life; /* 蛇的生命,0活着,1死亡*/

void Init(void); /*图形驱动*/

void Close(void); /*图形结束*/

void DrawK(void); /*开始画面*/

void GameOver(void); /*结束游戏*/

void GamePlay(void); /*玩游戏具体过程*/

void PrScore(void); /*输出成绩*/

/*主函数*/

void main(void)

Init(); /*图形驱动*/

DrawK(); /*开始画面*/

GamePlay(); /虚握*玩游戏具体过程*/

Close(); /*图形结束*/

/*图形驱动*/

void Init(void)

int gd=9,gm=2;

initgraph(&gd,&gm," ");

/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/

void DrawK(void)

/*setbkcolor(LIGHTGREEN);*/

setcolor(LIGHTCYAN);

setlinestyle(PS_SOLID,0,1); /*设置线型*/

for(i=50;i<=600;i◆=10)/*画围墙*/

rectangle(i,40,i◆10,49); /*上边*/

rectangle(i,451,i◆10,460);/*下边*/

for(i=40;i<=450;i◆=10)

rectangle(50,i,59,i◆10); /*左边*/

rectangle(601,i,610,i◆10);/*右边*/

/*玩游戏具体过程*/

void GamePlay(void)

srand(time(NULL)); /*随机数发生器*/

food.yes=1; /*1表示需要出现新食物,0表*/

snake.life=0; /*活着*/

snake.direction=1;/*方向往右*/

snake.x[0]=100;snake.y[0]=100;/*蛇头*/

snake.x[1]=110;snake.y[1]=100;

snake.node=2; /*节数*/

PrScore();/*输出得分*/

while(1) /*可以重复玩游戏,压ESC键*/

while(!kbhit()) /*在没有按键的情况下,蛇自*/

if(food.yes==1) /*需要出现新食物*/

food.x=rand()@0◆60;

food.y=rand()50◆60;

while(food.x!=0) /*食物随机出现后必须让食物*/

food.x◆◆;

while(food.y!=0)

food.y◆◆;

food.yes=0; /*画面上有食物了*/

if(food.yes==0) /*画面上有食物了就要显示*/

rectangle(food.x,food.y,food.x◆10,food.y-10);

0;i--) /*蛇的每个环节往前移动,也法/

/*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/

case 1: snake.x[0]◆=10;break;

case 2: snake.x[0]-=10;break;

case 3: snake.y[0]-=10;break;

case 4: snake.y[0]◆=10;break;

/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可*/

for(i=3;i

if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0])

GameOver(); /*显示失败*/

snake.life=1;

break;

if(snake.x[0]595||snake.y[0]455) /*蛇是否撞到墙壁*/

{ GameOver(); /*本次游戏结束*/

snake.life=1; /*蛇死*/

if(snake.life==1) /*以上两种判断以后,如果蛇*/

if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃到食物以后*/

setcolor(BLACK); /*把画面上的食物东西去*/

snake.x[snake.node]=-20;snake.y[snake.node]=-20;

/*新的一节先放在看不见的位置,下次循环就取前一节的位置*/

snake.node◆◆; /*蛇的身体长一节*/

food.yes=1; /*画面上需要出现新的食物*/

score◆=10;

PrScore();/*输出新得分*/

setcolor(RED); /*画出蛇*/

for(i=0;i

rectangle(snake.x[i],snake.y[i],snake.x[i]◆10,snake.y[i]-10);

Sleep(gamespeed);

setcolor(BLACK); /*用黑色去除蛇的的最后*/

rectangle(snake.x[snake.node-1],snake.y[snake.node-1],

snake.x[snake.node-1]◆10,snake.y[snake.node-1]-10);

} /*endwhile(!kbhit)*/

if(snake.life==1) /*如果蛇死就跳出循环*/

key=getch(); /*接收按键*/

if (key == ESC) break; /*按ESC键退出*/

switch(key)

case UP:

if(snake.direction!=4)/*判断是否往相反的方向移动*/

snake.direction=3;

case RIGHT:

if(snake.direction!=2)

snake.direction=1;

case LEFT:

if(snake.direction!=1)

case DOWN:

if(snake.direction!=3)

snake.direction=4;

}/*endwhile(1)*/

/*游戏结束*/

void GameOver(void)

PrScore();

setfont(56,0,"黑体");

outtextxy(200,200,"GAME OVER");

/*输出成绩*/

void PrScore(void)

setfillstyle(YELLOW);

bar(50,15,220,35);

setcolor(BROWN);

setfont(16,0,"宋体");

sprintf(str,"score:%d",score);

outtextxy(55,16,str);

/*图形结束*/

void Close(void)

#define N 200

#define ESC 0x011b

int i,key;

int score=0;/*得分*/

int gamespeed=50000;/*游戏速度自己调整*/

int yes;/*判断是否要出现食物的变量*/

int node;/*蛇的节数*/

int direction;/*蛇移动方向*/

int life;/* 蛇的生命,0活着,1死亡*/

void Init(void);/*图形驱动*/

void Close(void);/*图形结束盯纯*/

void DrawK(void);/*开始画面*/

void GameOver(void);/*结束游戏*/

void GamePlay(void);/*玩游戏具体过程*/

void PrScore(void);/*输出成绩*/

Init();/*图形驱动*/

DrawK();/*开始画面*/

GamePlay();/*玩游戏具体过程*/

Close();/*图形结束*/

initgraph(&gd,&gm,"c:\\tc");

setcolor(11);

setlinestyle(SOLID_LINE,0,THICK_WIDTH);/敏梁*设置线型*/

rectangle(i,40,i◆10,49); /*上边*/

rectangle(50,i,59,i◆10); /*左边*/

randomize();/*随机数发生器*/

food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/

snake.life=0;/*活着*/

snake.node=2;/*节数*/

while(1)/*可以重复玩游戏,压ESC键结束*/

while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/

if(food.yes==1)/*需要出现新食物*/

while(food.x!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/

food.yes=0;/*画面凯拿咐上有食物了*/

if(food.yes==0)/*画面上有食物了就要显示*/

0;i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/

case 1:snake.x[0]◆=10;break;

for(i=3;i

GameOver();/*显示失败*/

if(snake.x[0]595||snake.y[0]<55||

455)/*蛇是否撞到墙壁*/

GameOver();/*本次游戏结束*/

if(snake.life==1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/

setcolor(0);/*把画面上的食物东西去掉*/

snake.node◆◆;/*蛇的身体长一节*/

food.yes=1;/*画面上需要出现新的食物*/

setcolor(4);/*画出蛇*/

rectangle(snake.x[i],snake.y[i],snake.x[i]◆10,

snake.y[i]-10);

setcolor(0);/*用黑色去除蛇的的最后一节*/

if(snake.life==1)/*如果蛇死就跳出循环*/

key=bioskey(0);/*接收按键*/

if(key==ESC)/*按ESC键退出*/

else

if(key==UP&&snake.direction!=4)

/*判断是否往相反的方向移动*/

if(key==RIGHT&&snake.direction!=2)

if(key==LEFT&&snake.direction!=1)

if(key==DOWN&&snake.direction!=3)

setfillstyle(SOLID_FILL,YELLOW);

setcolor(6);

settextstyle(0,0,2);

outtextxy(55,20,str);

void Close(void);/*图形结束*/

void DrawK(void);/*开始画孝猜面*/

void GamePlay(void);/*玩游戏具体过巧升型程*/

initgraph(&gd,&gm,"笑薯c:\\tc");

setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/

food.yes=0;/*画面上有食物了*/

} /*endwhile(!kbhit)*/

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章