飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3930|回复: 4

[C/C++] 可自定义蛇尾数量贪吃蛇

[复制链接]
  • TA的每日心情
    开心
    2024-3-7 15:25
  • 签到天数: 442 天

    [LV.9]以坛为家II

    发表于 2011-1-4 20:47:17 | 显示全部楼层 |阅读模式
    本帖最后由 sdnyzjzx 于 2011-1-4 21:02 编辑

    学习汇编暂告一个段落了,学习了模块化编程的思想,重新写一遍贪吃蛇。代码中定义了变量Q记录蛇的尾巴数量,加入了Game Over ! 的检查,感觉比原来有所提高,贴出来请大家指点!
    1. int i,k,step;
    2. [code]int i,k,step;
    3. int q=5;
    4. int x[100],y[100];

    5. _show(int *x,int *y)
    6. {
    7. step++;
    8. gotoxy(10,2);
    9. printf("X:%2d  Y:%2d",*(x+q+1),*(y+q+1));

    10. gotoxy(70,2);
    11. printf("Step:%d",step);
    12.         
    13.         gotoxy(*x,*y);          /* 去除尾部最后一节  */
    14.         printf(" ");

    15.         for(i=1;i<=q;i++)        /* 显示尾部  */
    16.         {
    17.         gotoxy(*(x+i),*(y+i));
    18.         printf("*");
    19.         }

    20.         gotoxy(*(x+i),*(y+i));        /* 显示头部  */
    21.         printf("%c",1);

    22.         gotoxy(*(x+i),*(y+i));        /* 光标回到头部 */
    23. }

    24. _change(int *x,int *y)
    25. {
    26.         for(i=0;i<=q;i++)
    27.         {
    28.         *(x+i)=*(x+i+1);
    29.         *(y+i)=*(y+i+1);
    30.         }
    31. }

    32. _check(int *x,int *y)
    33. {
    34.         for(i=1;i<=q;i++)
    35.         {
    36.                 if(*(x+i)==*(x+q+1) && *(y+i)==*(y+q+1))
    37.                 {
    38.                 k=0;
    39.                 break;
    40.                 }
    41.                 else
    42.                 {
    43.                 k=1;
    44.                 }
    45.         }
    46.         return k;
    47. }

    48. _help()
    49. {
    50. clrscr();
    51. _lunkuo();
    52. gotoxy(25,10);
    53. printf("UP    --   W");
    54. gotoxy(25,12);
    55. printf("DOWN  --   S");
    56. gotoxy(25,14);
    57. printf("LEFT  --   A");
    58. gotoxy(25,16);
    59. printf("RIGHT --   D");
    60. gotoxy(21,20);
    61. printf("Press any key return ...");
    62. getch();
    63. return;
    64. }

    65. _lunkuo()
    66. {
    67. gotoxy(10,23);
    68. printf("Esc -- exit");

    69. gotoxy(40,23);
    70. printf("F1 -- Help");

    71. gotoxy(3,3);
    72. for(i=1;i<=76;i++)
    73. {
    74. printf("-");
    75. }

    76. for(i=1;i<=19;i++)
    77. {
    78. gotoxy(3,i+3);
    79. printf("|");
    80. }

    81. gotoxy(3,22);
    82. for(i=1;i<=76;i++)
    83. {
    84. printf("-");
    85. }

    86. for(i=1;i<19;i++)
    87. {
    88. gotoxy(78,i+3);
    89. printf("|");
    90. }

    91. }

    92. main()
    93. {
    94. char c;

    95. _star:       
    96. clrscr();
    97. printf("\nPlease input the number of snake tail:");
    98. scanf("%d",&q);

    99. _t:
    100. clrscr();
    101. step=-1;
    102. _lunkuo();
    103.         *x=*y=20;                /* 初始化蛇的位置 */
    104.         for(i=1;i<=q;i++)
    105.         {
    106.         *(x+i)=*x;
    107.         *(y+i)=*y-i;
    108.         }
    109.         *(x+q+1)=*(x+q);
    110.         *(y+q+1)=*(y+q)-1;
    111.         _show(x,y);

    112.   while(q)
    113.   {
    114.      c=getch();
    115.         if( *(x+q+1) >3 && *(x+q+1) < 78 && *(y+q+1) >3 && *(y+q+1) < 22)  
    116.         {
    117.                 _check(x,y);
    118.                 if(k==0)
    119.                 {
    120.                 goto _over;
    121.                 }
    122.                 else if(c==0x77)              /* up  */
    123.                 {
    124.                 _change(x,y);
    125.                 *(x+q+1)=*(x+q);
    126.                 *(y+q+1)=*(y+q)-1;
    127.                 _show(x,y);
    128.                 }
    129.                 else if(c==0x73)        /* down */
    130.                 {
    131.                 _change(x,y);
    132.                 *(x+q+1)=*(x+q);
    133.                 *(y+q+1)=*(y+q)+1;
    134.                 _show(x,y);
    135.                 }
    136.                 else if(c==0x61)               /*  left */
    137.                 {
    138.                 _change(x,y);
    139.                 *(x+q+1)=*(x+q)-1;
    140.                 *(y+q+1)=*(y+q);
    141.                 _show(x,y);
    142.                 }
    143.                 else if(c==0x64)              /*  right */
    144.                 {
    145.                 _change(x,y);
    146.                 *(x+q+1)=*(x+q)+1;
    147.                 *(y+q+1)=*(y+q);
    148.                 _show(x,y);
    149.                 }
    150.                 else if(c==0x3b)        /* Help  */
    151.                 {
    152.                 _help();
    153.                 goto _t;
    154.                 }
    155.                 else if(c==0x1b)        /* Quit */
    156.                 {
    157.                 break;
    158.                 }
    159.              }
    160.             else
    161.              {
    162.              goto _over;
    163.         }
    164.   }
    165. _over:
    166.         clrscr();
    167.         _lunkuo();
    168.         gotoxy(30,13);
    169.              printf("Game Over !");
    170.             getch();
    171.         gotoxy(26,16);
    172.         printf("Do you want to try again (y/n)?");
    173.         c=getch();
    174.         printf("%c",c);
    175.         if(c=='y'||c=='Y')
    176.         {
    177.         goto _star;
    178.         }
    179.         else
    180.         {
    181.         c=getch();;
    182.         }
    183. clrscr();
    184. printf("\n======Thank you ! Welcom to try again ! Bye ...======");
    185. }
    复制代码
    tcs2.rar (1.13 KB, 下载次数: 7)
    tcs2.jpg
    tcs.jpg

    tcs2.rar

    1.13 KB, 下载次数: 12, 下载积分: 飘云币 -2 枚

    Game Over 更新

    评分

    参与人数 1威望 +4 收起 理由
    ngm20 + 4

    查看全部评分

    PYG19周年生日快乐!

    该用户从未签到

    发表于 2011-1-6 09:58:42 | 显示全部楼层
    挺有意思
    有函数调用,也有用goto到标号的。。
    用标号很有汇编的感觉,整个程序感觉用汇编的思维在写。。呵呵 
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2011-1-6 10:51:20 | 显示全部楼层
    有待完善 等学完C了 可以再次优化下
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2011-1-6 10:51:23 | 显示全部楼层
    有待完善 等学完C了 可以再次优化下
    PYG19周年生日快乐!
  • TA的每日心情

    14 小时前
  • 签到天数: 2172 天

    [LV.Master]伴坛终老

    发表于 2011-1-8 20:16:39 | 显示全部楼层
    /:good
    不错,学习了
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表