c语言贪吃蛇源代码(贪吃蛇游戏介绍)

admin 427 0

很多朋友对于c语言贪吃蛇源代码和贪吃蛇游戏介绍不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!

一、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

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

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

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

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

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

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

printf("无法创建或打开\"%s\"文件\n",pfilename);

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

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

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

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

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

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

printf("无法写入\"%s\"文件,磁盘写保护!\n",pfilename);

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

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

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);

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

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

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";

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

cout<<"\n\n\t\t\t\t进入倒计时:"<<i<<endl;//倒计时显示

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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;//向右

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

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

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

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

cout<<"恭喜您打破记录"<<endl;

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

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

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

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

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

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

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

cout<<"恭喜您打破记录"<<endl;

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

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

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

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

if(length>=8)//长度大于等于8重新计算长度,等级加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坐标

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

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

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

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

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;

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

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

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

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

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

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

二、C语言的贪吃蛇源代码

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

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

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

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

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

constcharShead='@';//蛇头

constcharSbody='#';//蛇身

constcharSfood='*';//食物

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

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

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

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

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

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

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

printf("\n小小C语言贪吃蛇\n");

printf("按任意方向键开始游戏\n");

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

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

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

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

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

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

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

printf("\n小小C语言贪吃蛇\n");

printf("按任意方向键开始游戏\n");

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

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

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

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

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

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_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)//为蛇头后面的蛇身节点,特殊处理

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

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)

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

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

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

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

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

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

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

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

三、求c语言控制面板贪吃蛇源代码

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

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

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

struct Snake//蛇的每个节点的数据类型

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

const char Shead='@';//蛇头

const char Sbody='#';//蛇身

const char Sfood='*';//食物

const char Snode='.';//'.'在地图上标示为空

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

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

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

void Check_Head(int x, int y);//检查蛇头移动后的位置情况

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

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

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

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

printf("\n小小C语言贪吃蛇\n");

printf("按任意方向键开始游戏\n");

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

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

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

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

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

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

printf("\n**游戏结束**\n");

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

printf("\n小小C语言贪吃蛇\n");

printf("按任意方向键开始游戏\n");

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

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

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

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

int t= 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)//为蛇头后面的蛇身节点,特殊处理

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

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

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

void Check_Border()//检查蛇头是否越界

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

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

void Check_Head(int x, int y)//检查蛇头移动后的位置情况

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

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

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

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

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

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

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

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

关于c语言贪吃蛇源代码和贪吃蛇游戏介绍的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。