監(jiān)聽(tīng)左右上下移動(dòng)代碼
這個(gè)版本的暫時(shí)沒(méi)有做手機(jī)端的,只做了pc端,后續(xù)會(huì)優(yōu)化

主要解釋向左移動(dòng):
首先就遇到一個(gè)能否左移動(dòng)的問(wèn)題,向左移動(dòng),就從第一行開(kāi)始循環(huán),循環(huán)到最后一行,在這個(gè)循環(huán)內(nèi)部,因?yàn)槭窍蜃笠苿?dòng),所以最左邊的那一列是不參與判斷的,所以列數(shù)從1開(kāi)始循環(huán),截止第3列。如果當(dāng)前這個(gè)格的數(shù)值如果是0就進(jìn)行下一步循環(huán),如果不是0,就進(jìn)行判斷,看這格的數(shù)值與他左邊的那個(gè)數(shù)字是否相等 或者 他左邊的數(shù)字是否為0(因?yàn)樵诔绦蛑腥绻麨椋熬痛磉@一格為空)滿足條件就跳出循環(huán)直接返回true. 如果循環(huán)完全結(jié)束沒(méi)有符合條件的就返回 false

向左移動(dòng)正式函數(shù):
再看moveLeft函數(shù),這一點(diǎn)有點(diǎn)繞,我想了很久明白了,根絕這個(gè)左移動(dòng)自然就不難寫出其他的移動(dòng)函數(shù),
左移動(dòng):
從第一行開(kāi)始循環(huán),循環(huán)內(nèi)部從
第二列開(kāi)始循環(huán),判斷這一格數(shù)字是否為0,如果為空則進(jìn)入下一列循環(huán),否則就從第一列到目前這列之間開(kāi)始循環(huán),由于行數(shù)是確定的是i行,這個(gè)循環(huán)里面我用k表示循環(huán)里的當(dāng)前列,如果當(dāng)前循環(huán)列這個(gè)格數(shù)字不為0,(這里外層有一個(gè)判斷條件即board[i][j] !== 0,這里一定要搞清楚不要混淆),同時(shí)還有一個(gè)條件就是i 行的 k 列和i列之間沒(méi)有障礙,這里通過(guò)一個(gè)函數(shù)來(lái)判斷,(k<j),只需循環(huán)這兩列之間的格格,只要這個(gè)循環(huán)的當(dāng)前值不登錄0說(shuō)明這兩列之間有障礙,返回false,否則返回 true,返回true時(shí)候就把board[i][k]=board[i][j]; 同時(shí)把board[i][j] =0;
如果當(dāng)前循環(huán)列這個(gè)數(shù)字與外層循環(huán)的那個(gè)格格相同的時(shí)候,并且這兩列之間沒(méi)有障礙物,數(shù)值就相加,即加倍

這里有一個(gè)函數(shù)用來(lái)判斷某行的某一列到另一列之間是否有空間(左移動(dòng)自然是水平方向)

從某一個(gè)位置到另一個(gè)位置做一個(gè)動(dòng)畫

其余的上,下,右移動(dòng)效果自然出現(xiàn)了