可自定义蛇尾数量贪吃蛇
本帖最后由 sdnyzjzx 于 2011-1-4 21:02 编辑学习汇编暂告一个段落了,学习了模块化编程的思想,重新写一遍贪吃蛇。代码中定义了变量Q记录蛇的尾巴数量,加入了Game Over ! 的检查,感觉比原来有所提高,贴出来请大家指点!int i,k,step;
int i,k,step;
int q=5;
int x,y;
_show(int *x,int *y)
{
step++;
gotoxy(10,2);
printf("X:%2dY:%2d",*(x+q+1),*(y+q+1));
gotoxy(70,2);
printf("Step:%d",step);
gotoxy(*x,*y); /* 去除尾部最后一节*/
printf(" ");
for(i=1;i<=q;i++) /* 显示尾部*/
{
gotoxy(*(x+i),*(y+i));
printf("*");
}
gotoxy(*(x+i),*(y+i)); /* 显示头部*/
printf("%c",1);
gotoxy(*(x+i),*(y+i)); /* 光标回到头部 */
}
_change(int *x,int *y)
{
for(i=0;i<=q;i++)
{
*(x+i)=*(x+i+1);
*(y+i)=*(y+i+1);
}
}
_check(int *x,int *y)
{
for(i=1;i<=q;i++)
{
if(*(x+i)==*(x+q+1) && *(y+i)==*(y+q+1))
{
k=0;
break;
}
else
{
k=1;
}
}
return k;
}
_help()
{
clrscr();
_lunkuo();
gotoxy(25,10);
printf("UP -- W");
gotoxy(25,12);
printf("DOWN-- S");
gotoxy(25,14);
printf("LEFT-- A");
gotoxy(25,16);
printf("RIGHT -- D");
gotoxy(21,20);
printf("Press any key return ...");
getch();
return;
}
_lunkuo()
{
gotoxy(10,23);
printf("Esc -- exit");
gotoxy(40,23);
printf("F1 -- Help");
gotoxy(3,3);
for(i=1;i<=76;i++)
{
printf("-");
}
for(i=1;i<=19;i++)
{
gotoxy(3,i+3);
printf("|");
}
gotoxy(3,22);
for(i=1;i<=76;i++)
{
printf("-");
}
for(i=1;i<19;i++)
{
gotoxy(78,i+3);
printf("|");
}
}
main()
{
char c;
_star:
clrscr();
printf("\nPlease input the number of snake tail:");
scanf("%d",&q);
_t:
clrscr();
step=-1;
_lunkuo();
*x=*y=20; /* 初始化蛇的位置 */
for(i=1;i<=q;i++)
{
*(x+i)=*x;
*(y+i)=*y-i;
}
*(x+q+1)=*(x+q);
*(y+q+1)=*(y+q)-1;
_show(x,y);
while(q)
{
c=getch();
if( *(x+q+1) >3 && *(x+q+1) < 78 && *(y+q+1) >3 && *(y+q+1) < 22)
{
_check(x,y);
if(k==0)
{
goto _over;
}
else if(c==0x77) /* up*/
{
_change(x,y);
*(x+q+1)=*(x+q);
*(y+q+1)=*(y+q)-1;
_show(x,y);
}
else if(c==0x73) /* down */
{
_change(x,y);
*(x+q+1)=*(x+q);
*(y+q+1)=*(y+q)+1;
_show(x,y);
}
else if(c==0x61) /*left */
{
_change(x,y);
*(x+q+1)=*(x+q)-1;
*(y+q+1)=*(y+q);
_show(x,y);
}
else if(c==0x64) /*right */
{
_change(x,y);
*(x+q+1)=*(x+q)+1;
*(y+q+1)=*(y+q);
_show(x,y);
}
else if(c==0x3b) /* Help*/
{
_help();
goto _t;
}
else if(c==0x1b) /* Quit */
{
break;
}
}
else
{
goto _over;
}
}
_over:
clrscr();
_lunkuo();
gotoxy(30,13);
printf("Game Over !");
getch();
gotoxy(26,16);
printf("Do you want to try again (y/n)?");
c=getch();
printf("%c",c);
if(c=='y'||c=='Y')
{
goto _star;
}
else
{
c=getch();;
}
clrscr();
printf("\n======Thank you ! Welcom to try again ! Bye ...======");
}
挺有意思
有函数调用,也有用goto到标号的。。
用标号很有汇编的感觉,整个程序感觉用汇编的思维在写。。呵呵 有待完善 等学完C了 可以再次优化下 有待完善 等学完C了 可以再次优化下 /:good
不错,学习了
页:
[1]