【C++记 #1】贪吃蛇
一、写在前面
贪吃蛇作为一个经典游戏,数十年来不知有多少人写了多少版本了,最近甚至发现有 十几行实现 游戏的,所以寻思着也来写一个。之所以写了两篇Python转来写C++,一方面是用不着Python强大的库,另一方面也是因为C++语法比较熟一些,写起来更顺畅。
这次的贪吃蛇没有参考任何网上的思路代码,写到最后发现居然有300行,某些方面确实有些冗余的部分。虽然过程颇为曲折,遭遇了很多bug,但是成就感完全不输于用Python实现一些强大的功能。
我的代码实现:
效果:
二、思路
- 用Node类代表蛇的每一节,以链表方式存储蛇身。以table储存最后输出的内容。
- 在Snake类中定义蛇的转弯,延长、奖励球等功能,并在每次修改蛇身的同时修改table。
- 本次精髓在于 无阻塞输入 ,下面提到。
三、精髓——关于无阻塞输入
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();