【C++记 #1】贪吃蛇

一、写在前面

贪吃蛇作为一个经典游戏,数十年来不知有多少人写了多少版本了,最近甚至发现有 十几行实现 游戏的,所以寻思着也来写一个。之所以写了两篇Python转来写C++,一方面是用不着Python强大的库,另一方面也是因为C++语法比较熟一些,写起来更顺畅。

这次的贪吃蛇没有参考任何网上的思路代码,写到最后发现居然有300行,某些方面确实有些冗余的部分。虽然过程颇为曲折,遭遇了很多bug,但是成就感完全不输于用Python实现一些强大的功能。

我的代码实现:

效果:

二、思路

  1. 用Node类代表蛇的每一节,以链表方式存储蛇身。以table储存最后输出的内容。
  2. 在Snake类中定义蛇的转弯,延长、奖励球等功能,并在每次修改蛇身的同时修改table。
  3. 本次精髓在于 无阻塞输入 ,下面提到。

三、精髓——关于无阻塞输入

while (flag) {
        is_getch = false;
        dir = snake.get_forward_dir();
        time = clock();
        while (clock() - time <= (clock_t)PAUSE) {
            if (!is_getch && _kbhit()) {
                _getch();
                int in = _getch();