记一次项目思路设计过程(附贪吃蛇设计初稿)

  要做出一个项目,在打代码之前,要做的就是设计项目的实现原理。但是在白天,因为各种各样琐碎的事情影响,可能无法集中精力思考。所以,在晚上睡觉的时候,就可以思考这个项目的实现原理。

  在思考过程中,一个又一个的问题会冒出来然后被解决,一个又一个的bug也会随之而来随后被解决。

  在一开始的时候,可以思考一些基础功能(如初始化、单独每个组件实现功能)该如何实现;然后可以思考该功能实现过程中可能会出现的问题,该如何处理这个问题(最好立刻解决,暂时想不到可以先做个标记);最后再思考将这些基础功能结合在一起,会有什么冲突、可能会出现什么bug,然后尝试将这些bug解决掉。

  下面附上贪吃蛇设计思路的初稿及思考过程分析的图片。

  如上图,我先思考了贪吃蛇界面如何初始化的问题,然后思考贪吃蛇(组件)是如何实现起功能(移动)的,然后我就想到可以蛇身不动,蛇头向前延伸(将前方空白化为自身),蛇尾则不停将自己擦除。

  但此时问题出现了:蛇头的移动是会变换方向的,所以蛇身会变得弯弯曲曲,蛇尾总不能一直往一个方向擦除自身吧?该如何跟上蛇身的方向呢?我想到了第一个解决方法:无视一切,直接将四周全部擦除不就好了吗,反正空白处擦除也是空白(不变),只有蛇身擦除才会消失(变化)。(此时没有想到蛇尾虽然自爆式擦除,但是坐标的变化依然要跟上蛇身的方向的)。

  但是在后续的思考中,我发现自爆式擦除不行,因为并不是整张图都是空白的,食物、墙壁也不是空白的,会被擦除。当蛇尾路过墙壁、食物时,会把他们也擦除掉。于是我改进了一下方法:自爆式擦除前先判断字符内容,不是蛇身内容(@)不管它,是蛇身内容才擦除。

  “解决完”这个问题后,我开始思考每次前进前应该做什么时(各类事件的优先级)。于是列出了图中5的判断顺序。


  后来我又重新思考了一下延时、如何循环移动等问题,所以又重新写了一下贪吃蛇每一次前进的过程。然后在写到蛇尾的擦除时终于想到了蛇尾依然需要跟上蛇身才能持续擦除,还有自爆式擦除要求蛇尾的坐标是在显示出来的的“蛇尾”后一格的空白处,可能导致蛇尾跑出图(数组)外。所以先做了个记号。后来在思考后做出了第7点的改进。

   一个项目的完成是伴随着很多的问题的,在设计思路时多一点思考,就能提前将这些问题扼杀在打代码前,这样到时候的就不会忙着找代码、改代码了。而这仅仅占用了你用来入眠前的那段空闲时间而已,何乐而不为呢?(不过要慎重使用,越想越兴奋可能会导致失眠)。

  好了,不说了,我要去修改设计思路了。因为在打这篇文章的过程中我又发现了一个致命的问题:蛇尾擦除蛇身并向蛇身前进的一种特殊情况!!(如下图)


猜你喜欢

转载自blog.csdn.net/a120k96/article/details/80619265