陳新龍
前不久,小編和我一起討論一套Scratch的試卷,兩人對一道基礎(chǔ)題“小貓躲蘋果”卻很久沒有想出正確的答案。
題目是這樣的:天上不停地掉蘋果,屏幕內(nèi)蘋果數(shù)要超過兩個(gè),小貓能自動(dòng)躲開。(如圖1)
這道題是試卷基礎(chǔ)題的第三題,理論上應(yīng)該是不會(huì)太難的。但是我們兩個(gè)人都把題目解法復(fù)雜化了,導(dǎo)致幾個(gè)小時(shí)也沒寫出合格的程序。題目要求隨機(jī)落下至少兩個(gè)蘋果,這一部分實(shí)現(xiàn)很簡單。因?yàn)樾∝埿枰獙μO果偵測,下落的蘋果不能用克隆。真正的難點(diǎn)在于自動(dòng)左右移動(dòng)躲避蘋果。
作為前車之鑒,說說我們的錯(cuò)誤思路吧。在做題目的時(shí)候一般先考慮從簡單情況開始,就先做了一個(gè)蘋果的隨機(jī)掉落,判斷如果“蘋果X坐標(biāo)-小貓X坐標(biāo)”的絕對值小于100時(shí)認(rèn)為蘋果會(huì)砸到小貓,小貓馬上移動(dòng)一段距離。躲避一個(gè)蘋果是成功的,但是第二個(gè)蘋果加進(jìn)去后需要判斷的情況一下多了起來,如果兩個(gè)蘋果剛剛好一左一右,那么小貓就可以移動(dòng)到兩個(gè)蘋果的中間;如果蘋果都在左邊,那么就移動(dòng)到右邊;如果蘋果都在右邊則移動(dòng)到左邊;但是遇到舞臺(tái)邊界該怎么計(jì)算,這樣復(fù)雜的條件判斷難免會(huì)出現(xiàn)問題,這還沒有考慮三個(gè)蘋果的情況。關(guān)鍵是這只是第三題,一套卷子只有三小時(shí)的答題時(shí)間,不該寫這么多復(fù)雜的語句。
我靜下心來推翻之前的思路從頭思考。在仔細(xì)梳理各個(gè)模塊的屬性后,注意到“到鼠標(biāo)指針的距離”這個(gè)模塊時(shí)恍然大悟,簡單的事情讓我倆想復(fù)雜了。
下面是程序代碼,代碼量確實(shí)很少。
兩個(gè)蘋果角色相同代碼:X坐標(biāo)取隨機(jī)數(shù),等待何時(shí)的時(shí)間后顯示,重復(fù)執(zhí)行下落。這里使用了循環(huán),用來控制蘋果掉落的位置和掉落的時(shí)間,這里提醒一下蘋果掉落了之后不要忘記還要再回到上面。(如圖2)
小貓代碼:循環(huán)判斷如果“小貓”到“蘋果1”距離小于100或到“蘋果2”距離小于100,那么隨機(jī)改變X坐標(biāo)的位置。雖然有可能移動(dòng)后還會(huì)碰到蘋果,但是因?yàn)槌绦驁?zhí)行足夠快,繼續(xù)換下一個(gè)X坐標(biāo)就可以了,人眼看不出來的。這里用到了偵測到其他角色的距離,加判斷語句,保證小貓附近有蘋果時(shí)會(huì)移動(dòng)。(如圖3)
回想起來,本來一道簡簡單單的題目被復(fù)雜化了。沒有能夠完全理解各種模塊的用法是這次問題的根源。
另外這次經(jīng)歷也提醒我,在解決問題時(shí),必須先仔細(xì)分析題目要求,構(gòu)造可行思路。遇到疑難時(shí)冷靜一下,有時(shí)也許還需要有推倒重來的勇氣。