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