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