首页系统c语言贪吃蛇最简单代码(python贪吃蛇最简单代码)

c语言贪吃蛇最简单代码(python贪吃蛇最简单代码)

编程之家2026-05-14863次浏览

大家好,关于c语言贪吃蛇最简单代码很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于python贪吃蛇最简单代码的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

c语言贪吃蛇最简单代码(python贪吃蛇最简单代码)

C语言 的 贪吃蛇 代码 谢谢 大家啦。。。

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

#include<graphics.h>

#include<stdlib.h>

#include<conio.h>

#include<time.h>

#include<stdio.h>

c语言贪吃蛇最简单代码(python贪吃蛇最简单代码)

#define LEFT'a'

#define RIGHT'd'

#define DOWN's'

#define UP'w'

#define ESC 27

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

c语言贪吃蛇最简单代码(python贪吃蛇最简单代码)

int i;

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

}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=9,gm=2;

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

cleardevice();

}

/*开始画面,左上角坐标为(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()%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(BLACK);/*把画面上的食物东西去*/

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(RED);/*画出蛇*/

for(i=0;i<snake.node;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)/*如果蛇死就跳出循环*/

break;

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

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

switch(key)

{

case UP:

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

snake.direction=3;

break;

case RIGHT:

if(snake.direction!=2)

snake.direction=1;

break;

case LEFT:

if(snake.direction!=1)

snake.direction=2;

break;

case DOWN:

if(snake.direction!=3)

snake.direction=4;

break;

}

}/*endwhile(1)*/

}

/*游戏结束*/

void GameOver(void)

{

cleardevice();

PrScore();

setcolor(RED);

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

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

getch();

}

/*输出成绩*/

void PrScore(void)

{

char str[10];

setfillstyle(YELLOW);

bar(50,15,220,35);

setcolor(BROWN);

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

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

outtextxy(55,16,str);

}

/*图形结束*/

void Close(void)

{

closegraph();

}

C语言的贪吃蛇源代码

//******友情提示:如想速度快点,请改小_sleep(500)函数中参数*****

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

#include<string.h>

#include<time.h>

constintH=8;//地图的高

constintL=16;//地图的长

charGameMap[H][L];//游戏地图

intkey;//按键保存

intsum=1,over=0;//蛇的长度,游戏结束(自吃或碰墙)

intdx[4]={0,0,-1,1};//左、右、上、下的方向

intdy[4]={-1,1,0,0};

structSnake//蛇的每个节点的数据类型

{

intx,y;//左边位置

intnow;//保存当前节点的方向,0,1,2,3分别为左右上下

}Snake[H*L];

constcharShead='@';//蛇头

constcharSbody='#';//蛇身

constcharSfood='*';//食物

constcharSnode='.';//'.'在地图上标示为空

voidInitial();//地图的初始化

voidCreate_Food();//在地图上随机产生食物

voidShow();//刷新显示地图

voidButton();//取出按键,并判断方向

voidMove();//蛇的移动

voidCheck_Border();//检查蛇头是否越界

voidCheck_Head(intx,inty);//检查蛇头移动后的位置情况

intmain()

{

Initial();

Show();

return0;

}

voidInitial()//地图的初始化

{

inti,j;

inthx,hy;

system("title贪吃蛇");//控制台的标题

memset(GameMap,'.',sizeof(GameMap));//初始化地图全部为空'.'

system("cls");

srand(time(0));//随机种子

hx=rand()%H;//产生蛇头

hy=rand()%L;

GameMap[hx][hy]=Shead;

Snake[0].x=hx;Snake[0].y=hy;

Snake[0].now=-1;

Create_Food();//随机产生食物

for(i=0;i<H;i++)//地图显示

{

for(j=0;j<L;j++)

printf("%c",GameMap[i][j]);

printf("

");

}

printf("

小小C语言贪吃蛇

");

printf("按任意方向键开始游戏

");

getch();//先接受一个按键,使蛇开始往该方向走

Button();//取出按键,并判断方向

}

voidCreate_Food()//在地图上随机产生食物

{

intfx,fy;

while(1)

{

fx=rand()%H;

fy=rand()%L;

if(GameMap[fx][fy]=='.')//不能出现在蛇所占有的位置

{

GameMap[fx][fy]=Sfood;

break;

}

}

}

voidShow()//刷新显示地图

{

inti,j;

while(1)

{

_sleep(500);//延迟半秒(1000为1s),即每半秒刷新一次地图

Button();//先判断按键在移动

Move();

if(over)//自吃或碰墙即游戏结束

{

printf("

**游戏结束**

");

printf(">_<

");

getchar();

break;

}

system("cls");//清空地图再显示刷新吼的地图

for(i=0;i<H;i++)

{

for(j=0;j<L;j++)

printf("%c",GameMap[i][j]);

printf("

");

}

printf("

小小C语言贪吃蛇

");

printf("按任意方向键开始游戏

");

}

}

voidButton()//取出按键,并判断方向

{

if(kbhit()!=0)//检查当前是否有键盘输入,若有则返回一个非0值,否则返回0

{

while(kbhit()!=0)//可能存在多个按键,要全部取完,以最后一个为主

key=getch();//将按键从控制台中取出并保存到key中

switch(key)

{//左

case75:Snake[0].now=0;

break;

//右

case77:Snake[0].now=1;

break;

//上

case72:Snake[0].now=2;

break;

//下

case80:Snake[0].now=3;

break;

}

}

}

voidMove()//蛇的移动

{

inti,x,y;

intt=sum;//保存当前蛇的长度

//记录当前蛇头的位置,并设置为空,蛇头先移动

x=Snake[0].x;y=Snake[0].y;GameMap[x][y]='.';

Snake[0].x=Snake[0].x+dx[Snake[0].now];

Snake[0].y=Snake[0].y+dy[Snake[0].now];

Check_Border();//蛇头是否越界

Check_Head(x,y);//蛇头移动后的位置情况,参数为:蛇头的开始位置

if(sum==t)//未吃到食物即蛇身移动哦

for(i=1;i<sum;i++)//要从蛇尾节点向前移动哦,前一个节点作为参照

{

if(i==1)//尾节点设置为空再移动

GameMap[Snake[i].x][Snake[i].y]='.';

if(i==sum-1)//为蛇头后面的蛇身节点,特殊处理

{

Snake[i].x=x;

Snake[i].y=y;

Snake[i].now=Snake[0].now;

}

else//其他蛇身即走到前一个蛇身位置

{

Snake[i].x=Snake[i+1].x;

Snake[i].y=Snake[i+1].y;

Snake[i].now=Snake[i+1].now;

}

GameMap[Snake[i].x][Snake[i].y]='#';//移动后要置为'#'蛇身

}

}

voidCheck_Border()//检查蛇头是否越界

{

if(Snake[0].x<0||Snake[0].x>=H

||Snake[0].y<0||Snake[0].y>=L)

over=1;

}

voidCheck_Head(intx,inty)//检查蛇头移动后的位置情况

{

if(GameMap[Snake[0].x][Snake[0].y]=='.')//为空

GameMap[Snake[0].x][Snake[0].y]='@';

else

if(GameMap[Snake[0].x][Snake[0].y]=='*')//为食物

{

GameMap[Snake[0].x][Snake[0].y]='@';

Snake[sum].x=x;//新增加的蛇身为蛇头后面的那个

Snake[sum].y=y;

Snake[sum].now=Snake[0].now;

GameMap[Snake[sum].x][Snake[sum].y]='#';

sum++;

Create_Food();//食物吃完了马上再产生一个食物

}

else

over=1;

}

用c语言写贪吃蛇

#include

#include

#include

#include/*引用的库函数*/

#define LEFT 0x4b00

#define RIGHT 0x4d00

#define DOWN 0x5000

#define UP 0x4800

#define ESC 0x011b/*宏定义键名*/

#define N 200

int i,key;

int level;/*游戏等级*/

int score=0;/*得分*/

int gamespeed;/*游戏速度*/

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 Choicelevle(void);/*选择游戏等级*/

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

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

void DRAW(void);/*游戏区域*/

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

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

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

/*主函数*/

void main(void)

{

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

Choicelevle();/*选择游戏等级*/

DRAW();/*游戏区域*/

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

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

}

/*图形驱动*/

void Init(void)

{

int gd=DETECT,gm;

initgraph(&gd,&gm,"\\turboc2");/*初始化图形系统*/

cleardevice();/*清除图形界面*/

}

/*选择游戏等级*/

void Choicelevle(void)

{char name[20];setcolor(YELLOW);settextstyle(0,0,6);outtextxy(150,150,"Snake");setcolor(GREEN);settextstyle(0,0,1);outtextxy(200,250,"please put in your English name:");outtextxy(200,270,"Choice levle from 1-9.");outtextxy(300,320,"name:yangzilong");/*制作人姓名*/outtextxy(300,350,"number:0902060226");/*制作人学号*/outtextxy(300,380,"class:computer science 0602");/*制作人班级*/getch();printf("please putin your name:");gets(name);printf("please choice levle:");scanf("%d",&level);gamespeed=100000-400*level-300*level*level;if(level>9||level<1){cleardevice();/*清除图形界面*/setcolor(YELLOW);/*设置字体颜色*/settextstyle(0,0,2);/*设置字体类型*/outtextxy(150,200,"level input error");/*显示文本*/getch();level=1;}

}

void DRAW(void)

{cleardevice();/*清屏*/setcolor(2);setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/rectangle(45,45,465,325);}

/*玩游戏具体过程*/

void GamePlay(void)

{setcolor(5);setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/randomize();/*随机数发生器*/food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/snake.life=0;/*活着*/snake.direction=1;/*方向往右*/snake.x[0]=320;snake.y[0]=240;/*蛇头*/snake.x[1]=330;snake.y[1]=240;/*蛇的第二节位置*/snake.node=3;/*节数*/PrScore();/*输出得分*/while(1)/*可以重复玩游戏,压ESC键结束*/{while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/{if(food.yes==1)/*需要出现新食物*/{food.x=rand()%360+70;food.y=rand()%250+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]<50)

{snake.x[0]=450;/*如果蛇头越过左边界,则从右边界进入*/snake.y[0]=snake.y[0];/*纵坐标不变*/for(i=snake.node-1;i>0;i--){snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1];/*蛇的其他节数向前推进*/}

{

setfillstyle(SOLID_FILL,0);/*设置填充模式和颜色,0表示黑色*/

bar(50,55,455,315);/*bar是表示填充的范围的函数*/

}

}

else

if(snake.x[0]>450)

{snake.x[0]=50;/*如果蛇头越过右边界,则蛇头从左边界进入*/snake.y[0]=snake.y[0];/*纵坐标不变*/for(i=snake.node-1;i>0;i--){snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1];/*蛇的其他节数向前推进*/}

{

setfillstyle(SOLID_FILL,0);/*设置填充模式和颜色,0表示黑色*/

bar(50,55,455,315);/*bar是表示填充的范围的函数*/

}

}

else

if(snake.y[0]<60)

{snake.y[0]=320;/*如果蛇头越过上边界,则从下边界进入*/snake.x[0]=snake.x[0];/*横坐标不变*/for(i=snake.node-1;i>0;i--){snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1];/*蛇的其他节数向前推进*/}

{

setfillstyle(SOLID_FILL,0);/*设置填充模式和颜色,0表示黑色*/

bar(50,55,455,315);/*bar是表示填充的范围的函数*/

}

}

else

if(snake.y[0]>320)

{snake.y[0]=60;/*如果蛇头越过下边界,则从上边界进入*/snake.x[0]=snake.x[0];/*横坐标不变*/for(i=snake.node-1;i>0;i--){snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1];/*蛇的其他节数向前推进*/}

{

setfillstyle(SOLID_FILL,0);/*设置填充模式和颜色,0表示黑色*/

bar(50,55,455,315);/*bar是表示填充的范围的函数*/

}

}

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;/*每吃掉一食物,得分累加10分*/

if(score%100==0)

{level++;gamespeed=100000-400*level-300*level*level;/*每吃掉10食物提升一级,速度加快*/PrScore();/*输出新得分*/setcolor(YELLOW);/*设置字体颜色*/settextstyle(0,0,4);/*设置字体类型*/outtextxy(150,200,"LEVEL UP");/*显示文本*/if(level==10){level=1,gamespeed=100000-400*level-300*level*level;}

delay(6000000);

delay(6000000);

delay(6000000);

delay(6000000);

delay(6000000);

delay(6000000);

delay(6000000);

bar(50,55,455,315);/*bar是表示填充的范围的函数*/

}

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==UP&&snake.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 str1[20];/*设置字符型数组*/

setfillstyle(SOLID_FILL,0);

bar(50,15,390,35);/*填充矩形框*/

setcolor(6);/*设置文本颜色*/

settextstyle(0,0,2);/*设置数组显示位置*/

sprintf(str1,"score%d level%d",score,level);/*显示数组内容*/

outtextxy(55,20,str1);

setcolor(YELLOW);/*设置字体颜色*/

settextstyle(0,0,2);/*设置字体类型*/

outtextxy(250,400,"EXIT=ESC");/*显示文本*/

}

void Close(void)

{

closegraph();

}

OK,本文到此结束,希望对大家有所帮助。

mysql数据库怎么创建(如何建立一个数据库)javascript编辑器,java开发ai工具