当前位置:首页 > 渗透破解 > 正文内容

编程一个最简单游戏代码贪吃蛇(c语言编写贪吃蛇小游戏代码)

hacker2年前 (2022-05-31)渗透破解75
本文导读目录:

如何用慧编程做贪吃蛇代码

用慧编程做贪吃蛇代码过程如下:

1、我们需要建立四个头文件,然后分别设置蛇的状态,上下左右,这是蛇能够有方向可走的前提,然后我们再设置蛇身的节点,定义一个简单的函数,这样蛇的全身以及他的行走方向就弄完了。

2、贪吃蛇不能穿墙代码。

3、第二步,一个函数这个函数的目的是贪吃蛇不能穿墙,很简单的代码分别设置长宽的更大位移,在内部范围内设置为一即可通过,否则不能穿墙。贪吃蛇随机生成一个食物。

4、设置一个随机函数。这样贪吃蛇代码就做好了。

慧编程是一款面向STEAM教育领域的积木式和代码编程软件,基于图形化编程开发。

贪吃蛇 C语言 简易程序设计

#includegraphics.h

#includestdlib.h

#define N 200

#define up 0x4800

#define down 0x5000

#define left 0x4b00

#define right 0x4d00

#define esc 0x011b

#define Y 0x1579

#define n 0x316e

int gamespeed; /* 游戏速度 */

int i,key,color;

int score=0; /* 游戏分数 */

char cai48H[]={

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x04,0x00,0x18,0x00,0x00,0x00,0x0E,0x00,

0x1C,0x00,0x00,0x00,0x1C,0x00,0x1C,0x00,

0x00,0x00,0x20,0x00,0x38,0x00,0x00,0x00,

0x40,0x00,0x78,0x00,0x00,0x01,0x80,0x40,

0x70,0x00,0x00,0x03,0x80,0xC0,0xE0,0x00,

0x00,0x07,0x80,0x80,0xC0,0x00,0x00,0x0E,

0x11,0x81,0xC0,0x00,0x00,0x08,0x61,0x01,

0x80,0x00,0x00,0x00,0x23,0x03,0x04,0x00,

0x00,0x02,0x02,0x00,0x06,0x00,0x00,0x1E,

0x04,0x00,0x0F,0x00,0x00,0x1C,0x1F,0x80,

0x1E,0x00,0x00,0x08,0x3F,0x80,0x3C,0x00,

0x00,0x00,0xFF,0x80,0x38,0x00,0x00,0x03,

0xFF,0x80,0x78,0x00,0x00,0x0F,0xF8,0x00,

0xF0,0x00,0x00,0x7F,0xF0,0x00,0xE0,0x00,

0x03,0xFF,0xFC,0x01,0x80,0x00,0x03,0xC0,

0xFF,0x01,0x03,0x80,0x01,0x01,0xFF,0x00,

0x03,0x80,0x00,0x01,0x3F,0x00,0x07,0x80,

0x00,0x02,0x11,0x00,0x07,0x00,0x00,0x00,

0x10,0x00,0x07,0x00,0x00,0x00,0x10,0x00,

0x0E,0x00,0x00,0x08,0x10,0x00,0x1C,0x00,

0x00,0x30,0x10,0x00,0x18,0x00,0x00,0x70,

0x10,0x00,0x30,0x00,0x01,0xE0,0x10,0x00,

0x70,0x00,0x03,0x80,0x10,0x00,0x60,0x00,

0x00,0x00,0x30,0x00,0xE0,0x00,0x00,0x00,

0xF0,0x01,0xC0,0x00,0x00,0x00,0x70,0x03,

0xC0,0x00,0x00,0x00,0x10,0x07,0x80,0x00,

0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,

0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x3C,

0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,

0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

};

char she48H[]={

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,

0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,

0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,

0x00,0x0E,0x00,0x00,0x00,0x03,0x00,0x07,

0x00,0x00,0x00,0x02,0x00,0x03,0x00,0x00,

0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x02,

0x00,0x00,0xF8,0x00,0x00,0x02,0x00,0x07,

0x86,0x00,0x00,0x02,0x00,0x18,0x03,0x00,

0x00,0x02,0x00,0x00,0x07,0x80,0x00,0x03,

0xF0,0x00,0x07,0x80,0x00,0x0F,0xFC,0x00,

0x0C,0x00,0x00,0x7E,0x3F,0x80,0x00,0x00,

0x01,0xFE,0x1F,0x80,0x00,0x00,0x01,0xE2,

0x39,0x8C,0x00,0x00,0x00,0xC2,0x30,0x08,

0x00,0x00,0x00,0xC2,0x60,0x08,0x00,0x00,

0x00,0xC3,0xE0,0x08,0x60,0x00,0x00,0x7F,

0xE0,0x01,0xE0,0x00,0x00,0x3F,0x80,0x1F,

0xE0,0x00,0x00,0x1E,0x00,0x1F,0x80,0x00,

0x00,0x1E,0x00,0x1F,0x00,0x00,0x00,0x02,

0x38,0x1E,0x00,0x00,0x00,0x07,0xFC,0x1C,

0x00,0x20,0x00,0x07,0xFC,0x18,0x00,0x20,

0x00,0x1F,0x0C,0x10,0x00,0x20,0x00,0x7C,

0x04,0x10,0x00,0x60,0x01,0xF0,0x00,0x10,

0x00,0x60,0x01,0xE0,0x00,0x08,0x00,0xF0,

0x00,0x80,0x00,0x08,0x03,0xF0,0x00,0x00,

0x00,0x07,0xFF,0xF0,0x00,0x00,0x00,0x07,

0xFF,0xF0,0x00,0x00,0x00,0x03,0xFF,0xE0,

0x00,0x00,0x00,0x01,0xFF,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

};

char tun48H[]={

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x3E,

0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,

0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,

0x03,0xC0,0x00,0x00,0x00,0x00,0x1F,0x00,

0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,

0x00,0x01,0xF8,0x00,0x00,0x00,0x00,0x03,

0xF8,0x00,0x40,0x00,0x00,0x00,0x06,0x07,

0xC0,0x00,0x00,0x00,0x07,0xFF,0xE0,0x00,

0x00,0x00,0x07,0xFF,0xE0,0x00,0x00,0x00,

0x0F,0xFF,0x80,0x00,0x00,0x00,0x7F,0xF8,

0x00,0x00,0x00,0x1F,0xFF,0xF8,0x00,0x00,

0x00,0x1F,0xFF,0xF8,0x00,0x00,0x00,0x1F,

0xFC,0x3C,0x00,0x00,0x00,0x0F,0xF8,0x0E,

0x00,0x00,0x00,0x04,0x70,0x07,0x00,0x00,

0x00,0x00,0x60,0x03,0x80,0x00,0x00,0x00,

0xC0,0x00,0xC0,0x00,0x00,0x01,0x80,0x00,

0x30,0x00,0x00,0x01,0x00,0x3C,0x18,0x00,

0x00,0x02,0x03,0xFF,0x0C,0x00,0x00,0x0C,

0x7F,0xFF,0x8E,0x00,0x00,0x18,0xFF,0xFF,

0xC7,0x80,0x00,0x78,0xFE,0x07,0x87,0xE0,

0x01,0xF0,0x70,0x07,0x03,0xF8,0x07,0xE0,

0x70,0x0E,0x03,0xFE,0x00,0x00,0x38,0x1E,

0x01,0xFE,0x00,0x00,0x3F,0xFE,0x00,0x0C,

0x00,0x00,0x1F,0xFE,0x00,0x00,0x00,0x00,

0x1F,0xFE,0x00,0x00,0x00,0x00,0x0F,0xFE,

0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

};

char dan48H[]={

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0xFC,0x00,0x00,0x00,0x00,0x07,0xFF,

0x00,0x00,0x00,0x00,0x7F,0xC0,0x80,0x00,

0x00,0x03,0xFF,0x80,0x40,0x00,0x00,0x01,

0xF1,0x80,0x40,0x00,0x00,0x01,0x81,0x80,

0xE0,0x00,0x00,0x00,0x01,0x93,0xF0,0x00,

0x00,0x00,0x01,0xFF,0xF0,0x00,0x00,0x00,

0x21,0xFF,0xF0,0x00,0x00,0x00,0x21,0xF8,

0x00,0x00,0x00,0x00,0x61,0xC0,0x00,0x00,

0x00,0x00,0x61,0x80,0x00,0x00,0x00,0x00,

0xF3,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,

0x00,0x00,0x00,0x01,0xFF,0xC0,0x00,0x00,

0x00,0x03,0xFF,0xF8,0x00,0x00,0x00,0x02,

0x00,0xFC,0x00,0x00,0x00,0x04,0x02,0x1F,

0x00,0x00,0x00,0x08,0x03,0x01,0xC0,0x00,

0x00,0x38,0x03,0x00,0x7C,0x00,0x00,0xF8,

0x07,0xF8,0x3F,0xC0,0x01,0xF0,0x3F,0xFE,

0x3F,0xF8,0x03,0xC1,0xFF,0x0F,0x1F,0xF8,

0x00,0x01,0xE3,0x0F,0x0F,0xF0,0x00,0x01,

0xC3,0x0E,0x00,0x00,0x00,0x01,0x83,0xFC,

0x00,0x00,0x00,0x00,0xC7,0xF8,0x00,0x00,

0x00,0x00,0xFF,0xF8,0x00,0x00,0x00,0x00,

0x7F,0xF0,0x00,0x00,0x00,0x00,0x3F,0x03,

0x80,0x00,0x00,0x00,0x03,0x04,0x00,0x00,

0x00,0x00,0x03,0xF8,0x00,0x00,0x00,0x00,

0x1F,0xF8,0x20,0x00,0x00,0x00,0xFF,0xFF,

0xE0,0x00,0x00,0x07,0xFF,0x81,0xE0,0x00,

0x00,0x07,0xE0,0x00,0xE0,0x00,0x00,0x03,

0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

};

char zuo16H[]={

0x18,0xC0,0x18,0xC0,0x19,0x80,0x31,0xFE,

0x33,0xFE,0x76,0xC0,0xF0,0xFC,0xB0,0xFC,

0x30,0xC0,0x30,0xC0,0x30,0xFE,0x30,0xFE,

0x30,0xC0,0x30,0xC0,0x30,0xC0,0x00,0x00,

};

char zhe16H[]={

0x03,0x00,0x03,0x0C,0x1F,0xCC,0x1F,0xD8,

0x03,0x30,0xFF,0xFE,0xFF,0xFE,0x03,0x00,

0x0F,0xF8,0x3F,0xF8,0xEC,0x18,0xCF,0xF8,

0x0C,0x18,0x0F,0xF8,0x0F,0xF8,0x00,0x00,

};

char tian16H[]={

0x00,0x00,0x3F,0xFC,0x3F,0xFC,0x31,0x8C,

0x31,0x8C,0x31,0x8C,0x3F,0xFC,0x3F,0xFC,

0x31,0x8C,0x31,0x8C,0x31,0x8C,0x3F,0xFC,

0x3F,0xFC,0x30,0x0C,0x00,0x00,0x00,0x00,

};

char xue16H[]={

0x33,0x18,0x19,0x98,0x08,0xB0,0x7F,0xFC,

0x7F,0xFC,0x60,0x0C,0x1F,0xF0,0x1F,0xF0,

0x00,0xC0,0x7F,0xFC,0x7F,0xFC,0x01,0x80,

0x01,0x80,0x07,0x80,0x03,0x00,0x00,0x00,

};

char ke16H[]={

0x00,0x00,0x0C,0x18,0xFD,0x98,0xF8,0xD8,

0x18,0x58,0xFE,0x18,0xFE,0x98,0x18,0xD8,

0x3C,0x58,0x7E,0x1E,0xDB,0xFE,0x9B,0xF8,

0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,

};

struct Food/*定义结构体存储食物的属性*/

{

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

int y;

int yes; /* 值为0表示屏幕上没有食物,值为1表示屏幕上有食物 */

int color; /* 食物颜色 */

}food;

struct Snake/*定义结构体存储蛇的属性*/

{

int x[N]; /* 每一节蛇的坐标 */

int y[N];

int color[N];/*存储每一节蛇的颜色*/

int node; /* 蛇的节数 */

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

int life; /* 蛇的生命,如果为1,蛇死,游戏结束 */

}snake;

void init(void)/*图形驱动*/

{

int driver=DETECT,mode=0;

registerbgidriver(EGAVGA_driver);

initgraph(driver,mode,"");

}

void drawmat(char *mat,int matsize,int x,int y,int color)/*汉字点阵*/

{

int i,j,k,m;

m=(matsize-1)/8+1;

for(j=0;jmatsize;j++)

for(i=0;im;i++)

for(k=0;k8;k++)

if(mat[j*m+i](0x80k))

putpixel(x+i*8+k,y+j,color);

}

void showword(void)

{/* 调用汉字点阵输出程序,显示标题和作者信息 */

drawmat(cai48H,48,249,-4,7);

drawmat(she48H,48,329,-4,7);

drawmat(tun48H,48,409,-4,7);

drawmat(dan48H,48,489,-4,7);

drawmat(cai48H,48,250,-5,4);

drawmat(she48H,48,330,-5,4);

drawmat(tun48H,48,410,-5,4);

drawmat(dan48H,48,490,-5,4);

/*作者 田学科*/

drawmat(zuo16H,16,515,465,7);

drawmat(zhe16H,16,530,465,7);

drawmat(tian16H,16,550,465,7);

drawmat(xue16H,16,565,465,7);

drawmat(ke16H,16,580,465,7);

}

void draw(void)/*画出四周的墙*/

{

if(color==15)

color=0;

setcolor(++color);

setlinestyle(SOLID_LINE,0,1);

for(i=30;i=600;i+=10)

{

rectangle(i,40,i+10,49);

rectangle(i,451,i+10,460);

}

for(i=40;i450;i+=10)

{

rectangle(30,i,39,i+10);

rectangle(601,i,610,i+10);

}

}

void prscore(void)

{/* 打印游戏分数 */

char str[10];

setfillstyle(SOLID_FILL,YELLOW);

bar(50,10,200,30);

setcolor(6);

settextstyle(0,0,2);

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

outtextxy(55,15,str);

}

void gameover(void)

{

cleardevice(); /* 清屏函数 */

for(i=0;isnake.node;i++)/* 画出蛇死时的位置 */

{

setcolor(snake.color[i]);

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

}

prscore(); /* 显示分数 */

draw();

showword();

settextstyle(0,0,6);

setcolor(7);

outtextxy(103,203,"GAME OVER");

setcolor(RED);

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

}

void gameplay(void)/* 玩游戏的具体过程 */

{

int flag,flag1;

randomize();

prscore();

gamespeed=50000;

food.yes=0;/* food.yes=0表示屏幕上没有食物 */

snake.life=1;/* snake.life=1表示蛇是活着的 */

snake.direction=4;/* 表示蛇的初始方向为向右 */

snake.node=2; /* 蛇的初始化为两节 */

snake.color[0]=2; /*两节蛇头初始化为绿色*/

snake.color[1]=2;

snake.x[0]=100;snake.y[0]=100;

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

food.color=random(15)+1;

while(1)

{

while(1)

{

if(food.yes==0) /* 如果蛇活着 */

{

while(1)

{

flag=1;

food.yes=1;

food.x=random(56)*10+40;

food.y=random(40)*10+50;

for(i=0;isnake.node;i++)

{

if(food.x==snake.x[i]food.y==snake.y[i])

flag=0;

}

if(flag) break;

}

}

if(food.yes)

{

setcolor(food.color);

rectangle(food.x,food.y,food.x+10,food.y+10);

}

for(i=snake.node-1;i0;i--)

{

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

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

}

switch(snake.direction)

{

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

case 2: snake.y[0]+=10;break;

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

case 4: snake.x[0]+=10;break;

}

for(i=3;isnake.node;i++)

{

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

{

gameover();

snake.life=0;

break;

}

}

if(snake.x[0]40||snake.x[0]590||snake.y[0]50||snake.y[0]440)

{

gameover();

snake.life=0;

}

if(snake.life==0)

break;

if(snake.x[0]==food.xsnake.y[0]==food.y)/*蛇吃掉食物*/

{

setcolor(0);

rectangle(food.x,food.y,food.x+10,food.y+10);

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

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

snake.color[snake.node]=food.color;

snake.node++;

food.yes=0;

food.color=random(15)+1;

score+=10;

prscore();

if(score%100==0score!=0)

{

for(i=0;isnake.node;i++)/* 画出蛇 */

{

setcolor(snake.color[i]);

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

}

sound(200);

delay(50000);delay(50000);delay(50000);

delay(50000);delay(50000);delay(50000);

nosound();

gamespeed-=5000;

draw();

}

else

{

sound(500);

delay(500);

nosound();

}

}

for(i=0;isnake.node;i++)/* 画出蛇 */

{

setcolor(snake.color[i]);

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

}

delay(gamespeed);

delay(gamespeed);

flag1=1;

setcolor(0);

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

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

if(kbhit()flag1==1)/*如果没按有效键就重新开始循环*/

{

flag1=0;

key=bioskey(0);

if(key==esc)

exit(0);

else if(key==upsnake.direction!=2)

snake.direction=1;

else if(key==downsnake.direction!=1)

snake.direction=2;

else if(key==leftsnake.direction!=4)

snake.direction=3;

else if(key==rightsnake.direction!=3)

snake.direction=4;

}

}

if(snake.life==0)/*如果蛇死了就退出循环*/

break;

}

}

void main(void)

{

while(1)

{

color=0;

init();

cleardevice();

showword();

draw();

gameplay();

setcolor(15);

settextstyle(0,0,2);

outtextxy(200,400,"CONTINUE(Y/N)?");

while(1)

{

key=bioskey(0);

if(key==Y||key==n||key==esc)

break;

}

if(key==n||key==esc)

break;

}

closegraph();

}

怎样用C语言编写一个小游戏?

“贪吃蛇”C代码:

#include stdio.h

#include stdlib.h

#include conio.h

#include time.h

#include Windows.h

#define W 78  //游戏框的宽,x轴

#define H 26  //游戏框的高,y轴

int dir=3;    //方向变量,初值3表示向“左”

int Flag=0;   //吃了食物的标志(1是0否)

int score=0;  //玩家得分

struct food{ int x;  //食物的x坐标

                  int y;  //食物的y坐标

                 }fod;  //结构体fod有2个成员

struct snake{ int len;  //身长

                   int speed;  //速度

                   int x[100];

                   int y[100];

                  }snk;  //结构体snk有4个成员

void gtxy( int x,int y)  //控制光标移动的函数

{ COORD coord;

coord.X=x;

coord.Y=y;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);

}

void gtxy( int x,int y);  //以下声明要用到的几个自编函数

void csh( );  //初始化界面

void keymove( ); //按键操作移动蛇

void putFod( );  //投放食物

int  Over( );   //游戏结束(1是0否)

void setColor(unsigned short p, unsigned short q); //设定显示颜色

int main( )   //主函数

{ csh( );

  while(1)

    { Sleep(snk.speed);

      keymove( );

      putFod( );

      if(Over( ))

       {system(“cls”);

        gtxy(W/2+1,H/2); printf(“游戏结束!T__T”);

        gtxy(W/2+1,H/2+2); printf(“玩家总分:%d分”,score);

        getch( );

        break;

       }

   }

   return 0;

}

void csh( )  //初始化界面

{ int i;

gtxy(0,0);

CONSOLE_CURSOR_INFO cursor_info={1,0};  //以下两行是隐藏光标的设置

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),cursor_info);

for(i=0;i=W;i=i+2)  //横坐标要为偶数,因为这个要打印的字符占2个位置

{ setColor(2, 0);  //设定打印颜色为绿字黑底

  gtxy(i,0);  printf("■");  //打印上边框

  gtxy(i,H); printf("■");  //打印下边框

}

for(i=1;iH;i++)

{ gtxy(0,i); printf("■");  //打印左边框

   gtxy(W,i); printf("■");  //打印右边框

}

while(1)

  { srand((unsigned)time(NULL));  //初始化随机数发生器srand( )

  fod.x=rand()%(W-4)+2;  //随机函数rand( )产生一个从0到比”(W-4)”小1的数再加2

  fod.y=rand()%(H-2)+1;  //随机函数rand( )产生一个从0到比”(H-2)”小1的数再加1

  if (fod.x%2==0) break;  //fod.x是食物的横坐标,要是2的倍数(为偶数)

}

setColor(12, 0);  //设定打印颜色为淡红字黑底

gtxy(fod.x,fod.y); printf("●");  //到食物坐标处打印初试食物

snk.len=3;      //蛇身长

snk.speed=350;  //刷新蛇的时间,即是移动速度

snk.x[0]=W/2+1;  //蛇头横坐标要为偶数(因为W/2=39)

snk.y[0]=H/2;    //蛇头纵坐标

setColor(9, 0);  //设定打印颜色为淡蓝字黑底

gtxy(snk.x[0], snk.y[0]);  printf("■");  //打印蛇头

for(i=1;isnk.len;i++)

    { snk.x[i]=snk.x[i-1]+2;  snk.y[i]=snk.y[i-1];

      gtxy(snk.x[i],snk.y[i]);  printf("■");  //打印蛇身

   }

setColor(7, 0);  //恢复默认的白字黑底

return;

}

void keymove( )  //按键操作移动蛇

{ int key;

if( kbhit( ) )    //如有按键输入才执行下面操作

   { key=getch( );

     if (key==224)  //值为224表示按下了方向键,下面要再次获取键值

       { key=getch( );

         if(key==72dir!=2)dir=1;  //72表示按下了向上方向键

         if(key==80dir!=1)dir=2;  //80为向下

         if(key==75dir!=4)dir=3;  //75为向左

         if(key==77dir!=3)dir=4;  //77为向右

       }

   if (key==32)

      { while(1) if((key=getch( ))==32) break; }  //32为空格键,这儿用来暂停

  }

if (Flag==0)  //如没吃食物,才执行下面操作擦掉蛇尾

  { gtxy(snk.x[snk.len-1],snk.y[snk.len-1]);  printf("  "); }

int i;

for (i = snk.len - 1; i 0; i--)  //从蛇尾起每节存储前一节坐标值(蛇头除外)

{ snk.x[i]=snk.x[i-1];  snk.y[i]=snk.y[i-1]; }

switch (dir)  //判断蛇头该往哪个方向移动,并获取最新坐标值

{ case 1: snk.y[0]--; break;   //dir=1要向上移动

  case 2: snk.y[0]++; break;  //dir=2要向下移动

  case 3: snk.x[0]-=2; break;  //dir=3要向左移动

  case 4: snk.x[0]+=2; break;  //dir=4要向右移动

}

setColor(9, 0);

gtxy(snk.x[0], snk.y[0]); printf("■");  //打印蛇头

if (snk.x[0] == fod.x snk.y[0] == fod.y)  //如吃到食物则执行以下操作

   { printf("\007"); snk.len++; score += 100; snk.speed -= 5; Flag = 1; } //007是响铃

else Flag = 0;   //没吃到食物Flag的值为0

if(snk.speed150) snk.speed= snk.speed+5;  //作弊码,不让速度无限加快

}

void putFod( )  //投放食物

{ if (Flag == 1)  //如吃到食物才执行以下操作,生成另一个食物

   { while (1)

  { int i,n= 1;

   srand((unsigned)time(NULL));  //初始化随机数发生器srand( )

   fod.x = rand( ) % (W - 4) + 2;  //产生在游戏框范围内的一个x坐标值

   fod.y = rand( ) % (H - 2) + 1;  //产生在游戏框范围内的一个y坐标值

   for (i = 0; i snk.len; i++)   //随机生成的食物不能在蛇的身体上

 { if (fod.x == snk.x[i] fod.y == snk.y[i]) { n= 0; break;} }

   if (n fod.x % 2 == 0) break;  //n不为0且横坐标为偶数,则食物坐标取值成功

  }

 setColor(12, 0);

      gtxy(fod.x, fod.y);  printf("●");   //光标到取得的坐标处打印食物

   }

return;

}

int Over( )  //判断游戏是否结束的函数

{ int  i;

setColor(7, 0);

gtxy(2,H+1); printf(“暂停键:space.”);  //以下打印一些其它信息

gtxy(2,H+2); printf(“游戏得分:%d”,score);

if (snk.x[0] == 0 || snk.x[0] == W) return 1;  //蛇头触碰左右边界

if (snk.y[0] == 0 || snk.y[0] == H) return 1;  //蛇头触碰上下边界

for (i = 1; i snk.len; i++)

{ if (snk.x[0] == snk.x[i] snk.y[0] == snk.y[i]) return 1; }  //蛇头触碰自身

return 0;   //没碰到边界及自身时就返回0

}

void setColor(unsigned short ForeColor = 7, unsigned short BackGroundColor = 0)

{  HANDLE  handle = GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleTextAttribute( handle, ForeColor + BackGroundColor * 0x10 );

}   //用来设定颜色的函数

c语言 贪吃蛇 程序

/* 贪吃蛇程序 by champking */

#define N 200

#include graphics.h

#include stdlib.h

#include dos.h

#define LEFT 0x4b00

#define RIGHT 0x4d00

#define DOWN 0x5000

#define UP 0x4800

#define ESC 0x011b

int i,key;

int score = 0;/*得分*/

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

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死亡*/

}snake;

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 = DETECT, gm;

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

cleardevice();

}

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

void DrawK(void)

{

/*setbkcolor(LIGHTGREEN);*/

setcolor(11);

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

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)

{

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

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() % 400 + 60;

food.y = rand() % 350 + 60;

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

food.x++;

while(food.y % 10 != 0)

food.y++;

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

}

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

{

setcolor(GREEN);

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

}

for(i = snake.node - 1; i 0; i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/

{

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

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

}

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

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;

}

for(i = 3; i snake.node; i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/

{

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

{

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

snake.life = 1;

break;

}

}

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

snake.y[0]455)/*蛇是否撞到墙壁*/

{

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

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

}

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

break;

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

{

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

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

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

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

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

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

score += 10;

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

}

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

for(i = 0; i snake.node; i++)

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

snake.y[i] - 10);

delay(gamespeed);

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

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)/*如果蛇死就跳出循环*/

break;

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

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

break;

else

if(key == UPsnake.direction!=4)

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

snake.direction=3;

else

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

snake.direction=1;

else

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

snake.direction = 2;

else

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

snake.direction = 4;

}/*endwhile(1)*/

}

/*游戏结束*/

void GameOver(void)

{

cleardevice();

PrScore();

setcolor(RED);

settextstyle(0, 0, 4);

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

getch();

}

/*输出成绩*/

void PrScore(void)

{

char str[10];

setfillstyle(SOLID_FILL, YELLOW);

bar(50, 15, 220, 35);

setcolor(6);

settextstyle(0,0,2);

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

outtextxy(55, 20, str);

}

/*图形结束*/

void Close(void)

{

getch();

closegraph();

}

c语言贪吃蛇代码

慢慢看吧 然后修改程序。

#define N 200

#include graphics.h

#include stdlib.h

#include dos.h

#define LEFT 0x4b00

#define RIGHT 0x4d00

#define DOWN 0x5000

#define UP 0x4800

#define ESC 0x011b

int i,key;

int score=0;/*得分*/

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

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死亡*/

}snake;

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=DETECT,gm;

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

cleardevice();

}

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

void DrawK(void)

{

/*setbkcolor(LIGHTGREEN);*/

setcolor(11);

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

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)

{

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

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()()%400+60;

food.y=rand()()%350+60;

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

food.x++;

while(food.y%10!=0)

food.y++;

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

}

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

{

setcolor(GREEN);

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

}

for(i=snake.node-1;i0;i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/

{

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

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

}

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

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;

}

for(i=3;isnake.node;i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/

{

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

{

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

snake.life=1;

break;

}

}

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

snake.y[0]455)/*蛇是否撞到墙壁*/

{

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

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

}

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

break;

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

{

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

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

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

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

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

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

score+=10;

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

}

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

for(i=0;isnake.node;i++)

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

snake.y[i]-10);

delay(gamespeed);

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

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)/*如果蛇死就跳出循环*/

break;

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

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

break;

else

if(key==UPsnake.direction!=4)

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

snake.direction=3;

else

if(key==RIGHTsnake.direction!=2)

snake.direction=1;

else

if(key==LEFTsnake.direction!=1)

snake.direction=2;

else

if(key==DOWNsnake.direction!=3)

snake.direction=4;

}/*endwhile(1)*/

}

/*游戏结束*/

void GameOver(void)

{

cleardevice();

PrScore();

setcolor(RED);

settextstyle(0,0,4);

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

getch()();

}

/*输出成绩*/

void PrScore(void)

{

char str[10];

setfillstyle(SOLID_FILL,YELLOW);

bar(50,15,220,35);

setcolor(6);

settextstyle(0,0,2);

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

outtextxy(55,20,str);

}

/*图形结束*/

void Close(void)

{

getch()();

closegraph();

}

最简单的贪吃蛇代码

比较深奥,下面是各编程工具的贪吃蛇代码:

Delphi:http://hi.baidu.com/delphi%B1%E0%B3%CC/blog/item/e901eedd823fcf315982ddc7.html

C#:http://dev.csdn.net/article/51/51977.shtm

VB:http://zhidao.baidu.com/question/79834953.html

VC++:http://tieba.baidu.com/f?kz=282583673

Java:http://blog.csdn.net/mybelove/archive/2006/12/23/1455602.aspx

你也可以参考

http://zhidao.baidu.com/question/48175992.html?si=1

vb.net编写的贪吃蛇游戏,带代码的

需用VB实现,代码如下

'定义蛇的运动速度枚举值

Private Enum tpsSpeed

QUICK *** = 0

SLOW *** = 1

End Enum

'定义蛇的运动方向枚举值

Private Enum tpsDirection

D_UP = 38

D_DOWN = 40

D_LEFT = 37

D_RIGHT = 39

End Enum

'定义运动区域4个禁区的枚举值

Private Enum tpsForbiddenZone

FZ_TOP = 30

FZ_BOTTOM = 5330

FZ_LEFT = 30

FZ_RIGHT = 5730

End Enum

'定义蛇头及身体初始化数枚举值

Private Enum tpsSnake

SNAKEONE = 1

SNAKETWO = 2

SNAKETHREE = 3

SNAKEFOUR = 4

End Enum

'定义蛇宽度的常量

Private Const SNAKEWIDTH As Integer = 100

'该过程用于显示游戏信息

Private Sub Form_Load()

Me.Show

Me.lblTitle = "BS贪食蛇 — (版本 " App.Major "." App.Minor "." App.Revision ")"

Me.Caption = Me.lblTitle.Caption

frmSplash.Show 1

End Sub

'该过程用于使窗体恢复原始大小

Private Sub Form_Resize()

If Me.WindowState 1 Then

Me.Caption = ""

Me.Height = 6405 '窗体高度为 6405 缇

Me.Width = 8535 '窗体宽度为 8535 缇

Me.Left = (Screen.Width - Width) \ 2

Me.Top = (Screen.Height - Height) \ 2

End If

End Sub

'该过程用于重新开始开始游戏

Private Sub cmdGameStart_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

Beep

msg = MsgBox("您确认要重新开始游戏吗?", 4 + 32, "BS贪食蛇")

If msg = 6 Then Call m_subGameInitialize

End Sub

'该过程用于暂停/运行游戏

Private Sub chkPause_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Me.chkPause.Caption = "暂停游戏(P)" Then

Me.tmrSnakeMove.Enabled = False

Me.tmrGameTime.Enabled = False

Me.picMoveArea.Enabled = False

Me.lblPauseLab.Visible = True

Me.chkPause.Caption = "继续游戏(R)"

Else

Me.tmrSnakeMove.Enabled = True

Me.tmrGameTime.Enabled = True

Me.picMoveArea.Enabled = True

Me.lblPauseLab.Visible = False

Me.chkPause.Caption = "暂停游戏(P)"

End If

End Sub

'该过程用于显示游戏规则

Private Sub cmdGameRules_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

Beep

MsgBox " BS贪食蛇:一个规则最简单的趣味游戏,您将用键盘" Chr(13) _

"上的4个方向键来控制蛇的运动方向。在运动过程中蛇" Chr(13) _

"不能后退,蛇的头部也不能接触到运动区域的边线以外" Chr(13) _

"和蛇自己的身体,否则就游戏失败。在吃掉随机出现的" Chr(13) _

"果子后,蛇的身体会变长,越长难度越大。祝您好运!!", 0 + 64, "游戏规则"

End Sub

'该过程用于显示游戏开发信息

Private Sub cmdAbout_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

Beep

MsgBox "BS贪食蛇" "(V-" App.Major "." App.Minor "版本)" Chr(13) Chr(13) _

"" Chr(13) Chr(13) _

"由PigheadPrince设计 *** " Chr(13) _

"CopyRight(C)2002,BestSoft.TCG", 0, "关于本游戏"

End Sub

'该过程用于退出游戏

Private Sub cmdExit_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

Beep

msg = MsgBox("您要退出本游戏吗?", 4 + 32, "BS贪食蛇")

Select Case msg

Case 6

End

Case 7

Me.chkWindowButton(2).Value = 0

Exit Sub

End Select

End Sub

'该过程用于拖动窗体_(点击图标)

Private Sub imgWindowTop_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

ReleaseCapture

SendMessage Me.hwnd, WM_SYSCOMMAND, SC_MOVE, 0

End Sub

'该共用过程用于处理窗体控制按钮组的相关操作_(锁定、最小化、退出)

Private Sub chkWindowButton_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button 1 Then Exit Sub

Select Case Index

Case 0 '锁定窗体

If Me.chkWindowButton(0).Value = 1 Then

Me.imgWindowTop.BorderStyle = 0

Me.imgWindowTop.Enabled = False

Else

Me.imgWindowTop.BorderStyle = 1

Me.imgWindowTop.Enabled = True

End If

Case 1 '最小化

Me.WindowState = 1

Me.chkWindowButton(1).Value = 0

Me.Caption = "BS贪食蛇 — (V-" App.Major "." App.Minor "版本)"

Case 2 '退出

Beep

msg = MsgBox("您要退出本游戏吗?", 4 + 32, "BS贪食蛇")

Select Case msg

Case 6

End

Case 7

Me.chkWindowButton(2).Value = 0

Exit Sub

End Select

End Select

End Sub

'该过程用于设置蛇运动速度的快慢

Private Sub h *** GameSpeed_Change()

Me.tmrSnakeMove.Interval = Me.h *** GameSpeed.Value

End Sub

'该过程用于通过键盘的方向键改变蛇的运动方向

Private Sub picMoveArea_KeyDown(KeyCode As Integer, Shift As Integer)

Select Case g_intDirection

Case D_UP

If KeyCode = D_DOWN Then Exit Sub

Case D_DOWN

If KeyCode = D_UP Then Exit Sub

Case D_LEFT

If KeyCode = D_RIGHT Then Exit Sub

Case D_RIGHT

If KeyCode = D_LEFT Then Exit Sub

End Select

g_intDirection = KeyCode

End Sub

'该计时循环过程用于计算游戏耗费的秒数并显示

Private Sub tmrGameTime_Timer()

g_lngGameTime = g_lngGameTime + 1

Me.lblGameTime.Caption = g_lngGameTime "秒"

End Sub

'该计时循环过程用于控制蛇的行动轨迹

Private Sub tmrSnakeMove_Timer()

Dim lngSnakeX As Long, lngSnakeY As Long, lngSnakeColor As Long

Dim lngPointX As Long, lngPointY As Long, lngPointColor As Long

Randomize

Me.picMoveArea.SetFocus

Me.picMoveArea.Cls

'确认蛇头的运动方向并获取新的位置

Select Case g_intDirection

Case D_UP '向上运动

g_udtSnake(SNAKEONE).Snake_CurX = g_udtSnake(SNAKEONE).Snake_OldX

g_udtSnake(SNAKEONE).Snake_CurY = g_udtSnake(SNAKEONE).Snake_OldY

g_udtSnake(SNAKEONE).Snake_CurY = g_udtSnake(SNAKEONE).Snake_CurY - SNAKEWIDTH

Case D_DOWN '向下运动

g_udtSnake(SNAKEONE).Snake_CurX = g_udtSnake(SNAKEONE).Snake_OldX

g_udtSnake(SNAKEONE).Snake_CurY = g_udtSnake(SNAKEONE).Snake_OldY

g_udtSnake(SNAKEONE).Snake_CurY = g_udtSnake(SNAKEONE).Snake_CurY + SNAKEWIDTH

Case D_LEFT '向左运动

g_udtSnake(SNAKEONE).Snake_CurX = g_udtSnake(SNAKEONE).Snake_OldX

g_udtSnake(SNAKEONE).Snake_CurX = g_udtSnake(SNAKEONE).Snake_CurX - SNAKEWIDTH

g_udtSnake(SNAKEONE).Snake_CurY = g_udtSnake(SNAKEONE).Snake_OldY

Case D_RIGHT '向右运动

g_udtSnake(SNAKEONE).Snake_CurX = g_udtSnake(SNAKEONE).Snake_OldX

g_udtSnake(SNAKEONE).Snake_CurX = g_udtSnake(SNAKEONE).Snake_CurX + SNAKEWIDTH

g_udtSnake(SNAKEONE).Snake_CurY = g_udtSnake(SNAKEONE).Snake_OldY

End Select

'根据新的位置绘制蛇头

lngSnakeX = g_udtSnake(SNAKEONE).Snake_CurX

lngSnakeY = g_udtSnake(SNAKEONE).Snake_CurY

lngSnakeColor = g_udtSnake(SNAKEONE).Snake_Color

Me.picMoveArea.PSet (lngSnakeX, lngSnakeY), lngSnakeColor

'移动蛇身体其他部分的位置

For i = 2 To g_intSnakeLength

g_udtSnake(i).Snake_CurX = g_udtSnake(i - 1).Snake_OldX

g_udtSnake(i).Snake_CurY = g_udtSnake(i - 1).Snake_OldY

lngSnakeX = g_udtSnake(i).Snake_CurX

lngSnakeY = g_udtSnake(i).Snake_CurY

lngSnakeColor = g_udtSnake(i).Snake_Color

Me.picMoveArea.PSet (lngSnakeX, lngSnakeY), lngSnakeColor

Next i

'更新蛇旧的坐标位置

For j = 1 To g_intSnakeLength

g_udtSnake(j).Snake_OldX = g_udtSnake(j).Snake_CurX

g_udtSnake(j).Snake_OldY = g_udtSnake(j).Snake_CurY

Next j

'判断蛇在移动中是否到了禁区而导致游戏失败

If m_funMoveForbiddenZone(g_udtSnake(SNAKEONE).Snake_CurX, g_udtSnake(SNAKEONE).Snake_CurY) Then

Beep

MsgBox "您的蛇移动到了禁区,游戏失败!", 0 + 16, "BS贪食蛇"

Me.tmrSnakeMove.Enabled = False

Me.tmrGameTime.Enabled = False

Me.picMoveArea.Visible = False

Exit Sub

End If

'判断蛇在移动中是否碰到了自己的身体而导致游戏失败

If m_funTouchSnakeBody(g_udtSnake(SNAKEONE).Snake_CurX, g_udtSnake(SNAKEONE).Snake_CurY) Then

Beep

MsgBox "您的蛇在移动中碰到了自己的身体,游戏失败!", 0 + 16, "BS贪食蛇"

Me.tmrSnakeMove.Enabled = False

Me.tmrGameTime.Enabled = False

Me.picMoveArea.Visible = False

Exit Sub

End If

'判断蛇是否吃到了果子

If m_funEatPoint(g_udtSnake(SNAKEONE).Snake_CurX, g_udtSnake(SNAKEONE).Snake_CurY) Then

'累加玩家的得分并刷新得分显示

g_intPlayerScore = g_intPlayerScore + 1

Me.lblYourScore.Caption = g_intPlayerScore "分"

Call m_subAddSnake '加长蛇的身体

Call m_subGetPoint '获取下一个果子的位置和颜色

Else

'绘制果子

lngPointX = g_udtPoint.Point_X

lngPointY = g_udtPoint.Point_Y

lngPointColor = g_udtPoint.Point_Color

Me.picMoveArea.PSet (lngPointX, lngPointY), lngPointColor

End If

End Sub

'该私有子过程用于初始化游戏

Private Sub m_subGameInitialize()

Erase g_udtSnake '清空蛇的结构数组

g_intPlayerScore = 0 '清空玩家的得分

g_lngGameTime = 0 '清空游戏耗费的秒数

g_intDirection = D_DOWN '设定蛇的初始运动方向为下

g_intSnakeLength = 4 '设定蛇的初始长度

ReDim g_udtSnake(1 To g_intSnakeLength) '重新定义蛇的长度

'定义蛇头部的数据

With g_udtSnake(SNAKEONE)

.Snake_OldX = 530

.Snake_OldY = 530

.Snake_Color = vbBlack

End With

'定义蛇身第2节的数据

With g_udtSnake(SNAKETWO)

.Snake_OldX = 530

.Snake_OldY = 430

.Snake_Color = vbGreen

End With

'定义蛇身第3节的数据

With g_udtSnake(SNAKETHREE)

.Snake_OldX = 530

.Snake_OldY = 330

.Snake_Color = vbYellow

End With

'定义蛇身第4节的数据

With g_udtSnake(SNAKEFOUR)

.Snake_OldX = 530

.Snake_OldY = 230

.Snake_Color = vbRed

End With

Me.picMoveArea.Visible = True

Me.lblYourScore.Caption = g_intPlayerScore "分"

Me.lblGameTime.Caption = g_lngGameTime "秒"

Me.tmrSnakeMove.Interval = Me.h *** GameSpeed.Value

Me.tmrSnakeMove.Enabled = True

Me.tmrGameTime.Enabled = True

Call m_subGetPoint '获取之一个果子的位置和颜色

End Sub

求贪吃蛇的程序代码(c语言)

贪吃蛇游戏的代码

#define N 200

#include graphics.h

#include stdlib.h

#include dos.h

#define LEFT 0x4b00

#define RIGHT 0x4d00

#define DOWN 0x5000

#define UP 0x4800

#define ESC 0x011b

int i,key;

int score=0;/*得分*/

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

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死亡*/

}snake;

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=DETECT,gm;

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

cleardevice();

}

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

void DrawK(void)

{

/*setbkcolor(LIGHTGREEN);*/

setcolor(11);

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

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)

{

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

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()%400+60;

food.y=rand()%350+60;

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

food.x++;

while(food.y%10!=0)

food.y++;

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

}

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

{

setcolor(GREEN);

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

}

for(i=snake.node-1;i0;i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/

{

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

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

}

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

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;

}

for(i=3;isnake.node;i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/

{

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

{

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

snake.life=1;

break;

}

}

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

snake.y[0]455)/*蛇是否撞到墙壁*/

{

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

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

}

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

break;

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

{

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

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

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

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

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

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

score+=10;

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

}

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

for(i=0;isnake.node;i++)

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

snake.y[i]-10);

delay(gamespeed);

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

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)/*如果蛇死就跳出循环*/

break;

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

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

break;

else

if(key==UPsnake.direction!=4)

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

snake.direction=3;

else

if(key==RIGHTsnake.direction!=2)

snake.direction=1;

else

if(key==LEFTsnake.direction!=1)

snake.direction=2;

else

if(key==DOWNsnake.direction!=3)

snake.direction=4;

}/*endwhile(1)*/

}

/*游戏结束*/

void GameOver(void)

{

cleardevice();

PrScore();

setcolor(RED);

settextstyle(0,0,4);

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

getch();

}

/*输出成绩*/

void PrScore(void)

{

char str[10];

setfillstyle(SOLID_FILL,YELLOW);

bar(50,15,220,35);

setcolor(6);

settextstyle(0,0,2);

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

outtextxy(55,20,str);

}

/*图形结束*/

void Close(void)

{

getch();

closegraph();

}

程序结束,请采纳

扫描二维码推送至手机访问。

版权声明:本文由黑客技术发布,如需转载请注明出处。

本文链接:http://w-123.com/164209.html

“编程一个最简单游戏代码贪吃蛇(c语言编写贪吃蛇小游戏代码)” 的相关文章

最快的勒索软件被发现仅用 4 分多钟就加密了 53GB 的数据

对于IT管理员和网络安全团队来说,勒索软件攻击是一场与时间赛跑的关键比赛,以检测和控制损害,同时抢救公司的数据资产的剩余部分。但是,当这种事件发生时,有多少反应时间呢?似乎不是很多。正如对10个候选勒索软件的测试所揭示的那样,一种名叫LockBit的勒索软件效率惊人,在四分钟内就加密了一台Windo...

Google:2021 年 Play Store 禁止 19 万恶意账户 删除 120 万个恶意 APP

隐私和安全成为了 Play Store 的更高优选项。Google 近期封杀第三方通话录音应用之外,还引入了“data safety”(数据安全)部分,要求开发人员提供更多关于他们收集的任何用户数据及其背后目的的信息。现在,Google 公开了 2021 年关于 Play Store 安全的统计数据...

僵尸网络 Kraken 轻松骗过 Windows Defender 并窃取加密货币钱包数据

微软最近对Windows Defender的排除权限进行了更新,没有管理员权限就无法查看排除的文件夹和文件。这是一个重要的变化,因为威胁者往往会利用这一信息在这种被排除的目录中提供恶意软件的载荷,以绕过防御者的扫描。 然而,这可能无法阻止ZeroFox最近发现的一个名为Kraken的新僵尸网络。这...

研究人员谈论潜在的没有性能成本的 CPU 安全漏洞缓解措施

一位安全研究员在上周末的自由和开源软件开发者欧洲会议(FOSDEM)上围绕缓解像Spectre和Meltdown这样的处理器漏洞发表演讲,所提出的方式力求让性能成本可以忽略不计。 Cyberus科技公司的Sebastian Eydam在2022年FOSDEM会议上发言,谈到有可能在几乎没有性能成本...

Pegasus 被发现用来感染加泰罗尼亚地区官员的 iPhone 手机

NSO集团用于入侵iPhone的间谍软件Pegasus陷入了另一桩间谍丑闻,该监视工具被用来对付西班牙加泰罗尼亚地区的民间社会和政治人物的设备。继2020年2020年的一份报告称加泰罗尼亚高级政治家Roger Torrent和支持独立的人通过WhatsApp成为“政府级间谍软件”的目标后,Citiz...

FamousSparrow APT 组织侵入酒店、政府和企业

一个名为“FamousSparrow”的网络间谍组织利用微软Exchange服务器的ProxyLogon漏洞及其自定义后门“SparrowDoor”,将全球各地的酒店、政府和私人企业作为目标。 ESET研究人员Matthieu Faou称ESET正在跟踪该组织,他们认为,自2019年以来Famou...

评论列表

寻妄木落
2年前 (2022-05-31)

ion = 1;/*方向往右*/ snake.x[0] = 100; snake.y[0] = 100;/*蛇头*/ snake.x[1] = 110; snake.y[1] = 100; snake.node = 2;/*节数*/ PrScore();/*输出得分*/ while(1)/*可以

晴枙同尘
2年前 (2022-05-31)

setcolor(snake.color[i]); rectangle(snake.x[i],snake.y[i],sna

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。