通過Blockly Games 的一系列小游戲,我們對Blockly語言有了基礎(chǔ)的了解并掌握了一些技巧。掌握好Blockly語言可以幫助我們更好地使用APP Invertor編寫手機程序。本期我們開始Blockly Games的最后一關(guān)池塘和它的前置關(guān)卡池塘導(dǎo)師,學(xué)習(xí)如何控制自己的小鴨子打敗池塘里的其他對手(如圖1)。
搜索“少兒編程教程網(wǎng)”找到“Blockly游戲”(https://blockly-games.kidscoding8.com/blockly-games
/zh-hans/index.html?lang=zh-hans),可以開始Blockly Games之旅。
池塘導(dǎo)師這一關(guān)與以前的迷宮、烏龜相比,在使用積木編程后還添加了必須使用JavaScript編程完成相似任務(wù),這樣我們在學(xué)習(xí)圖形化編程的同時還接觸到了JavaScript。
在前幾關(guān)中我們學(xué)會使用“cannon(大炮)”命令控制小鴨發(fā)射炮彈,第一個參數(shù)是角度,第二個參數(shù)是射程;使用while(true)開始循環(huán),直到消滅敵人;使用scan(角度),讓黃色小鴨掃描該角度上目標(biāo)的距離并自動調(diào)整射程;使用swim(角度),設(shè)定小鴨的運動方向。
第8關(guān)
編寫一行代碼就可以過關(guān):
swim(275)
第9關(guān)
游戲提示不能用撞擊的方式過關(guān)。需要小鴨游一段距離后再停下射擊敵人。Loc_x()代表小鴨的水平位置,我們讓小鴨位置x小于23之前向0度方向移動。停下后正常發(fā)射炮彈直到擊敗敵人為止(如圖2)。
第10關(guān)
當(dāng)目標(biāo)被攻擊時它會逃跑直到右上角為止,且炮彈最大射程是70。所以我們必須讓小鴨一遍游泳一邊攻擊。
我們用while(true)開始循環(huán),當(dāng)Y坐標(biāo)(X坐標(biāo)也可)小于50的時候(30~99都可以,都在射程范圍內(nèi)),向45°方向跟隨敵人一起游動,游動到設(shè)定位置后停下。朝向45°方向射擊并且用掃描scan(45)控制射程,直到消滅敵人為止(如圖3)。
池塘關(guān)卡
在池塘中你將同時面對3個不同策略的對手(如圖1),雖然敵人強大但你也擁有最大的自由,設(shè)計自己的搜尋和攻擊策略,消滅所有敵人吧。下面的代碼只是我自己的搜尋和攻擊策略,無法完美地通關(guān),僅供參考。為了完成搜尋周圍360度的敵人,使用了Math.random()產(chǎn)生隨機數(shù),當(dāng)然也可以用循環(huán)完成360度的掃描。
建立變量r0為搜索角度,r1為移動方向,s1為射程。
讓r0在360度范圍內(nèi)隨機搜索,發(fā)現(xiàn)敵人就可以展開進(jìn)攻。也可改為0到360度循環(huán)掃描搜索。
當(dāng)s1小于70,即射程內(nèi)有敵人時開火,無敵人時繼續(xù)向r1方向運動。
自定義的搜索積木達(dá)到的效果是小鴨移動到池塘邊緣時轉(zhuǎn)90度方向繼續(xù)前進(jìn)。
具體程序如圖4。