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