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++贪吃蛇源代码(无版权,自己编写,欢迎任意修改拷贝)#define?DEBUG?0?//当程序在调试阶段时?DEBUG为?1
#include<iostream>
#include<windows.h>
#include<time.h>
#include<conio.h>
using?namespace?std;
void?readini(FILE?**fphead,?int?*score,?char?*argv[])?//创建或打开一个和运行文件对应的ini文件,读取最高纪录
{
char?filename[200],*pfilename; int?flag=-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"文件n",pfilename);
system("pause");
exit(0);}
}
else {fread(score,sizeof(int),1,*fphead);
}}
void?writeini(FILE?**fphead,?int?*score,?char?*argv[])//打开一个和运行文件对应的ini文件,写入最高纪录
{
char?filename[200],*pfilename; int?flag=-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"文件,磁盘写保护!n",pfilename);
system("pause");
exit(0); } else {rewind(*fphead);
fwrite(score,sizeof(int),1,*fphead);
fclose(*fphead);
}}
void?gotoxy(int?x,int?y)//光标定位,光标定位函数SetConsoleCursorPosition是左上角位置是0,0然后向左向下延伸
{
COORD?pos;
pos.X=2*y;
pos.Y=x;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
void?color(int?a)//颜色函数
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
}
void?Refresh(int?q[][22],?int?grade,?int?gamespeed,?int?length,int?score)?//输出贪吃蛇棋盘
{
int?i,j; for(i=0;i<22;i++) {for(j=0;j<22;j++)
{

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?"; }}
int?main(int?argc,?char?*argv[]){
int?tcsQipan[22][22];?//贪吃蛇棋盘是一个二维数组(如22*22,包括墙壁)
int?i,j,score,directiontemp;
FILE*fpini;/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");//清除屏幕重新开始 } return?0;}
免责声明:本平台仅供信息发布交流之途,请谨慎判断信息真伪。如遇虚假诈骗信息,请立即举报
举报