記一次項目思路設計過程(附貪喫蛇設計初稿)

  要做出一個項目,在打代碼之前,要做的就是設計項目的實現原理。但是在白天,因爲各種各樣瑣碎的事情影響,可能無法集中精力思考。所以,在晚上睡覺的時候,就可以思考這個項目的實現原理。

  在思考過程中,一個又一個的問題會冒出來然後被解決,一個又一個的bug也會隨之而來隨後被解決。

  在一開始的時候,可以思考一些基礎功能(如初始化、單獨每個組件實現功能)該如何實現;然後可以思考該功能實現過程中可能會出現的問題,該如何處理這個問題(最好立刻解決,暫時想不到可以先做個標記);最後再思考將這些基礎功能結合在一起,會有什麼衝突、可能會出現什麼bug,然後嘗試將這些bug解決掉。

  下面附上貪喫蛇設計思路的初稿及思考過程分析的圖片。

  如上圖,我先思考了貪喫蛇界面如何初始化的問題,然後思考貪喫蛇(組件)是如何實現起功能(移動)的,然後我就想到可以蛇身不動,蛇頭向前延伸(將前方空白化爲自身),蛇尾則不停將自己擦除。

  但此時問題出現了:蛇頭的移動是會變換方向的,所以蛇身會變得彎彎曲曲,蛇尾總不能一直往一個方向擦除自身吧?該如何跟上蛇身的方向呢?我想到了第一個解決方法:無視一切,直接將四周全部擦除不就好了嗎,反正空白處擦除也是空白(不變),只有蛇身擦除纔會消失(變化)。(此時沒有想到蛇尾雖然自爆式擦除,但是座標的變化依然要跟上蛇身的方向的)。

  但是在後續的思考中,我發現自爆式擦除不行,因爲並不是整張圖都是空白的,食物、牆壁也不是空白的,會被擦除。當蛇尾路過牆壁、食物時,會把他們也擦除掉。於是我改進了一下方法:自爆式擦除前先判斷字符內容,不是蛇身內容(@)不管它,是蛇身內容才擦除。

  “解決完”這個問題後,我開始思考每次前進前應該做什麼時(各類事件的優先級)。於是列出了圖中5的判斷順序。


  後來我又重新思考了一下延時、如何循環移動等問題,所以又重新寫了一下貪喫蛇每一次前進的過程。然後在寫到蛇尾的擦除時終於想到了蛇尾依然需要跟上蛇身才能持續擦除,還有自爆式擦除要求蛇尾的座標是在顯示出來的的“蛇尾”後一格的空白處,可能導致蛇尾跑出圖(數組)外。所以先做了個記號。後來在思考後做出了第7點的改進。

   一個項目的完成是伴隨着很多的問題的,在設計思路時多一點思考,就能提前將這些問題扼殺在打代碼前,這樣到時候的就不會忙着找代碼、改代碼了。而這僅僅佔用了你用來入眠前的那段空閒時間而已,何樂而不爲呢?(不過要慎重使用,越想越興奮可能會導致失眠)。

  好了,不說了,我要去修改設計思路了。因爲在打這篇文章的過程中我又發現了一個致命的問題:蛇尾擦除蛇身並向蛇身前進的一種特殊情況!!(如下圖)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章