如何通过block语言编程游戏的最后一关?

var cs 1 = 0;

var cs2 = 180;

while(true){

var random = math . random()* 360;

移动(随机);

关(随机);

}

函数移动(随机){

游泳(cs 1);

}

功能关闭(随机){

if(scan(cs1,20)& lt;=70){

if(scan(cs2,20)& lt;=70){

cs2 = cs 1-15;

大炮(cs1-5,扫描(cs1-10,10))

}否则{

cs 1+= 5;

cs2 = cs 1-15;

大炮(cs1-5,扫描(cs1-10,10))

}

}else if(scan(cs2,20)& lt;=70){

cs 1-= 5;

cs2 = cs 1-15;

大炮(cs1-5,扫描(cs1-10,10))

}否则{

cs 1+= 20;

}

}

————————————————

版权声明:本文为CSDN博主“猫不哭”原创文章,遵循CC 4.0 BY-SA版权协议。转载请附上原出处链接和本声明。

原始链接:

/*狙击手*/

/*策略:由于扫描整个战场可以在90内完成*/

/*度,从一个角落,狙击手可以快速扫描领域。*/

/*外部变量,可由任何函数使用*/

var角= 0;/*当前角0,1,2或2 */

var sc = 0;/*当前扫描开始*/

var范围;/*到目标的距离*/

/*初始化拐角信息*/

/*拐角的x和y位置,以及开始扫描的角度*/

var c1x = 2,c1y = 2,s 1 = 0;

var c2x = 2,c2y = 98,s2 = 270

var c3x = 98,c3y = 98,S3 = 180;

var c4x = 98,c4y = 2,s4 = 90

var closest =无穷大;

new _ corner();/*从任意角落开始*/

var d = damage();/*获得当前伤害*/

var dir = sc/*开始扫描方向*/

while (true) { /*循环永远执行*/

while(dir & lt;sc + 90) { /*扫描90度范围*/

range = scan(dir,2);/*看一个方向*/

if(范围& lt= 70) {

while(range & gt;0) { /*在射程内保持射击*/

最近=范围;/*设置最近标志*/

加农炮(dir,range);/*火!*/

range = scan(dir,1);/*再次检查目标*/

if(d+15 & gt;伤害())/*持续数击,*/

范围= 0;/*转到新角落*/

}

dir-= 10;/*备份扫描,以防*/

}

dir+= 2;/*增量扫描*/

如果(d!= damage()) { /*检查发生的损坏*/

new _ corner();/*我们被击中了,马上行动*/

d =损害();

dir = sc

}

}

if (closest == Infinity) { /*检查范围内的任何目标*/

new _ corner();/*无,移动到新的角落*/

d =损害();

dir = sc

} else { /*目标在范围内,resume */

dir = sc

}

最近=无穷大;

}

/*移动到不同角落的新角落功能*/

函数new_corner() {

var x,y;

var rand = math . floor(math . random()* 4);/*随机选择一个角落*/

if (rand == corner) /*但使其不同于*/

角=(rand+1)% 4;/*当前角*/

其他

角=兰特;

if (corner == 0) { /*设置新的x,y和扫描开始*/

x = c 1x;

y = c 1y;

sc = s 1;

}

if (corner == 1) {

x = c2x

y = c2y

sc = s2

}

if (corner == 2) {

x = c3x

y = c3y

sc = s3

}

if (corner == 3) {

x = c4x

y = c4y

sc = s4

}

/*找到我们需要到达目标角落的方向*/

var angle = plot_course(x,y);

/*全速启动传动系统*/

/*继续行驶,直到我们到达15米以内*/

/*检查速度,以防我们撞到墙壁、其他机器人*/

/*不太好,因为我们在移动的时候什么都不做*/

while (distance(getX(),getY(),x,y)& gt;15)

驱动(角度,100);

/*降低速度,慢慢走完剩下的路*/

while (distance(getX(),getY(),x,y)& gt;1)

驱动(角度,20°);

/*停止驾驶,在剩余的路程中应该滑行*/

驱动(角度,0°);

}/* new _ corner的结尾*/

/*经典勾股距离公式*/

功能距离(x1,y1,x2,y2) {

var x = x 1-x2;

var y = y 1-y2;

返回math . sqrt((x * x)+(y * y));

}

/*绘制航向函数,返回角度航向到*/

/*到达目的地x,y;使用atan()触发函数*/

函数plot_course(xx,yy) {

var d;

var x,y;

var curx,cury

curx = getX();/*获取当前位置*/

cury = getY();

x = curx-xx;

y = cury-YY;

/* atan只返回-90到+90,所以弄清楚如何使用*/

/* atan()值*/

如果(x == 0) { /* x是零,我们或者向北或者向南移动*/

如果(yy & gtcury)

d = 90/*北方*/

其他

d = 270/*南方*/

}否则{

如果(yy & ltcury) {

if(xx & gt;curx)

d = 360+math . atan _ deg(y/x);/*东南方向,象限4 */

其他

d = 180+math . atan _ deg(y/x);/*西南,象限3 */

}否则{

if(xx & gt;curx)

d = math . atan _ deg(y/x);/*东北,象限1 */

其他

d = 180+math . atan _ deg(y/x);/*西北,象限2 */

}

}

返回d;

}

/*兔子*/

//兔子绕场跑,随机,从不开火;用作靶子。

/* go -转到指定点*/

函数go(目标x,目标y) {

var course = plot_course(dest_x,dest _ y);

while (distance(getX(),getY(),dest_x,dest _ y)& gt;5) {

开车(当然,25);

}

while(speed()>;0) {

开车(当然,0);

}

}

/*距离公式。*/

功能距离(x1,y1,x2,y2) {

var x = x 1-x2;

var y = y 1-y2;

返回math . sqrt((x * x)+(y * y));

}

/* plot_course -弄清楚该朝哪个方向走。*/

函数plot_course(xx,yy) {

var d;

var curx = getX();

var cury = getY();

var x = curx-xx;

var y = cury-YY;

if (x == 0) {

如果(yy & gtcury) {

d = 90

}否则{

d = 270

}

}否则{

如果(yy & ltcury) {

if(xx & gt;curx) {

d = 360+math . atan _ deg(y/x);

}否则{

d = 180+math . atan _ deg(y/x);

}

}否则{

if(xx & gt;curx) {

d = math . atan _ deg(y/x);

}否则{

d = 180+math . atan _ deg(y/x);

}

}

}

返回d;

}

while (true) {

//去外地某个地方。

var x = math . random()* 100;

var y = math . random()* 100;

go(x,y);

}

/*计数器*/

/*逆时针方向扫描(递增度数)*/

/*点击时移动*/

var范围;

var last _ dir = 0;

var RES = 2;

var d = damage();

var angle = math . random()* 360;

while (true) {

而((range = scan(angle,res))!=无穷大){

if(range & gt;70) { /*超出范围,朝它开*/

驱动(角度,50°);

var I = 1;

while(i++ & lt;50) /*使用计数器限制移动时间*/

驱动(角度,0°);

如果(d!= damage()) {

d =损害();

run();

}

角度-= 3°;

}否则{

而(!加农炮(角度,射程))

如果(d!= damage()) {

d =损害();

run();

}

角度-= 15;

}

}

如果(d!= damage()) {

d =损害();

run();

}

角度+=分辨率;

角度% = 360°;

}

/* run绕场中心移动*/

函数运行(){

var I = 0;

var x = getX();

var y = getY();

if (last_dir == 0) {

last _ dir = 1;

如果(y & gt51) {

驱动(270,100);

while(y-10 & lt;getY()& amp;& ampi++ & lt;50)

驱动(270,0);

}否则{

驱动(90,100);

while(y+10 & gt;getY()& amp;& ampi++ & lt;50)

驱动(90,0);

}

}否则{

last _ dir = 0;

if(x & gt;51) {

驱动(180,100);

while(x-10 & lt;getX()& amp;& ampi++ & lt;50)

驱动(180,0);

}否则{

驱动(0,100);

while(x+10 & gt;getX()& amp;& ampi++ & lt;50)

drive(0,0);

}

}

}

/* rook.r -像车一样扫描战场,即只有0,90,180,270 */

/*仅水平移动,但看起来水平和垂直*/

/*移到棋盘中央*/

if(getY()& lt;50) {

while(getY()& lt;40) /*在中心附近停止*/

驱动(90,100);/*开始移动*/

}否则{

while(getY()& gt;60) /*在中心附近停止*/

驱动(270,100);/*开始移动*/

}

drive(0,0);

while(speed()>;0)

/*初始化起始参数*/

var d = damage();

var课程= 0;

var边界= 99;

开车(当然,30);

/*主循环*/

while(true) {

/*东张西望*/

看(0);

看(90);

看(180);

看(270);

/*如果接近战场终点,改变方向*/

if (course == 0) {

if(getX()& gt;边界||速度()== 0)

change();

}

否则{

if(getX()& lt;边界||速度()== 0)

change();

}

}

/*找个地方,对射程内的目标反复开炮*/

功能外观(度){

var范围;

while ((range = scan(deg,4))& lt;= 70) {

开车(当然,0);

大炮(度数,射程);

如果(d + 20!= damage()) {

d =损害();

change();

}

}

}

函数变化(){

if (course == 0) {

边界= 1;

课程= 180;

}否则{

边界= 99;

课程= 0;

}

开车(当然,30);

}

var west = false

while (true) {

x();

deg();

}

函数x(){

for(var I = 0;我& lt= 360;i += 20){

if(scan(i,20)& lt;= 70){

cannon(i,scan(i,20));

}

}

}

函数deg(){

如果(西方){

if(getX()& gt;25) {

游泳(180,100);

}否则{

西=假;

游泳(0,0);

}

}否则{

if(getX()& lt;75) {

游(0,100);

}否则{

west = true

游泳(0,0);

}

}

}