用最笨的方法写的贪吃蛇,大神勿喷!小白刚看完老潭的书写的,也是第一次写这么长的代码,写的太烂了!。。。。。。此代码用winTC直接编译运行即可!!!!
#include
#include/*随机产生数(rand())和结束(exit(0))函数*/
#include/*控制刷新时间函数,clock_t,clock()*/
#include/*监控键盘,bioskey(1)*/
#include/*定位坐标gotoxy(),清屏clrscr()*/
#define X_MAX 79
#define X_S 60
#define Y_S 25
#define GO(a,b) gotoxy(a,b),printf("*")
#define B_J(a,b) (a==b?a_j(keyy):a_j(key))
#define O_K(a) for(i=X_S+1;i
#define D_W gotoxy(x,y),printf("$")
double t;
clock_t end;
#define GO_T end=clock()+t*1.1;while(clock()
const int shang=0x4800,xia=0x5000,zuo=0x4b00,/*功能按键码*/
you=0x4d00,jia=0xd3d,zan_t=0x3920,cai_d=0x3f00,
du_q=0x3c00,bao_c=0x3b00,tui_c=0x11b,jian=0xc2d;
void w_k();/*外层框架*/
void k_s();/*游戏开始菜单*/
void d_m();/*读秒函数*/
void j_s();/*游戏结束框架*/
void a_j(int);/*判断按键取运行方向*/
void s_j();/*随机产生坐标*/
void ou();/*保存数据*/
void of(); /*读取数据*/
void Y_S_J();/*初始化数据函数*/
short n,x,y;
int keyy;
struct P{short x;short y;}p[300];
/*主函数功能调用*/
int main(){
int key=1,i;
w_k();
k_s();
clrscr();
w_k();
d_m();
for(i=0;i
while(1){
if(bioskey(1)){
key=bioskey(0);
if(key==shang)B_J(keyy,xia);
else if(key==xia)B_J(keyy,shang);
else if(key==zuo)B_J(keyy,you);
else if(key==you)B_J(keyy,zuo);
else if(key==zan_t){
i=1;
while(i!=key){
clrscr();w_k();
gotoxy(15,10);
printf("\\a\\\\----@@@@ * STOP * @@@@----/\\a");
bioskey(1);
i=bioskey(0);}
}
else if(key==jia){if(t>1)t/=1.1;}
else if(key==jian){if(t<15)t*=1.1;}
else if(key==bao_c)ou();
else if(key==cai_d)clrscr(),w_k(),k_s();
else if(key==tui_c)exit(0);
else s_j(),a_j(keyy);
}
else a_j(keyy);
}
return 0;
}
/*制框函数*/
void w_k(){
int i,j;
for(j=1;j<=Y_S;j+=Y_S-1)
for(i=1;i<=X_MAX;GO(i,j),i++);
for(i=1;i<=Y_S;i++)
GO(1,i),GO(X_S,i),GO(X_MAX,i);
O_K(6);O_K(10);O_K(20);
gotoxy(X_S+1,3),printf(" S-E-I-Z-O-F");
gotoxy(X_S+1,5),printf("|-_-!- %-d -!-_-|",n);
gotoxy(X_S+1,7),printf(" # Xiao Yi #");
gotoxy(X_S+1,9),printf(" ^_^ ^_^");
gotoxy(X_S+1,12),printf(" --M-E-N-U--");
gotoxy(X_S+1,13),printf("------- -------");
gotoxy(X_S+1,14),printf(" # Blank: stop");
gotoxy(X_S+1,15),printf(" # Acceleration:+");
gotoxy(X_S+1,16),printf(" # Slowdown: -");
gotoxy(X_S+1,17),printf(" # Conserve: F1");
gotoxy(X_S+1,18),printf(" # Main Menu: F5");
gotoxy(X_S+1,19),printf(" # Quit: Esc");
gotoxy(X_S+1,22),printf(" ^_^ E_Fabricator");
}
/*开始菜单*/
void k_s(){
int i,key,j=21;
while(1){
for(i=0;i<6;i++){
GO(10,11+i);GO(17,11+i);GO(23,9+i);
GO(27,9+i);GO(40,8+i);GO(46,8+i);
GO(11+i,11);GO(31+i,6);GO(30+i,19);
GO(14+i,5+i);GO(13-i,5+i);GO(48,13+i);
GO(40+i,8);GO(40+i,13);GO(40+i,19);
GO(48+i,5);GO(48+i,19);
}
GO(13,9);GO(50,4);GO(13,4);
for(i=0;i<3;i++){
GO(14-i,12+i);GO(12,14+i);GO(11-i,17+i);
GO(14+i,14+i);GO(16+i,17+i);GO(24+i,9);
GO(24+i,14);GO(30,4+i);GO(30-i,6+i);
GO(29,16+i);GO(45+i,17+i);GO(53,17+i);
GO(53-i,12+i);GO(53,5+i);GO(47,5+i);
}
for(i=0;i<2;i++){
GO(50,8+i);GO(36,18+i);GO(50,15+i);
}
for(i=0;i<15;GO(43,4+i),i++);
for(i=0;i<8;GO(29+i,9),GO(36-i,9+i),i++);
for(i=0;i<4;GO(49,10+i),i++);
for(i=2;i<59;gotoxy(i++,20),printf("=="));
gotoxy(30,21);printf("# \\aStart");
gotoxy(30,22);printf("# Read");
gotoxy(30,23);printf("# Quit");
gotoxy(25,j);printf("-->");
gotoxy(1,1);
while(!bioskey(1));
key=bioskey(0);
if(key==shang)
{ j--;
if(j<21)j=23;
}
else if(key==xia){
j++;
if(j>23)j=21;}
else if(key==0x1c0d){/*如果巧回车,判断在哪个选项中执行*/
switch(j){
case 21:Y_S_J();return;
case 22:of();return;
case 23:exit(0);
}
}
clrscr();
w_k();
}
}
/*GAME OVER*/
void j_s(){
int i,key,j=20;
while(1){
for(i=0;i<13;i++){
GO(16,4+i);GO(21,4+i);
GO(23,4+i);GO(44,4+i);GO(52,4+i);
}
for(i=0;i<11;i++){
GO(3,5+i);GO(37,4+i);GO(42,4+i);
GO(10,6+i);GO(14,6+i);GO(18,16-i);GO(19,16-i);
}
for(i=0;i<5;i++){
GO(4+i,16);GO(8,15-i);GO(10+i,11);
GO(24+i,4);GO(24+i,9);GO(24+i,16);
GO(45+i,4);GO(45+i,9);GO(45+i,16);
GO(57-i,8+i);GO(53+i,12+i);
}
for(i=0;i<3;i++){
GO(4+i,4);GO(6+i,4+i);GO(6+i,11);
GO(17+i,4+i);GO(20-i,4+i);GO(12-i,4+i);
GO(12+i,4+i);GO(33-i,4+i);GO(33+i,4+i);
GO(33-i,16-i);GO(33+i,16-i);GO(37+i,14+i);
GO(42-i,14+i);GO(53+i,4);GO(55+i,4+i);
GO(57,6+i);
}
for(i=0;i<7;i++)
GO(31,7+i),GO(35,7+i);
/*以上是‘GAME OVER’坐标*/
for(i=2;i<60;i++)gotoxy(i,18),printf("=");
gotoxy(25,20);printf("\\a# Restart");
gotoxy(25,21);printf("# Read");
gotoxy(25,22);printf("# Quit");
gotoxy(21,j);printf("-->");
gotoxy(1,1);
while(!bioskey(1));
key=bioskey(0);
if(key==shang){
j--;
if(j<20)j=22;
}
else if(key==xia){
j++;
if(j>22)j=20;
}
else if(key==0x1c0d)
switch(j){
case 20:Y_S_J();return;
case 21:of();return;
case 22:exit(0);
}
clrscr();
w_k();
}
}
/*判定:反键,撞墙,吃到点增长。*/
void a_j(int key1){
int i;clrscr();w_k();D_W;
if(key1==shang){
if(p[0].y-1==y&&p[0].x==x)n++,x=0;
i=n;
while(--i!=0)
p[i]=p[i-1];
p[0].y--;
}
else if(key1==xia){if(p[0].y+1==y&&p[0].x==x)n++,x=0;
i=n;
while(--i!=0)
p[i]=p[i-1];
p[0].y++;
}
else if(key1==zuo){if(p[0].y==y&&p[0].x-1==x)n++,x=0;
i=n;
while(--i!=0)
p[i]=p[i-1];
p[0].x--;
}
else {if(p[0].y==y&&p[0].x+1==x)n++,x=0;
i=n;
while(--i!=0)
p[i]=p[i-1];
p[0].x++;
}
keyy=key1;
for(i=0;i
if(p[0].y>=Y_S||p[0].x>=X_S||p[0].y<=1||p[0].x<=1)
clrscr(),w_k(),j_s(0);
for(i=1;i
if(p[0].x==p[i].x&&p[0].y==p[i].y)
clrscr(),w_k(),j_s(0);
GO_T;
w_k();
s_j();
}
/*(随机产生坐标)*/
void s_j(){
int i=0;
if(x==0||y==0){
while(1){
srand(time(NULL));
x=rand()%60;
y=rand()%25;
if(x>1&&y>1){
for(i=0;i
if(p[i].x==x&&p[i].y==y)
break;
}
if(i==n)break;
}
}
D_W;
}
/*保存函数*/
void ou(){
int i;
FILE*pf;
pf=fopen("D:\\\\T_C_S_data.txt","wb");
fwrite(&n,sizeof(short),1,pf);
fwrite(&t,sizeof(double),1,pf);
fwrite(&keyy,sizeof(int),1,pf);
for(i=0;i
fwrite(&p[i],sizeof(struct P),1,pf);
fclose(pf);
}
/*读取函数*/
void of(){
int i;
FILE*pf;
pf=fopen("D:\\\\T_C_S_data.txt","rb");
fread(&n,sizeof(short),1,pf);
fread(&t,sizeof(double),1,pf);
fread(&keyy,sizeof(int),1,pf);
for(i=0;i
fread(&p[i],sizeof(struct P),1,pf);
fclose(pf);
if(!n)
Y_S_J();
}
/*初始化数据*/
void Y_S_J(){
int i,j=8;
n=5,
x=0,
y=0,
t=10.0;
keyy=0x4d00;
for(i=0;i<5;i++,j--)
p[i].x=j,p[i].y=3;
}
/*读秒*/
void d_m(){
int i=5;
clock_t end1;
while(i>2){
end1=clock()+3*10;
while(end1>clock()){
gotoxy(23-i,8-i);printf("|");
gotoxy(23-i,9-i);printf("|");
gotoxy(23-i,18-i);printf("|");
gotoxy(23-i,17-i);printf("|");
gotoxy(17-i,13-i);
printf("\\a-- %d -- ",i-2);
}
clrscr();w_k();
i--;
}
}