求大家帮助 帮我改改程序
本人超级新手找了一个程序 应用起来和自己预期的结果差好多
希望高手在给我写一下注释 说实话看不太明白 由于老师要求在code blocks下写的 求高手指正 拜谢!!!!!
程序代码:#include <stdio.h>
#include <conio2.h>
#include <conio.c>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
#include <dos.h>
#define CIMA 72
#define BAIXO 80
#define ESQ 75
#define DIR 77
#define QUAD 42
#define PAUSA 32
void limpa();
void limpa_corpo();
void guarda_corpo();
void gameover();
void bordas();
void captura();
void fill();
void comida();
void cobra();
int main();
short int seta, seta2=0, x=40, y=12, x1=40, y1=12, pontos=-10, p=0, j=0;
short int tam=1, corpo[200][2], corpo_clean[200][2], velo_x, velo_y, aux;
void declara()
{
seta2=0; x=40; y=12; x1=40; y1=12; pontos=-10; p=0; j=0; tam=1;
}
void limpa()
{
if(j==1)
{
gotoxy(corpo_clean[p][0], corpo_clean[p][1]);
cprintf(" ");
corpo_clean[p][0]=corpo_clean[p][1]=0;
}
}
void limpa_corpo()
{
register short int i;
j=1;
p=0;
for(i=0; i<tam; i++)
{
corpo_clean[i][0]=corpo[i][0];
corpo_clean[i][1]=corpo[i][1];
}
fill();
}
void guarda_corpo()
{
corpo[p][0]=x;
corpo[p][1]=y;
}
void gameover()
{
clrscr();
gotoxy(36,14);
textcolor(LIGHTRED);
cprintf("GAME OVER");
gotoxy(31,24);
textcolor(YELLOW);
cprintf("Press ENTER to close");
gotoxy(31,5);
cprintf("You've done %d points",pontos);
end:
seta=getch();
if(seta==13)
{
clrscr();
exit(0);
}
else goto end;
}
void bordas()
{
short int i;
for(i=2;i<=24;i++)
{
textcolor(LIGHTRED);
gotoxy(2,i);
printf("%c",219);
gotoxy(79,i);
printf("%c",219);
}
for(i=2;i<=79;i++)
{
textcolor(LIGHTRED);
gotoxy(i,2);
printf("%c",219);
gotoxy(i,24);
printf("%c",219);
}
}
void captura()
{
register short int i;
if(x1==x && y1==y)
{
textcolor(WHITE);
tam++;
pontos+=10;
gotoxy(60,24);
printf(" ");
gotoxy(60,24);
printf("score: %5.d",pontos);
if(pontos>0)
comida();
}
if(j==1)
{
for(i=0;i<=tam;i++)
{
if(corpo[i][0]==x && corpo[i][1]==y)
gameover();
else if(corpo_clean[i][0]==x && corpo_clean[i][1]==y)
gameover();
}
}
}
void fill()
{
register short int i;
for(i=0;i<200;i++)
corpo[i][0]=corpo[i][1]=0;
}
void comida()
{
register short int i;
comida:
srand(time(NULL));
x1=rand()%76+3;
y1=rand()%20+4;
for(i=0;i<200;i++)
{
if(corpo[i][0]==x1 && corpo[i][1]==y1)
{
if(x1<77&&y1<23)
{
x1++;
y1++;
}
else goto comida;
}
else if(corpo_clean[i][0]==x1&&corpo_clean[i][1]==y1)
{
if(x1<77&&y1<23)
{
x1++;
y1++;
}
else goto comida;
}
else if(x1==x||y1==y)
{
if(x1<77&&y1<23)
{
x1++;
y1++;
}
else goto comida;
}
}
gotoxy(x1,y1);
textcolor(LIGHTGREEN);
printf("%c",219);
textcolor(YELLOW);
}
void cobra()
{
register short int i;
while(seta!=13)
{
if(kbhit())
{
seta=getch();
movimento:
switch(seta)
{
case CIMA:
if(seta2==BAIXO) goto baixo;
else seta2=seta;
cima:
if(p==tam) limpa_corpo();
guarda_corpo();
gotoxy(x,--y);
printf("%c",QUAD);
limpa();
p++;
captura();
if(y==2) gameover();
Sleep(velo_y);
break;
case BAIXO:
if(seta2==CIMA) goto cima;
else seta2=seta;
baixo:
if(p==tam) limpa_corpo();
guarda_corpo();
gotoxy(x,++y);
printf("%c",QUAD);
limpa();
p++;
captura();
if(y==24) gameover();
Sleep(velo_y);
break;
case DIR:
if(seta2==ESQ) goto esq;
else seta=seta2;
dir:
if(p==tam) limpa_corpo();
guarda_corpo();
gotoxy(++x,y);
printf("%c",QUAD);
limpa();
p++;
captura();
if(x==79) gameover();
Sleep(velo_x);
break;
case ESQ:
if(seta2==DIR) goto dir;
else seta2=seta;
esq:
if(p==tam) limpa_corpo();
guarda_corpo();
gotoxy(--x,y);
printf("%c",QUAD);
limpa();
p++;
captura();
if(x==2) gameover();
Sleep(velo_x);
break;
case PAUSA:
seta=getch();
break;
}
}
else goto movimento;
}
clrscr();
}
int main()
{
short int i;
clrscr();
textcolor(YELLOW);
gotoxy(28,11);
cprintf("Choose the speed (1-5)");
gotoxy(40,13);
scanf("%d",&i);
clrscr();
switch(i)
{
case 1:velo_x=100; velo_y=140; break;
case 2:velo_x=86; velo_y=125; break;
case 3:velo_x=70; velo_y=95; break;
case 4:velo_x=55; velo_y=80; break;
case 5:velo_x=40; velo_y=65; break;
}
fill();
bordas();
captura();
seta=getch();
comida();
cobra();
return 0;
}









