不知所措
刚拿到这个题目脑中就是一片空白,随之而来的是一堆疑问奔涌而出,以至于不知道该从哪个问题开始思考。冷静下来之后我发现所有问题之中最致命的是如何让编译器连续输出每一帧以形成动画的感觉,对我来说这属于超出知识范畴的硬伤,所以我迫不及待的打开百度查找答案,但看了各种眼花缭乱的操作之后还是一头雾水。在发了许久的懵后猛然醒悟,遇到这种复杂的问题应该要有意识的按照“自顶向下,逐步求精”的基本法思考问题而不是想一出是一出。
逐渐清晰
首先将程序目的大致分为几个步骤来实现:
- 显示背景图,蛇,食物
- 让蛇随着玩家键入的方向键移动
若蛇吃到食物则加长一节,若蛇碰到墙或自己则GAMEOVER。
在完成上述三个步骤的基本思后考再加入优化游戏体验的人性化设计,一个大致的框架就形成了。接下来只要按照这个框架逐步求精就OK了。
将每个功能都封装进函数让思路更清晰。
void begin();
//登陆界面,大概介绍一下游戏规则以及操作方法。
void setfoodcrd();
// 随机设置食物要出现的坐标,在相应的坐标画出食物(注意不与边框或蛇重合,当食物被吃掉后才能再生产)。
void setsnakecrd();
//初始蛇要出现的坐标,在相应的坐标画出蛇。
void show();
//显示出游戏画面。
void changeskdir();
//接受玩家键入的方向键并改变蛇的移动方向(注意蛇默认向前走,键入相反方向是不合法的)。
void snakemove();
// 移动蛇,实际就是改变蛇各节的坐标。
void judge();
//若蛇吃到食物蛇身加长;若蛇碰到自己或墙显示GAMEOVER。
将一个大问题分解成这样一个个的小问题后,用代码解决就是水到渠成的事情了。(具体的代码实现在下一篇)这样我们就完成了每一帧的设计,当然你还可以补充更多的细节来提高游戏体验。只要不断的清屏加循环一条简易的贪吃蛇就会活灵活现地出现在你屏幕上哦~