如何用原生 JS,快速寫一個貪吃蛇小游戲
前言
貪吃蛇算是小游戲里面比較好寫的,沒有什么難點,基本上需要實現(xiàn)的功能,都能很順利的用代碼敲出來。
1、繪制游戲區(qū)域和游戲元素
仍然是用 16 * 16 的二維數(shù)組來繪制,對這個數(shù)組進行遍歷。第一層遍歷的時候創(chuàng)建 tr,第二層遍歷的時候創(chuàng)建 td。然后添加一些 CSS 樣式,游戲區(qū)域就寫好了。
CSS&HTML:
游戲元素的話一共有 3 個,蛇頭,身體和蘋果。就用 3 個構(gòu)造函數(shù)來生成坐標(biāo),以及給對應(yīng)坐標(biāo)的那個對象里面添加不同的屬性。用構(gòu)造函數(shù)寫既方便查找,也方便修改。然后寫個渲染函數(shù),格子里面對應(yīng)的不同的屬性,就渲染出不同的樣式。
2、移動功能
移動功能要分兩個步驟來寫。一個是蛇頭的移動,一個是身體的移動。貪吃蛇的身體它不是一個整理,是不能寫成一塊的。蛇頭動的時候,身體它得扭來扭去,這才像個蛇。
蛇頭移動很簡單,上下左右鍵對應(yīng)著蛇頭 X 和 Y 兩個值的加減。X 和 Y 超出范圍,代碼就會報錯。就可以直接用 try catch 來判斷邊界。報錯了就說明出界了,直接走 catch 的游戲結(jié)束。
注意: 這個游戲唯一麻煩一點的地方來了,怎么讓蛇身體能扭起來。相通一個邏輯,這個問題就迎刃而解了。
蛇身體怎么移動,是身體里的每個元素都往前移動一格嗎,顯然不是。仔細觀察你會發(fā)現(xiàn),蛇移動時,身體的中間部分其實是不動的。動的只有最前端和最末端的兩格。也就是說蛇移動時,其實就是把身體最末端的格子移動到了身體最前端,其他的都不需要動。前面聲明的身體元素數(shù)組就是這個時候用的。把身體的最后一個元素移動到頭部,同時數(shù)組里的最后一個元素也要移動到最前面去。
3、寫鍵盤事件
寫鍵盤事件的時候要加一個判斷,讓這個蛇只能夠相對它自身左右移動。不能掉頭,也不能向前沖,向前沖很容易就撞到墻了。
4、吃蘋果功能
吃蘋果功能分為 3 個步驟
1.判斷頭部和蘋果有沒有重合,重合的話,就讓這個蘋果消失,讓分數(shù) +1。
2.生成隨機坐標(biāo)來渲染蘋果,判斷一下這個坐標(biāo)上是否與蛇身體重合了,重合的話就要重新生成坐標(biāo)。
3.生成一個新的身體實例,并且把這個新實例添加到身體數(shù)組中。
5、頭部碰到身體游戲失敗的功能
和吃蘋果的邏輯一樣,就判斷頭部和身體是不是重合的。
6、自動移動的功能
自動移動可以通過間歇函數(shù)來實現(xiàn),然后不能單純的在間歇函數(shù)的回調(diào)里面寫上下左右的某一個,要判斷一下蛇當(dāng)前的移動方向是什么。然后來一個分數(shù)越高速度越快的功能。
7、暫停功能和判斷游戲勝利
這兩個比較簡單,就一起說了。暫停功能就是讓定時器停止,并且讓flag變量變?yōu)閒alse。這樣就不能再去控制蛇了。這個游戲一共有256個格子,勝利的條件就是身體有255個元素,因為要減去一個頭部。
寫在最后
游戲到這里就寫完了,代碼雖然看起來多,但是并沒有什么難的地方,想到就能寫。唯一麻煩一點的就是那個身體的移動,相通了就很簡單了。