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