c语言贪吃蛇(c语言贪吃蛇代码及介绍)

大家好,如果您还对c语言贪吃蛇不太了解,没有关系,今天就由本站为大家分享c语言贪吃蛇的知识,包括c语言贪吃蛇代码及解析的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

贪吃蛇,这款经典的游戏,自1980年代初诞生以来,便受到了广大玩家的喜爱。它简单易懂,玩法丰富,至今仍然活跃在各类平台上。今天,我们就来聊聊C语言版本的贪吃蛇游戏,一起重温那段美好的游戏时光。

1. 贪吃蛇的起源与发展

1.1 起源

贪吃蛇的起源可以追溯到1980年代初,由英国阿塔里公司(Atari)开发。最初,这款游戏在Arcade平台上推出,因其简单易上手的操作和丰富的玩法而迅速走红。

1.2 发展

随着科技的进步,贪吃蛇游戏逐渐移植到了个人电脑、游戏机、手机等平台上。许多程序员和游戏爱好者也开始尝试用各种编程语言重写这款游戏,使其更加丰富和有趣。

2. C语言贪吃蛇的基本原理

2.1 游戏界面

贪吃蛇游戏通常使用文本或图形界面展示。在C语言中,我们可以使用`printf`函数或图形库(如SDL)来实现图形界面。

2.2 游戏规则

1. 蛇的长度:初始长度为3个单位。

2. 蛇的移动:玩家使用键盘方向键控制蛇的移动。

3. 食物:游戏中会出现食物,蛇吃到食物后长度会增加。

4. 遇壁或撞到自己:游戏结束。

2.3 游戏逻辑

1. 初始化:设置游戏窗口、蛇的初始位置和长度、食物的位置等。

2. 主循环:循环执行以下步骤:

a. 检测玩家输入,控制蛇的移动方向。

b. 判断蛇是否吃到食物,若吃到则增加长度,并生成新的食物。

c. 判断蛇是否撞壁或撞到自己,若撞到则游戏结束。

d. 重新绘制游戏界面,显示蛇和食物。

3. 游戏结束:当蛇撞壁或撞到自己时,输出游戏结束信息。

3. C语言贪吃蛇的实现

以下是一个简单的C语言贪吃蛇游戏实现示例:

“`c

include

include

include

include

define WIDTH 20

define HEIGHT 20

int x, y, fruitX, fruitY, score;

int tailX[100], tailY[100];

int nTail;

enum eDirecton { STOP = 0, LEFT, RIGHT, UP, DOWN};

enum eDirecton dir;

void Setup() {

dir = STOP;

x = WIDTH / 2;

y = HEIGHT / 2;

fruitX = rand() % WIDTH;

fruitY = rand() % HEIGHT;

score = 0;

}

void Draw() {

system(“

用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();

}

c语言贪吃蛇源代码怎么用

C语言贪吃蛇源代码必须经过相应的C/C++编译器编译成EXE文件后才能运行。

由于我们通常使用的操作系统是Windows系统,而在该系统下最长用的C/C++编译器是VC++编译器,目前在大专院校常用的版本还是VC++6.0

下面就以VC++6.0来说明编译过程:

1.在VC++6.0中通过“File”菜单下的“Open”子菜单打开贪吃蛇代码

2.在VC++6.0中通过“Build”菜单下的“Compile xxxx.xx”子菜单编译贪吃蛇代码

3.在VC++6.0中通过“Build”菜单下的“Execute xxxx.exe”子菜单运行贪吃蛇程序

附:在VC++6环境下可运行的C/C++贪吃蛇源代码(无版权,自己编写,欢迎任意修改拷贝)

/*

C/C++贪吃蛇游戏,zjlj,2015.3.16

*/

#defineDEBUG0//当程序在调试阶段时DEBUG为1

#include<iostream>

#include<windows.h>

#include<time.h>

#include<conio.h>

usingnamespacestd;

voidreadini(FILE**fphead,int*score,char*argv[])//创建或打开一个和运行文件对应的ini文件,读取最高纪录

{

charfilename[200],*pfilename;

intflag=-1,i;

strcpy(filename,argv[0]);

for(i=0;filename[i]!='\0';i++)

{

if('.'==filename[i])flag=1;

}

if(1==flag)

{

filename[i-1]='i';

filename[i-2]='n';

filename[i-3]='i';

}

else

{

filename[i]='.';

filename[i+1]='i';

filename[i+2]='n';

filename[i+3]='i';

filename[i+4]='\0';

}

for(;filename[i]!='\\'&&i>=0;i–)pfilename=&filename[i];

if((*fphead=fopen(pfilename,”rb+”))==NULL)

{

if((*fphead=fopen(pfilename,”wb+”))==NULL)

{

printf(“无法创建或打开\”%s\”文件

“,pfilename);

system(“pause”);

exit(0);

}

}

else

{

fread(score,sizeof(int),1,*fphead);

}

}

voidwriteini(FILE**fphead,int*score,char*argv[])//打开一个和运行文件对应的ini文件,写入最高纪录

{

charfilename[200],*pfilename;

intflag=-1,i;

strcpy(filename,argv[0]);

for(i=0;filename[i]!='\0';i++)

{

if('.'==filename[i])flag=1;

}

if(1==flag)

{

filename[i-1]='i';

filename[i-2]='n';

filename[i-3]='i';

}

else

{

filename[i]='.';

filename[i+1]='i';

filename[i+2]='n';

filename[i+3]='i';

filename[i+4]='\0';

}

for(;filename[i]!='\\'&&i>=0;i–)pfilename=&filename[i];

if((*fphead=fopen(pfilename,”wb+”))==NULL)

{

printf(“无法写入\”%s\”文件,磁盘写保护!

“,pfilename);

system(“pause”);

exit(0);

}

else

{

rewind(*fphead);

fwrite(score,sizeof(int),1,*fphead);

fclose(*fphead);

}

}

voidgotoxy(intx,inty)//光标定位,光标定位函数SetConsoleCursorPosition是左上角位置是0,0然后向左向下延伸

{

COORDpos;

pos.X=2*y;

pos.Y=x;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);

}

voidcolor(inta)//颜色函数

{

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);

}

voidRefresh(intq[][22],intgrade,intgamespeed,intlength,intscore)//输出贪吃蛇棋盘

{

inti,j;

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

{

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

{

if(q[i][j]==0)//输出棋盘空白

{

gotoxy(i,j);

color(11);

cout<<“■”;

}

if(q[i][j]==1||q[i][j]==2)//输出棋盘墙壁

{

gotoxy(i,j);

color(11);

cout<<“□”;

}

if(q[i][j]==3)//输出蛇头

{

gotoxy(i,j);

color(14);

cout<<“★”;

}

if(q[i][j]==4)//输出蛇身

{

gotoxy(i,j);

color(12);

cout<<“◆”;

}

if(q[i][j]==5)//输出果子

{

gotoxy(i,j);

color(12);

cout<<“●”;

}

}

if(i==0)cout<<“\t***********************”;

if(i==1)cout<<“\t等级为:”<<grade;//显示等级

if(i==3)cout<<“\t自动前进时间”;

if(i==4)cout<<“\t间隔为:”<<gamespeed<<“ms”;//显示时间

if(i==6)cout<<“\t历史最高分为:”<<score<<“分”;

if(i==7)cout<<“\t你现在得分为:”<<(length+(grade-1)*8)*10<<“分”;

if(i==8)cout<<“\t**********************”;

if(i==9)cout<<“\t游戏说明:”;

if(i==10)cout<<“\t(1)用小键盘方向键控制”;

if(i==11)cout<<“\t蛇头运动方向;”;

if(i==12)cout<<“\t(2)蛇每吃一个果子蛇身”;

if(i==13)cout<<“\t增加一节;”;

if(i==14)cout<<“\t(3)蛇咬到自己或碰到墙”;

if(i==15)cout<<“\t壁游戏结束。”;

if(i==18)cout<<“\t**********************”;

if(i==19)cout<<“\tC/C++语言作业:”;

if(i==20)cout<<“\tzjlj,2015.03.16”;

}

}

intmain(intargc,char*argv[]){

inttcsQipan[22][22];//贪吃蛇棋盘是一个二维数组(如22*22,包括墙壁)

inti,j,score,directiontemp;

FILE*fpini;//*fpini信息文件

readini(&fpini,&score,argv);//读取ini文件的最高纪录

if(score<0)//最高成绩小于零设置为零,初建文件会是负数

score=0;

while(1)

{

for(i=1;i<=20;i++)

for(j=1;j<=20;j++)

tcsQipan[i][j]=0;//贪吃蛇棋盘相应坐标标上中间空白部分的标志0

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

tcsQipan[0][i]=tcsQipan[21][i]=1;//贪吃蛇棋盘相应坐标标上上下墙壁的标志1

for(i=1;i<=20;i++)

tcsQipan[i][0]=tcsQipan[i][21]=2;//贪吃蛇棋盘相应坐标标上左右墙壁的标志2

inttcsZuobiao[2][500];//蛇的坐标数组

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

{

tcsZuobiao[0][i]=1;//蛇身和蛇头的x坐标

tcsZuobiao[1][i]=i+1;//蛇身和蛇头的y坐标

}

inthead=3,tail=0;//标示蛇头和蛇尾的数组偏移量

for(i=1;i<=3;i++)

tcsQipan[1][i]=4;//蛇身

tcsQipan[1][4]=3;//蛇头

intx1,y1;//随机出果子

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

do

{

x1=rand()%20+1;

y1=rand()%20+1;

}

while(tcsQipan[x1][y1]!=0);//如果不是在空白处重新出果子

tcsQipan[x1][y1]=5;//贪吃蛇棋盘相应坐标标上果子的标志5

color(12);

cout<<“

\t\t\t\t贪吃蛇游戏即将开始!”<<endl;//准备开始

longstart,starttemp;

intgrade=1,length=4;//设置初始等级和蛇的初始长度

intgamespeed=500;//设置初始前进时间间隔

for(i=3;i>=0;i–)

{

start=clock();

while(clock()-start<=1000);

system(“cls”);

if(i>0)

cout<<“

\t\t\t\t进入倒计时:”<<i<<endl;//倒计时显示

else

Refresh(tcsQipan,grade,gamespeed,length,score);//初始棋盘显示

}

inttimeover=1,otherkey=1;//初始化超时时间和按键判断参数

chardirection=77;//设置初始情况下,向右运动

intx=tcsZuobiao[0][head],y=tcsZuobiao[1][head];//保存蛇头坐标到x,y变量

while(1)//运行一局游戏

{

start=clock();

while((timeover=((starttemp=clock())-start<=gamespeed))&&!kbhit());//如果有键按下或时间超过自动前进时间间隔则终止循环

if(direction==72||direction==80||direction==75||direction==77)

directiontemp=direction;//保留上一次方向按键

//starttemp=gamespeed+start-starttemp;//保留停留时间

if(timeover)

{

#if(DEBUG==1)

direction=getch();//调试代码

#else

if((direction=getch())==-32)

direction=getch();

#endif

}

#if(DEBUG==1)//调试代码

start=clock();

while(clock()-start<=2000);

gotoxy(24,4);

cout<<“\t按键ASCII代码”<<(int)direction<<“”<<endl;

#endif

if(!(direction==72||direction==80||direction==75||direction==77))

{

otherkey=0;//按键非方向键,otherkey设置为0

}

else

{

otherkey=1;//按键为方向键,otherkey设置为1

}

if(direction==72&&directiontemp==80)//忽略反方向按键

{

direction=32;

otherkey=0;

//start=clock();

//while(clock()-start<=starttemp);

}

elseif(direction==80&&directiontemp==72)

{

direction=32;//设置按键为非方向键

otherkey=0;//按键为非方向键,otherkey设置为0

//start=clock();

//while(clock()-start<=starttemp);//补偿等待时间

}

elseif(direction==75&&directiontemp==77)

{

direction=32;

otherkey=0;

//start=clock();

//while(clock()-start<=starttemp);

}

elseif(direction==77&&directiontemp==75)

{

direction=32;

otherkey=0;

//start=clock();

//while(clock()-start<=starttemp);

}

switch(direction)//判断方向键

{

case72:x=tcsZuobiao[0][head]-1;y=tcsZuobiao[1][head];break;//向上

case80:x=tcsZuobiao[0][head]+1;y=tcsZuobiao[1][head];break;//向下

case75:x=tcsZuobiao[0][head];y=tcsZuobiao[1][head]-1;break;//向左

case77:x=tcsZuobiao[0][head];y=tcsZuobiao[1][head]+1;break;//向右

default:break;

}

if(x==0||x==21||y==0||y==21)//蛇头碰到墙壁,结束本局游戏

{

gotoxy(22,12);

cout<<“\t游戏已结束!”<<endl;

if(score>=(length+(grade-1)*8)*10)//判断是否破记录

{

gotoxy(10,7);

color(12);

cout<<“闯关失败加油耶!”<<endl;

fclose(fpini);//关闭ini文件

}

else

{

gotoxy(10,7);

color(12);

cout<<“恭喜您打破记录”<<endl;

score=(length+(grade-1)*8)*10;

writeini(&fpini,&score,argv);//写入ini文件的最高纪录

}

gotoxy(23,12);

cout<<“按回车键重新开始,按ESC退出游戏”<<endl;//显示的提示

break;//退出该局游戏

}

if(tcsQipan[x][y]!=0&&!(x==x1&&y==y1)&&tcsQipan[x][y]!=3)//蛇头碰到蛇身,结束本局游戏

{

gotoxy(22,12);

cout<<“\t游戏已结束!”<<endl;

if(score>=(length+(grade-1)*8)*10)//判断是否破记录

{

gotoxy(10,7);

color(12);

cout<<“闯关失败加油耶!”<<endl;

fclose(fpini);//关闭ini文件

}

else

{

gotoxy(10,7);

color(12);

cout<<“恭喜您打破记录”<<endl;

score=(length+(grade-1)*8)*10;

writeini(&fpini,&score,argv);//写入ini文件的最高纪录

}

gotoxy(23,12);

cout<<“按回车键重新开始,按ESC退出游戏”<<endl;//显示的提示

break;//退出该局游戏

}

/*

游戏运行时的核心算法开始

*/

if(x==x1&&y==y1)//吃果子,长度加1

{

length++;

if(length>=8)//长度大于等于8重新计算长度,等级加1

{

length-=8;//重新计算长度

grade++;//等级加1

if(gamespeed>50)//控制最快速度为50

gamespeed=550-grade*50;//改变自动前进时间间隔

}

tcsQipan[x][y]=3;//贪吃蛇棋盘相应坐标现在蛇头标志改为蛇头标志3

tcsQipan[tcsZuobiao[0][head]][tcsZuobiao[1][head]]=4;//贪吃蛇棋盘相应坐标原来蛇头标志改为蛇身标志4

head=(head+1)%400;//防止数组越界

tcsZuobiao[0][head]=x;//蛇头的x坐标

tcsZuobiao[1][head]=y;//蛇头的y坐标

do//随机出果子

{

x1=rand()%20+1;

y1=rand()%20+1;

}

while(tcsQipan[x1][y1]!=0);//如果不是在空白处重新出果子

tcsQipan[x1][y1]=5;//贪吃蛇棋盘相应坐标标上果子的标志5

gotoxy(22,12);

cout<<“\t游戏进行中!”<<endl;

Refresh(tcsQipan,grade,gamespeed,length,score);

}

else//不吃果子

{

if(otherkey)

{

tcsQipan[tcsZuobiao[0][tail]][tcsZuobiao[1][tail]]=0;

tail=(tail+1)%400;//防止数组越界

tcsQipan[tcsZuobiao[0][head]][tcsZuobiao[1][head]]=4;

head=(head+1)%400;//防止数组越界

tcsZuobiao[0][head]=x;//蛇头的x坐标

tcsZuobiao[1][head]=y;//蛇头的y坐标

tcsQipan[tcsZuobiao[0][head]][tcsZuobiao[1][head]]=3;

gotoxy(22,12);

cout<<“\t游戏进行中!”<<endl;

Refresh(tcsQipan,grade,gamespeed,length,score);

}

else

{

gotoxy(22,12);

cout<<“\t游戏暂停中!”<<endl;

}

}

/*

游戏运行时的核心算法结束

*/

}

while(1)

{

while(!kbhit());

if((direction=getch())==13)//按回车键开始下一局

break;

if(direction==27)//按ESC退出游戏

exit(0);

}

system(“cls”);//清除屏幕重新开始

}

return0;

}

用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);/*右边*/

}

}

好了,关于c语言贪吃蛇和c语言贪吃蛇代码及解析的问题到这里结束啦,希望可以解决您的问题哈!

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享