- UID
- 65892
注册时间2010-3-1
阅读权限50
最后登录1970-1-1
感悟天道
TA的每日心情 | 慵懒 2024-12-4 10:07 |
---|
签到天数: 444 天 [LV.9]以坛为家II
|
本帖最后由 sdnyzjzx 于 2011-1-4 21:02 编辑
学习汇编暂告一个段落了,学习了模块化编程的思想,重新写一遍贪吃蛇。代码中定义了变量Q记录蛇的尾巴数量,加入了Game Over ! 的检查,感觉比原来有所提高,贴出来请大家指点!- int i,k,step;
- [code]int i,k,step;
- int q=5;
- int x[100],y[100];
- _show(int *x,int *y)
- {
- step++;
- gotoxy(10,2);
- printf("X:%2d Y:%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 ...======");
- }
复制代码
tcs2.rar
(1.13 KB, 下载次数: 7)
|
-
-
-
tcs2.rar
1.13 KB, 下载次数: 12, 下载积分: 飘云币 -2 枚
Game Over 更新
评分
-
查看全部评分
|