如何通过block语言编程游戏的最后一关?
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);
}
}
}