[原创] 也来谈谈经典游戏贪吃蛇的简易设计思路

发表于

注:原创方案,如有雷同纯属巧合.

本人对图形系统并不感冒.不喜欢也不会设计图形.所以本文介绍的也只会有简单的界面.

突然有了一些灵感,所以就把它记录下来,并尝试用代码来实现它.

当然了它不是拿来玩的而是用于学习,呵呵.

程序不使用图形系统,所以界面当然是比较粗糙了(看后面的截图).

目前使用的是WIN-TC,有空再试试把它弄成GRUB4DOS的外部命令,嘻嘻,让GRUB4DOS也有游戏程序.

  1. 使用环形链表设计蛇的身体.
     struct snakes
      {
           int pos; //节点在屏幕上的位置
           struct snakes *up; //上一个节点指针.(第一个链表指向最后一个,形成循环)
      };
     struct snakes *snake_head;//指向当前蛇头的链表.snake_head->up 就是蛇尾.
    
  2. 蛇的移动处理.
    由于使用了环形的链表,像车轮一样走,只要把最后一个链表作为蛇头就可以了.
    实际操作过程.

    1. 首先确位移动的位置
    2. 在屏幕上清除当前蛇尾的显示.
    3. 修改蛇尾的POS为新的位置,并显示.
    4. 把蛇尾作为新的蛇头.snake_head = snake_head->up;

    这里还有一个需要注意处理的:
    根据按键处理移动时不可以反方向移动.也就是说不可以直接后退.

  3. 碰壁或者蛇头碰到蛇身就算失败.
    处理方法:
    墙壁可以随便使用表格线划出来,蛇可移动的区域全部放空白.

    只要判断前面不是食物也不是空白,就算Game Over了.

    部份代码:
    以下是使用直接写屏的方法处理vga指向显存的指针(short类型).

     while(delay())
    
     {
         //处理按键和移动方向的代码.
    
         if (vga[pos] == FOOD)
         {
             //如果是食物就在蛇头上添加一个节点.并继续.
             continue;
         }
         else if ((char)(vga[pos] & 0xff) != 0x20)
         {//如果该地方不是空白的就结束游戏.
             break;
         }
         snake_head = snake_head->up;//使当前的蛇尾作为蛇头进入下一个顺环
         vga[snake_head->pos] = 0x720;//清除蛇尾的显示(显示一个黑色空格);
         snake_head->pos = pos;//新的屏幕位置
         vga[snake_head->pos] = SNAKE;//画新的蛇头;
    
     }
    
  4. 食物放置,这个就没有什么可说的了,使用一个随机数放置FOOD.并且不能放在蛇的身上.

  5. 其它细节,像分数系统.都是差不多的比较简单这里就不介绍了.

新的截图:(HOH,有兴趣可以下载玩玩看,看看你能挺多久.)

WIN下可玩,用DOS效果会比较好(可以试试DOSBOX)

希望本站内容对您有点用处,有什么疑问或建议请在后面留言评论
若无特别注明,本站内容均属原创,转载请注明作者(chenall)和出处 chenall's Blog ,请勿用于任何商业用途