鱼C论坛

 找回密码
 立即注册
查看: 412|回复: 0

[技术交流] 新手写的贪吃蛇

[复制链接]
发表于 2021-4-29 20:57:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
以下代码包含的头文件conio.h只能在windows系统下编译运行!!!
  1. //??????
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <windows.h>
  6. #include <conio.h>
  7. #include <time.h>

  8. //??????
  9. #define MAX 32

  10. //??????
  11. char a[20][51] = {"################################################",
  12.                   "#                                              #",
  13.                   "#                                              #",
  14.                   "#                                              #",
  15.                   "#                                              #",
  16.                   "#                                              #",
  17.                   "#                                              #",
  18.                   "#                                              #",
  19.                   "#                                              #",
  20.                   "#                                              #",
  21.                   "#                                              #",
  22.                   "#                                              #",
  23.                   "#                                              #",
  24.                   "#                                              #",
  25.                   "#                                              #",
  26.                   "#                                              #",
  27.                   "#                                              #",
  28.                   "#                                              #",
  29.                   "#                                              #",
  30.                   "################################################"};
  31. int game_s_long = 4;

  32. //??
  33. struct Body
  34. {
  35.     int x;
  36.     int y;
  37. } body[999];

  38. struct Head
  39. {
  40.     int x;
  41.     int y;
  42.     char turn;
  43. } head;

  44. struct Food
  45. {
  46.     int x;
  47.     int y;
  48. } food;

  49. //??????
  50. void game_s_put(void)
  51. {
  52.     system("cls");
  53.     for (int i = 0; i < 20; i++)
  54.     {
  55.         puts(a[i]);
  56.     }
  57.     printf("score:%d\n", game_s_long);
  58. }
  59. void game_s_start(void)
  60. {
  61.     a[10][24] = '@';

  62.     for (int i = 1; i < 5; i++)
  63.     {
  64.         a[10 + i][24] = 'O';
  65.     }
  66.     head.x = 10, head.y = 24;
  67.     body[0].x = 11, body[0].y = 24;
  68.     body[1].x = 12, body[1].y = 24;
  69.     body[2].x = 13, body[2].y = 24;
  70.     body[3].x = 14, body[3].y = 24;
  71.     head.turn = 'w';
  72. }

  73. int game_s_move(void)
  74. {
  75.     int x1 = 0, x2 = 0, y1 = 0, y2 = 0, i = 0;
  76.     if (head.turn == 'w')
  77.     {
  78.         if (a[head.x - 1][head.y] == 'O' || a[head.x - 1][head.y] == '#')
  79.         {
  80.             return 0;
  81.         }
  82.     }
  83.     if (head.turn == 's')
  84.     {
  85.         if (a[head.x + 1][head.y] == 'O' || a[head.x + 1][head.y] == '#')
  86.         {
  87.             return 0;
  88.         }
  89.     }
  90.     if (head.turn == 'a')
  91.     {
  92.         if (a[head.x][head.y - 1] == 'O' || a[head.x][head.y - 1] == '#')
  93.         {
  94.             return 0;
  95.         }
  96.     }
  97.     if (head.turn == 'd')
  98.     {
  99.         if (a[head.x][head.y + 1] == 'O' || a[head.x][head.y + 1] == '#')
  100.         {
  101.             return 0;
  102.         }
  103.     }
  104.     switch (head.turn)
  105.     {
  106.     case 'w':
  107.         if (head.turn != 's')
  108.         {
  109.             x1 = head.x;
  110.             y1 = head.y;
  111.             head.x--;
  112.             for (i = 0; i < game_s_long; i += 2)
  113.             {
  114.                 x2 = body[i].x;
  115.                 y2 = body[i].y;
  116.                 body[i].x = x1;
  117.                 body[i].y = y1;
  118.                 if (game_s_long - i == 1)
  119.                 {
  120.                     break;
  121.                 }
  122.                 x1 = body[i + 1].x;
  123.                 y1 = body[i + 1].y;
  124.                 body[i + 1].x = x2;
  125.                 body[i + 1].y = y2;
  126.             }
  127.             body[i + 1].x = x2;
  128.             body[i + 1].y = y2;
  129.         }
  130.         break;
  131.     case 's':
  132.         if (head.turn != 'w')
  133.         {
  134.             x1 = head.x;
  135.             y1 = head.y;
  136.             head.x++;
  137.             for (i = 0; i < game_s_long; i += 2)
  138.             {
  139.                 x2 = body[i].x;
  140.                 y2 = body[i].y;
  141.                 body[i].x = x1;
  142.                 body[i].y = y1;
  143.                 if (game_s_long - i == 1)
  144.                 {
  145.                     break;
  146.                 }
  147.                 x1 = body[i + 1].x;
  148.                 y1 = body[i + 1].y;
  149.                 body[i + 1].x = x2;
  150.                 body[i + 1].y = y2;
  151.             }
  152.             body[i + 1].x = x2;
  153.             body[i + 1].y = y2;
  154.         }
  155.         break;
  156.     case 'a':
  157.         if (head.turn != 'd')
  158.         {
  159.             x1 = head.x;
  160.             y1 = head.y;
  161.             head.y--;
  162.             for (i = 0; i < game_s_long; i += 2)
  163.             {
  164.                 x2 = body[i].x;
  165.                 y2 = body[i].y;
  166.                 body[i].x = x1;
  167.                 body[i].y = y1;
  168.                 if (game_s_long - i == 1)
  169.                 {
  170.                     break;
  171.                 }
  172.                 x1 = body[i + 1].x;
  173.                 y1 = body[i + 1].y;
  174.                 body[i + 1].x = x2;
  175.                 body[i + 1].y = y2;
  176.             }
  177.         }
  178.         body[i + 1].x = x2;
  179.         body[i + 1].y = y2;
  180.         break;
  181.     case 'd':
  182.         if (head.turn != 'a')
  183.         {
  184.             x1 = head.x;
  185.             y1 = head.y;
  186.             head.y++;
  187.             for (i = 0; i < game_s_long; i += 2)
  188.             {
  189.                 x2 = body[i].x;
  190.                 y2 = body[i].y;
  191.                 body[i].x = x1;
  192.                 body[i].y = y1;
  193.                 if (game_s_long - i == 1)
  194.                 {
  195.                     break;
  196.                 }
  197.                 x1 = body[i + 1].x;
  198.                 y1 = body[i + 1].y;
  199.                 body[i + 1].x = x2;
  200.                 body[i + 1].y = y2;
  201.             }
  202.         }
  203.         body[i + 1].x = x2;
  204.         body[i + 1].y = y2;
  205.         break;
  206.     }
  207. }

  208. void game_s_get(void)
  209. {
  210.     if (kbhit())
  211.     {
  212.         head.turn = getch();
  213.     }
  214. }

  215. void game_s_release(void)
  216. {
  217.     strcpy(a[0], "##################################################");
  218.     strcpy(a[1], "#                                                #");
  219.     strcpy(a[2], "#                                                #");
  220.     strcpy(a[3], "#                                                #");
  221.     strcpy(a[4], "#                                                #");
  222.     strcpy(a[5], "#                                                #");
  223.     strcpy(a[6], "#                                                #");
  224.     strcpy(a[7], "#                                                #");
  225.     strcpy(a[8], "#                                                #");
  226.     strcpy(a[9], "#                                                #");
  227.     strcpy(a[10], "#                                                #");
  228.     strcpy(a[11], "#                                                #");
  229.     strcpy(a[12], "#                                                #");
  230.     strcpy(a[13], "#                                                #");
  231.     strcpy(a[14], "#                                                #");
  232.     strcpy(a[15], "#                                                #");
  233.     strcpy(a[16], "#                                                #");
  234.     strcpy(a[17], "#                                                #");
  235.     strcpy(a[18], "#                                                #");
  236.     strcpy(a[19], "##################################################");
  237.     a[head.x][head.y] = '@';
  238.     if (food.x != '\0' && food.y != '\0')
  239.     {
  240.         a[food.x][food.y] = '*';
  241.     }
  242.     for (int i = 0; i < game_s_long; i++)
  243.     {
  244.         a[body[i].x][body[i].y] = 'O';
  245.     }
  246. }

  247. void game_s_food(void)
  248. {
  249.     int x, y;
  250.     time_t t;
  251.     while(1)
  252.     {
  253.     srand((unsigned)time(&t));
  254.     x = rand() % 20;
  255.     srand((unsigned)time(&t));
  256.     y = rand() % 50;
  257.     if (a[x][y] != '#' && a[x][y] != 'O' && a[x][y] != '@')
  258.     {
  259.         food.x = x;
  260.         food.y = y;
  261.         break;
  262.     }
  263.     }
  264. }

  265. int game_s_eat(void)
  266. {
  267.     if (head.turn == 'w')
  268.     {
  269.         if (a[head.x - 1][head.y] == '*')
  270.         {
  271.             food.x = '\0';
  272.             food.y = '\0';
  273.             game_s_long++;
  274.             return 1;
  275.         }
  276.     }
  277.     if (head.turn == 's')
  278.     {
  279.         if (a[head.x + 1][head.y] == '*')
  280.         {
  281.             food.x = '\0';
  282.             food.y = '\0';
  283.             game_s_long++;
  284.             return 1;
  285.         }
  286.     }
  287.     if (head.turn == 'a')
  288.     {
  289.         if (a[head.x][head.y - 1] == '*')
  290.         {
  291.             food.x = '\0';
  292.             food.y = '\0';
  293.             game_s_long++;
  294.             return 1;
  295.         }
  296.     }
  297.     if (head.turn == 'd')
  298.     {
  299.         if (a[head.x][head.y + 1] == '*')
  300.         {
  301.             food.x = '\0';
  302.             food.y = '\0';
  303.             game_s_long++;
  304.             return 1;
  305.         }
  306.     }
  307.     return 0;
  308. }

  309. void game_s(void)
  310. {
  311.     char ch;
  312.     int q,p;
  313.     game_s_food();
  314.     game_s_start();
  315.     while (1)
  316.     {
  317.         game_s_get();
  318.         q = game_s_move();
  319.         if (!q)
  320.         {
  321.             exit(0);
  322.         }
  323.         p=game_s_eat();
  324.         if(p)
  325.         {
  326.             game_s_food();
  327.         }
  328.         game_s_release();
  329.         game_s_put();
  330.         Sleep(250);
  331.     }
  332. }

  333. //??????
  334. int main(void)
  335. {
  336.     game_s();
  337.     return 0;
  338. }
复制代码

不喜勿喷
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-29 16:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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