#include<graphics.h>
#include<conio.h>
#include<dos.h>
#include<malloc.h>
#include<math.h>
/**********/
#define PATH "D:\\学习\\turboc2" /*你的TC安装目录*/
#define BK 7
#define DC 8
#define LC 15
#define P1 1
#define P2 4
#define X 41
#define Y 41
#define M 22
#define SX 490
#define SY1 50
#define SY2 107
#define HJ 32
#define TX 410
#define TY 160
/************/
int newmap[M][M] ={
{1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1},
{1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1},
{1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1},
{1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1},
{1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1},
{1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1},
{1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1},
{1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1},
{1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1},
{1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1},
{1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1},
{1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1},
{1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1},
{1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1},
{1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1},
{1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1},
{1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1},
{1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1},
{1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1},
{1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1},
{1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1},
{1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1},
};
/*****************************************************************/
int overmap[M][M] ={
{1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1},
{1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1},
{1, 0,1,1,0,0,0,1,1,0,0,1,0,0,0,1,0,1,1,1,1, 1},
{1, 1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,0,1,0,0,0, 1},
{1, 1,0,0,0,0,1,0,0,1,0,1,0,1,0,1,0,1,0,0,0, 1},
{1, 1,0,1,1,0,1,1,1,1,0,1,0,1,0,1,0,1,1,1,0, 1},
{1, 1,0,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,0,0, 1},
{1, 1,0,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,0,0, 1},
{1, 0,1,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,1,1, 1},
{1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1},
{1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1},
{1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1},
{1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1},
{1, 0,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,1,1,1,0, 1},
{1, 1,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,1,0,0,1, 1},
{1, 1,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,1,0,0,1, 1},
{1, 1,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,1,1,1,0, 1},
{1, 1,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0, 1},
{1, 1,0,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,0,1,0, 1},
{1, 0,1,1,0,0,0,0,1,0,0,0,1,1,1,1,0,1,0,0,1, 1},
{1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1},
{1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1},
};
int bmp[20][20]={{0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0},
{0,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,0},
{1,1,1,0,0,0,1,1,0,0,0,0,1,1,0,0,0,1,1,1},
{1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1},
{1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1},
{1,0,0,0,0,1,1,1,0,1,1,0,1,1,1,0,0,0,0,1},
{1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1},
{1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1},
{1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1},
{1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1},
{1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1},
{1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1},
{1,0,0,0,0,1,1,1,0,1,1,0,1,1,1,0,0,0,0,1},
{1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1},
{1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1},
{1,1,1,0,0,0,1,1,0,0,0,0,1,1,0,0,0,1,1,1},
{0,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,0},
{0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0}};
int map[2][M][M];
int nextx,nexty;
int score=3,level=0,dirx=0,diry=1;
int bady[400][2];
char * bit[3],*sim;
/************/
int getkey();
void edge(int l,int t,int r,int b,int c1,int c2);
void init();
void draw(int x,int y,int c);
void show();
void close();
void go();
void over();
void add();
void showscore();
/**************/
int getkey()
{
char ch=0;
if(kbhit())
ch=getch();
return(ch);
}
/************/
void init()
{
int gdriver=DETECT,gmode;
int size,i,j;
registerbgidriver(EGAVGA_driver);
initgraph(&gdriver,&gmode,PATH);
setbkcolor(BK);
setfillstyle(11,8);
edge(X-9,Y-9,X+568,Y+408,DC,DC);
floodfill(1,1,DC);
edge(X-9,Y-9,X+568,Y+408,LC,DC);
edge(X-1,Y-1,X+400,Y+400,DC,LC);
size=imagesize(X+1,Y+1,X+20,Y+20);
bit[0]=(char *)malloc(size);
if(bit[0]==NULL){printf("\n\nERROR!!");getch();exit(1);}
getimage(X+1,Y+1,X+20,Y+20,bit[0]);
for(i=0;i<20;i++)
for(j=0;j<20;j++)
if(bmp[i][j]==1)
putpixel(X+1+j,Y+1+i,P1);
bit[1]=(char*)malloc(size);
if(bit[1]==0){printf("\n\nERROR!!");getch();exit(1);}
getimage(X+1,Y+1,X+20,Y+20,bit[1]);
for(i=0;i<20;i++)
for(j=0;j<20;j++)
if(bmp[i][j]==1)
putpixel(X+1+j,Y+1+i,P2);
bit[2]=(char*)malloc(size);
if(bit[2]==0){printf("\n\nERROR!!");getch();exit(1);}
getimage(X+1,Y+1,X+20,Y+20,bit[2]);
size=imagesize(X+240,Y+107,X+290,Y+122);
sim=(char *)malloc(size);
if(sim==0){printf("\n\nERROR!!");getch();exit(1);}
getimage(X+440,Y+107,X+490,Y+122,sim);
if(bit[0]==0||bit[1]==0||bit[2]==0||sim==0)
{
close();
exit(1);
}
putimage(X+1,Y+1,bit[0],0);
edge(X+TX-3,Y+TY+19,X+TX+150,Y+TY+210,DC,LC);
setcolor(LC);
outtextxy(X+TX,Y+TY+5, "Control Options:");
outtextxy(X+TX,Y+TY+HJ*1," [P]--Start/Pause");
outtextxy(X+TX,Y+TY+HJ*2," [W]--Up");
outtextxy(X+TX,Y+TY+HJ*3," [S]--Down");
outtextxy(X+TX,Y+TY+HJ*4," [A]--Left");
outtextxy(X+TX,Y+TY+HJ*5," [D]--Right");
outtextxy(X+TX,Y+TY+HJ*6," [ESC]--Quit");
setcolor(DC);
outtextxy(X+TX-1,Y+TY+4,"Control Options:");
outtextxy(X+TX-1,Y+TY+HJ*1-1," [P]--Start/Pause");
outtextxy(X+TX-1,Y+TY+HJ*2-1," [W]--Up");
outtextxy(X+TX-1,Y+TY+HJ*3-1," [S]--Down");
outtextxy(X+TX-1,Y+TY+HJ*4-1," [A]--Left");
outtextxy(X+TX-1,Y+TY+HJ*5-1," [D]--Right");
outtextxy(X+TX-1,Y+TY+HJ*6-1," [ESC]--Quit");
outtextxy(X+TX-2,Y+TY+HJ*7," [11#522] Jackin");
showscore();
}
/*************/
void edge(int l,int t,int r,int b,int c1,int c2)
{
int cl=getcolor();
setcolor(c1);
line(l,t,r-1,t);
line(l,t,l,b-1);
setcolor(c2);
line(r,t,r,b);
line(l,b,r,b);
setcolor(cl);
}
/*************/
void draw(int x,int y,int c)
{
putimage(X+20*(y-1),Y+(x-1)*20,bit[c],0);
}
/************/
void show()
{
int i,j;
for(i=1;i<M-1;i++)
for(j=1;j<M-1;j++)
if(map[1][i][j]!=map[0][i][j])
{
map[0][i][j]=map[1][i][j];
draw(i,j,map[1][i][j]);
}
}
/******************/
void close()
{
int i;
for(i=0;i<3;i++)
if(bit[i]!=0)
free(bit[i]);
closegraph();
}
/**************/
void new()
{
int i,j;
for(i=0;i<M;i++)
for(j=0;j<M;j++)
{
map[1][i][j]=newmap[i][j];
map[0][i][j]=3;
}
score=3;
dirx=0;diry=1;
bady[0][0]=20;bady[0][1]=3;
bady[1][0]=20;bady[1][1]=2;
bady[2][0]=20;bady[2][1]=1;
for(i=0;i<score;i++)
map[1][bady[i][0]][bady[i][1]]=1;
nextx=rand()%(M-2);
nexty=rand()%(M-2);
map[1][nextx+1][nexty+1]=2;
}
/**********/
void newk()
{
for(;map[1][nextx+1][nexty+1]!=0;)
{
nextx=rand()%(M-2);
nexty=rand()%(M-2);
}
map[1][nextx+1][nexty+1]=2;
show();
}
/*************/
void go()
{
int i;
map[1][bady[score-1][0]][bady[score-1][1]]=0;
for(i=score-1;i>0;i--)
{
bady[i][0]=bady[i-1][0];
bady[i][1]=bady[i-1][1];
}
bady[0][0]+=dirx;
bady[0][1]+=diry;
map[1][bady[0][0]][bady[0][1]]=1;
}
/**************/
void over()
{
int i,j;
for(i=1;i<M-1;i++)
{
for(j=1;j<M-1;j++)
map[1][i][j]=overmap[i][j];
delay(5000);
show();
}
}
/*****************/
void add()
{
int i;
map[1][bady[0][0]+dirx][bady[0][1]+diry]=1;
for(i=score;i>0;i--)
{
bady[i][0]=bady[i-1][0];
bady[i][1]=bady[i-1][1];
}
bady[0][0]+=dirx;
bady[0][1]+=diry;
score++;
level=(score-3)/5;
}
/********************/
void showscore()
{
char s[20],l[20];
itoa(score-3,s,10);
itoa(level,l,10);
setcolor(4);
outtextxy(X+SX-55,Y+SY1+4,"SCORE");
edge(X+SX-1,Y+SY1-1,X+SX+51,Y+SY1+16,DC,LC);
outtextxy(X+SX-55,Y+SY2+4,"LEVEL");
edge(X+SX-1,Y+SY2-1,X+SX+51,Y+SY2+16,DC,LC);
putimage(X+SX,Y+SY1,sim,0);
putimage(X+SX,Y+SY2,sim,0);
outtextxy(X+SX+1,Y+SY1+4,s);
outtextxy(X+SX+1,Y+SY2+4,l);
}
/*******************/
main()
{
int i,j;
char cc,c;
init();
start:
cc=getkey();
for(;cc!='p'&&cc!='P';)
{
rand();
if(cc==27)goto end;
cc=getkey();
}
new();
show();
showscore();
for(;;)
{
for(i=0,cc=0;i<1500-level*50;i++)
{
c=getkey();
if(c!=0)
cc=c;
delay(10);
}
switch(cc)
{
case 27: over();
goto end;
break;
case 'w':
case 'W':
if(dirx!=1)
{
dirx=-1;
diry=0;
}
break;
case 'a':
case 'A':
if(diry!=1)
{
diry=-1;
dirx=0;
}
break;
case 's':
case 'S':
if(dirx!=-1)
{
dirx=1;
diry=0;
}
break;
case 'd':
case 'D':
if(diry!=-1)
{
diry=1;
dirx=0;
}
break;
case ' ':
break;
case 'p':
case 'P':
cc=getkey();
for(;cc!='p'&&cc!='P';)
{
if(cc==27)goto end;
cc=getkey();
}
break;
default:break;
}/*end switch*/
switch(map[1][bady[0][0]+dirx][bady[0][1]+diry])
{
case 1:
over();
goto start;
case 2:
add();
showscore();
newk();
break;
case 0:
go();
break;
default:break;
}
show();
}
end:
close();
}
正文
TC2.0环境下的贪食蛇!!2004-12-24 17:15:00
【评论】 【打印】 【字体:大 中 小】 本文链接:http://blog.pfan.cn/book/34.html
阅读(3329) | 评论(0)
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!
评论