Skip to content

Instantly share code, notes, and snippets.

@thuzhf
Last active April 15, 2016 07:47
Show Gist options
  • Save thuzhf/e9da4f8a704c413954c4 to your computer and use it in GitHub Desktop.
Save thuzhf/e9da4f8a704c413954c4 to your computer and use it in GitHub Desktop.
机器鱼协作过孔代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using xna = Microsoft.Xna.Framework;
using URWPGSim2D.Common;
using URWPGSim2D.StrategyLoader;
using URWPGSim2D.Core;
namespace URWPGSim2D.Strategy
{
public class Strategy : MarshalByRefObject, IStrategy
{
public string GetTeamName()
{
return "THU";
}
#region still fish0
private int stillState = 0;
private int stillState_up = 1;
#endregion
private int downState = 0;
private int upState = 0;
#region///定义
private Decision[] decisions;
private xna.Vector3 goalDest1;
private xna.Vector3 goalDest0;
private double r;
private double time;
private xna.Vector3 position1;
private xna.Vector3 position2;
private xna.Vector3 position3;
private xna.Vector3 position4;
private xna.Vector3 position5;
private xna.Vector3 position6;
private xna.Vector3 position7;
private xna.Vector3 position8;
private xna.Vector3 position9;
private xna.Vector3 position10;
private xna.Vector3 position11;
private xna.Vector3 finish_place1;
private xna.Vector3 finish_place2;
private xna.Vector3 finish_place3;
private xna.Vector3 finish_place4;
private xna.Vector3 finish_place5;
private xna.Vector3 finish_place6;
private xna.Vector3 finish_place7;
private xna.Vector3 finish_place8;
private xna.Vector3 finish_place9;
private xna.Vector3 finish_placeup;
private xna.Vector3 finish_placeright;
private xna.Vector3 finish_placep1;
private xna.Vector3 finish_placep2;
private xna.Vector3 finish_placep3;
private xna.Vector3 finish_placep4;
private xna.Vector3 finish_placep5;
private xna.Vector3 finish_placep6;
private xna.Vector3 finish_placep7;
private xna.Vector3 finish_placep8;
private xna.Vector3 finish_placep9;
private int fish1_still_flag;
private float pi = (float)3.1415926;
#endregion
public Strategy()
{
fish1_still_flag = 1;
this.decisions = null;
this.r = 58.0;
#region///给出所有坐标
this.position1 = new xna.Vector3(-680, 0, -750);//鱼到的位置
this.position2 = new xna.Vector3(0, 0, 750);
this.position3 = new xna.Vector3(680, 0, -750);
this.position4 = new xna.Vector3(1000, 0, 50);
this.position5 = new xna.Vector3(1150, 0, -750);
this.position6 = new xna.Vector3(300, 0, -750);
this.position7 = new xna.Vector3(550, 0, 900);
this.position8 = new xna.Vector3(-500, 0, 800);
this.position9 = new xna.Vector3(-200, 0, -850);
this.position10 = new xna.Vector3(-1100, 0, -600);
this.position11 = new xna.Vector3(-1000, 0, 100); //50
this.finish_place1 = new xna.Vector3(650, 0, -800);
this.finish_place2 = new xna.Vector3(0, 0, -600);
this.finish_place3 = new xna.Vector3(0, 0, 650);
this.finish_place4 = new xna.Vector3(-150, 0, 550);
this.finish_place5 = new xna.Vector3(-600, 0, 200);
this.finish_place6 = new xna.Vector3(-680, 0, -700);
this.finish_place7 = new xna.Vector3(-1400, 0, 0);
this.finish_place8 = new xna.Vector3(-1300, 0, -750);
this.finish_place9 = new xna.Vector3(450, 0, -800);
this.finish_placep1 = new xna.Vector3(670, 0, -750);
this.finish_placep2 = new xna.Vector3(670, 0, -800);
this.finish_placep3 = new xna.Vector3(0, 0, -700);
this.finish_placep4 = new xna.Vector3(0, 0, 800);
this.finish_placep5 = new xna.Vector3(0, 0, 660);
this.finish_placep6 = new xna.Vector3(-600, 0, 600); //(-600, 0, 400)
this.finish_placep7 = new xna.Vector3(-600, 0, 300);
this.finish_placep8 = new xna.Vector3(-600, 0, -100);
this.finish_placep9 = new xna.Vector3(-680, 0, -670);
#endregion
}
public void checkFish2FishCollision(xna.Vector3 fish1pos, xna.Vector3 fish2pos, int r, float fishrad, ref Decision decision)
{
double distance = Math.Pow(fish1pos.X - fish2pos.X, 2.0) + Math.Pow(fish1pos.Z - fish2pos.Z, 2.0);
r = 300;
if (2 * Math.Pow(r, 2.0) <= distance)
{
double reg = Math.Atan((fish1pos.Z - fish2pos.Z) / (fish1pos.X - fish2pos.X));
if (reg < 0 && reg >= -pi / 2 && fishrad < 0 && fishrad >= -pi / 2)
{
decision.VCode = 14;
decision.TCode = 2;
}
else if (reg < -pi / 2 && reg >= -pi && fishrad < -pi / 2 && fishrad >= -pi)
{
decision.VCode = 14;
decision.TCode = 12;
}
else if (reg >= 0 && reg < pi / 2 && fishrad >= 0 && fishrad < pi / 2)
{
decision.VCode = 1;
decision.TCode = 12;
}
else if (reg >= pi / 2 && reg <= pi && fishrad >= pi / 2 && fishrad <= pi)
{
decision.VCode = 1;
decision.TCode = 2;
}
}
}
public int CheckZone(xna.Vector3 pos)
{
float z1 = -600f - 58f;
float z2 = -600f;
float z3 = 600f + 58f;
float z4 = 600f;
if (pos.X >= 1320f)
{
return 0;
}
if (pos.X >= 750f && pos.X < 1320f && pos.Z >= z1)
{
return 1;
}
else if (pos.X >= 600f && pos.X < 750f && pos.Z >= z1 && pos.Z < z2)
{
return 10;
}
else if (pos.X >= 125f && pos.Z < z1)
{
return 2;
}
else if (pos.X >= 75f && pos.X < 125f && pos.Z < z2)
{
return 3;
}
else if (pos.X >= 125f && pos.X <= 600f && pos.Z >= z1 && pos.Z < z2)
{
return 4;
}
else if (pos.X >= 75f && pos.X <= 600f && pos.Z >= z2 && pos.Z < z3)
{
return 5;
}
else if (pos.X >= -75f && pos.X < 75f && pos.Z >= z4 && pos.Z < z3)
{
return 11;
}
else if (pos.X >= -75f && pos.X <= 600f && pos.Z >= z3)
{
return 6;
}
else if (pos.X >= -600f && pos.X <= -75f && pos.Z >= z4)
{
return 7;
}
else if (pos.X >= -600f && pos.X <= -75f && pos.Z >= z1 && pos.Z < z4)
{
return 8;
}
// else if (pos.X >= -600f && pos.X <= -75f && pos.Z >= z1 && pos.Z < z4)
// {
// return 9;
// }
else
{
return -1;
}
}
public Decision[] GetDecision(Mission mission, int teamId)
{
if (this.decisions == null)
{
this.decisions = new Decision[mission.CommonPara.FishCntPerTeam];
this.r = mission.EnvRef.Balls[0].RadiusMm;
}
#region///定义变量
xna.Vector3 fishPm0 = mission.TeamsRef[teamId].Fishes[0].PositionMm;
xna.Vector3 fishPm1 = mission.TeamsRef[teamId].Fishes[1].PositionMm;
xna.Vector3 ballsPm = mission.EnvRef.Balls[0].PositionMm;
RoboFish fish0 = mission.TeamsRef[teamId].Fishes[0];
RoboFish fish1 = mission.TeamsRef[teamId].Fishes[1];//定义
this.time = mission.CommonPara.RemainingCycles;
bool f01 = Convert.ToBoolean(mission.HtMissionVariables["IsCollidedBallAndFish0AtStage1"]);
bool f11 = Convert.ToBoolean(mission.HtMissionVariables["IsCollidedBallAndFish1AtStage1"]);
bool f02 = Convert.ToBoolean(mission.HtMissionVariables["IsCollidedBallAndFish0AtStage2"]);
bool f12 = Convert.ToBoolean(mission.HtMissionVariables["IsCollidedBallAndFish1AtStage2"]);
bool f03 = Convert.ToBoolean(mission.HtMissionVariables["IsCollidedBallAndFish0AtStage3"]);
bool f13 = Convert.ToBoolean(mission.HtMissionVariables["IsCollidedBallAndFish1AtStage3"]);
bool f04 = Convert.ToBoolean(mission.HtMissionVariables["IsCollidedBallAndFish0AtStage4"]);
bool f14 = Convert.ToBoolean(mission.HtMissionVariables["IsCollidedBallAndFish1AtStage4"]);
int no = Convert.ToInt32(mission.HtMissionVariables["ExecutingTaskNo"]);
// this.finish_place1 = new xna.Vector3((float)(ballsPm.X - this.r * (Math.Acos(Math.PI / 4))), 0, (float)(ballsPm.Z - this.r * (Math.Asin(Math.PI / 4))));
this.finish_placeup = new xna.Vector3((float)(ballsPm.X), 0, (float)(ballsPm.Z + this.r));//击球点在球上侧
this.finish_placeright = new xna.Vector3((float)(ballsPm.X - this.r), 0, (float)(ballsPm.Z - 20));//击球点在球右侧
// this.position11 = new xna.Vector3((float)(ballsPm.X + 1.5 * this.r), 0, ballsPm.Z);
int times = 10000;
#endregion///
//no = 2;
//f01 = true;
//f11 = true;
//f02 = true;
//f12 = true;
xna.Vector3 goalDest = new xna.Vector3();
float goalRad = 0;
#region 控制fish0
if ((no == 1))
{
if (f01 == false)
{
/*
if (fishPm0.X < -750)
{
actFast(0, position1, mission.TeamsRef[teamId].Fishes[0].PositionMm, mission.TeamsRef[teamId].Fishes[0].BodyDirectionRad);
// StrategyHelper.Helpers.PoseToPose(ref decisions[0], mission.TeamsRef[teamId].Fishes[0], position1, (float)Math.Atan((position1.Z - fishPm0.Z) / (position1.X - fishPm0.X)), 30.0f, 40, mission.CommonPara.MsPerCycle, ref times);
}
if (fishPm0.X > -750 && fishPm0.X < -30)
{
actFast(0, position2, mission.TeamsRef[teamId].Fishes[0].PositionMm, mission.TeamsRef[teamId].Fishes[0].BodyDirectionRad);
// StrategyHelper.Helpers.PoseToPose(ref decisions[0], mission.TeamsRef[teamId].Fishes[0], position2, (float)Math.Atan((position2.Z - fishPm0.Z) / (position2.X - fishPm0.X)), 30.0f, 40, mission.CommonPara.MsPerCycle, ref times);
}
if (fishPm0.X > -30 && fishPm0.X < 650)
{
actFast(0, position3, mission.TeamsRef[teamId].Fishes[0].PositionMm, mission.TeamsRef[teamId].Fishes[0].BodyDirectionRad);
// StrategyHelper.Helpers.PoseToPose(ref decisions[0], mission.TeamsRef[teamId].Fishes[0], position3, (float)Math.Atan((position3.Z - fishPm0.Z) / (position3.X - fishPm0.X)), 30.0f, 40, mission.CommonPara.MsPerCycle, ref times);
}*/
if (mission.TeamsRef[0].Fishes[0].PositionMm.X < -616 && mission.TeamsRef[0].Fishes[0].PositionMm.Z > -300)
{
//Console.WriteLine("stage 1");
//Console.WriteLine(mission.TeamsRef[0].Fishes[0].BodyDirectionRad);
if (mission.TeamsRef[0].Fishes[0].BodyDirectionRad > -1.5 && mission.TeamsRef[0].Fishes[0].BodyDirectionRad < 1.7)
{
decisions[0].TCode = 0;
decisions[0].VCode = 5;
//Console.WriteLine("turn left");
}
else if (mission.TeamsRef[0].Fishes[0].BodyDirectionRad >= 1.7 || mission.TeamsRef[0].Fishes[0].BodyDirectionRad < -1.9)
{
decisions[0].TCode = 14;
decisions[0].VCode = 5;
//Console.WriteLine("turn right");
}
else
{
//Console.WriteLine(mission.TeamsRef[0].Fishes[0].BodyDirectionRad);
//Console.WriteLine("go straight");
decisions[0].TCode = 7;
decisions[0].VCode = 14;
}
}
else if (mission.TeamsRef[0].Fishes[0].PositionMm.X < 0 && mission.TeamsRef[0].Fishes[0].PositionMm.X > -616 && mission.TeamsRef[0].Fishes[0].PositionMm.Z < -700 || mission.TeamsRef[0].Fishes[0].PositionMm.X < -616 && mission.TeamsRef[0].Fishes[0].PositionMm.Z < -300)
{
//Console.WriteLine("stage 2");
decisions[0].TCode = 14;
decisions[0].VCode = 8;
//Console.WriteLine("turn right");
}
else if (mission.TeamsRef[0].Fishes[0].PositionMm.X < 0 && mission.TeamsRef[0].Fishes[0].PositionMm.Z < 300)
{
//Console.WriteLine("stage 3");
//Console.WriteLine(mission.TeamsRef[0].Fishes[0].BodyDirectionRad);
if (mission.TeamsRef[0].Fishes[0].BodyDirectionRad > -1.7 && mission.TeamsRef[0].Fishes[0].BodyDirectionRad < 1.5)
{
decisions[0].TCode = 14;
decisions[0].VCode = 14;
//Console.WriteLine("turn right");
}
else if (mission.TeamsRef[0].Fishes[0].BodyDirectionRad > 1.9 || mission.TeamsRef[0].Fishes[0].BodyDirectionRad <= -1.7)
{
decisions[0].TCode = 0;
decisions[0].VCode = 14;
//Console.WriteLine("turn left");
}
else
{
//Console.WriteLine(mission.TeamsRef[0].Fishes[0].BodyDirectionRad);
//Console.WriteLine("go straight");
decisions[0].TCode = 7;
decisions[0].VCode = 14;
}
}
else if (mission.TeamsRef[0].Fishes[0].PositionMm.X > -616 && mission.TeamsRef[0].Fishes[0].PositionMm.X < 0 && mission.TeamsRef[0].Fishes[0].PositionMm.Z > 300 || mission.TeamsRef[0].Fishes[0].PositionMm.X > 0 && mission.TeamsRef[0].Fishes[0].PositionMm.X < 616 && mission.TeamsRef[0].Fishes[0].PositionMm.Z > 700)
{
//Console.WriteLine("stage 4");
decisions[0].TCode = 0;
decisions[0].VCode = 8;
//Console.WriteLine("turn left");
}
else if (mission.TeamsRef[0].Fishes[0].PositionMm.X < 616 && mission.TeamsRef[0].Fishes[0].PositionMm.Z > -300)
{
//Console.WriteLine("stage 5");
//Console.WriteLine(mission.TeamsRef[0].Fishes[0].BodyDirectionRad);
if (mission.TeamsRef[0].Fishes[0].BodyDirectionRad > -1.5 && mission.TeamsRef[0].Fishes[0].BodyDirectionRad < 1.5)
{
decisions[0].TCode = 0;
decisions[0].VCode = 14;
//Console.WriteLine("turn left");
}
else if (mission.TeamsRef[0].Fishes[0].BodyDirectionRad > 1.9 || mission.TeamsRef[0].Fishes[0].BodyDirectionRad < -1.9)
{
decisions[0].TCode = 14;
decisions[0].VCode = 14;
//Console.WriteLine("turn right");
}
else
{
//Console.WriteLine(mission.TeamsRef[0].Fishes[0].BodyDirectionRad);
decisions[0].TCode = 7;
decisions[0].VCode = 14;
//Console.WriteLine("go straight");
}
}
else if (mission.TeamsRef[0].Fishes[0].PositionMm.X > 0 && mission.TeamsRef[0].Fishes[0].PositionMm.X < 616 && mission.TeamsRef[0].Fishes[0].PositionMm.Z < -300 || mission.TeamsRef[0].Fishes[0].PositionMm.X > 616 && mission.TeamsRef[0].Fishes[0].PositionMm.Z < -700)
{
//Console.WriteLine("stage 6");
decisions[0].TCode = 14;
decisions[0].VCode = 8;
//Console.WriteLine("turn right");
}
else if (mission.TeamsRef[0].Fishes[0].PositionMm.Z < -500)
{
//Console.WriteLine("stage 7");
//Console.WriteLine(mission.TeamsRef[0].Fishes[0].BodyDirectionRad);
if (mission.TeamsRef[0].Fishes[0].BodyDirectionRad > -1.5 && mission.TeamsRef[0].Fishes[0].BodyDirectionRad < 1.5)
{
decisions[0].TCode = 14;
decisions[0].VCode = 14;
//Console.WriteLine("turn right");
}
else if (mission.TeamsRef[0].Fishes[0].BodyDirectionRad > 1.9 || mission.TeamsRef[0].Fishes[0].BodyDirectionRad < -1.9)
{
decisions[0].TCode = 0;
decisions[0].VCode = 14;
//Console.WriteLine("turn left");
}
else
{
//Console.WriteLine(mission.TeamsRef[0].Fishes[0].BodyDirectionRad);
decisions[0].TCode = 7;
decisions[0].VCode = 14;
//Console.WriteLine("go straight");
}
}
else if (mission.TeamsRef[0].Fishes[0].PositionMm.Z > -500 && mission.TeamsRef[0].Fishes[0].PositionMm.Z < 200)
{
//Console.WriteLine("state 8");
goalDest = new xna.Vector3(mission.EnvRef.Balls[0].PositionMm.X + 30, mission.EnvRef.Balls[0].PositionMm.Y, mission.EnvRef.Balls[0].PositionMm.Z);
goalRad = 1.5f;
times = 0;
StrategyHelper.Helpers.PoseToPose(ref decisions[0], mission.TeamsRef[teamId].Fishes[0], goalDest, goalRad, 30.0f, 10f, mission.CommonPara.MsPerCycle, ref times);
//StrategyHelper.Helpers.Dribble(ref decisions[0], mission.TeamsRef[teamId].Fishes[0], goalDest, goalRad, 5, 10, 150, 6, 4, 15, 100, true);
//Console.WriteLine("-------------------times--------------" + times);
decisions[1].VCode = 0;
decisions[1].TCode = 1;
}
if (fishPm0.X >= 650)
{
actFast(0, position4, mission.TeamsRef[teamId].Fishes[0].PositionMm, mission.TeamsRef[teamId].Fishes[0].BodyDirectionRad);
// StrategyHelper.Helpers.PoseToPose(ref decisions[0], mission.TeamsRef[teamId].Fishes[0], position4, (float)Math.Atan((position4.Z - fishPm0.Z) / (position4.X - fishPm0.X)), 30.0f, 40, mission.CommonPara.MsPerCycle, ref times);
if (fishPm0.Z > 40)
{
number_act(0, 3, fishPm0, ballsPm, fish0, finish_placeright);
}
}
}
else
{
number_act(0, 3, fishPm0, ballsPm, fish0, finish_placeright);
if (fishPm0.X > 1350)
{
this.decisions[0].TCode = 2;
this.decisions[0].VCode = 8;
}
if (ballsPm.X < 1250)
{
actFast(0, position3, mission.TeamsRef[teamId].Fishes[0].PositionMm, mission.TeamsRef[teamId].Fishes[0].BodyDirectionRad);
}
if (fishPm0.Z < -600)
{
// times = 100;
// StrategyHelper.Helpers.PoseToPose(ref decisions[0], mission.TeamsRef[teamId].Fishes[0], position6, (float)Math.Atan((position6.Z - fishPm0.Z) / (position6.X - fishPm0.X)), 30.0f, 40, mission.CommonPara.MsPerCycle, ref times);
//actSlow(0, position6, mission.TeamsRef[teamId].Fishes[0].PositionMm, mission.TeamsRef[teamId].Fishes[0].BodyDirectionRad);
//xna.Vector3 dest = new xna.Vector3(132, 0, -840);
//StrategyHelper.Helpers.Dribble(ref decisions[0], mission.TeamsRef[teamId].Fishes[0], dest, -90, 30, 14, 100, 6, 4, 15, 100, false);
if (stillState == 0)
stillState = 1;
}
if (stillState == 1)
{
xna.Vector3 dest = new xna.Vector3(130, 0, -700);
StrategyHelper.Helpers.Dribble(ref decisions[0], mission.TeamsRef[teamId].Fishes[0], dest, -90, 30, 14, 100, 6, 4, 15, 100, false);
if (fishPm0.X < 200)
{
stillState = 2;
}
}
if (stillState == 2)
{
this.decisions[0].TCode = 10;
this.decisions[0].VCode = 1;
if (fish0.BodyDirectionRad > (-Math.PI / 9 * 5) && fish0.BodyDirectionRad < (-Math.PI / 5 * 2))
{
this.decisions[0].TCode = 7;
this.decisions[0].VCode = 0;
stillState = 3;
}
}
if (stillState == 3)
{
this.decisions[0].TCode = 7;
this.decisions[0].VCode = 0;
if (stillState_up == 1)
{
if (fish0.PolygonVertices[0].Z > -920)
{
this.decisions[0].VCode = 3;
}
else
{
stillState_up = 0;
}
}
}
Console.WriteLine("DirRad: {0:f}", fish0.BodyDirectionRad);
Console.WriteLine("stillState: {0:d}", stillState);
/*
xna.Vector3 length1 = fishPm0 - position6;
if (fish0.BodyDirectionRad > (-Math.PI / 2) && fish0.BodyDirectionRad < (-Math.PI / 3) && fishPm0.X < 650 && length1.Length() < 100)
{
this.decisions[0].TCode = 7;
this.decisions[0].VCode = 0;
}
*/
}
}
if (no == 2)
{
if (fish0.BodyDirectionRad > (-Math.PI / 2) && fish0.BodyDirectionRad < (-Math.PI / 3))
{
this.decisions[0].TCode = 7;
this.decisions[0].VCode = 0;
}
if (fishPm0.Z > -650)
{
this.decisions[0].TCode = 7;
this.decisions[0].VCode = 3;
}
}
if (no == 3)
{
actFast(0, position7, mission.TeamsRef[teamId].Fishes[0].PositionMm, mission.TeamsRef[teamId].Fishes[0].BodyDirectionRad);
if (fishPm0.Z > 600 && fishPm0.X > 0)//使鱼静止
{
this.decisions[0].TCode = 9;
this.decisions[0].VCode = 1;
if (fish0.BodyDirectionRad > Math.PI / 2 && fish0.BodyDirectionRad < Math.PI)
{
this.decisions[0].TCode = 7;
this.decisions[0].VCode = 0;
}
}
if (ballsPm.Z < 350 && ballsPm.Z > -50)
{
actFast(0, position8, mission.TeamsRef[teamId].Fishes[0].PositionMm, mission.TeamsRef[teamId].Fishes[0].BodyDirectionRad);
}
if (fishPm0.Z > 600 && fishPm0.X < -100)//使鱼静止
{
this.decisions[0].TCode = 9;
this.decisions[0].VCode = 1;
if (fish0.BodyDirectionRad > 2.1 && fish0.BodyDirectionRad < 3.0)
{
this.decisions[0].TCode = 7;
this.decisions[0].VCode = 0;
}
}
if (ballsPm.Z < 0)
{
number_act(0, 5, fishPm0, ballsPm, fish0, finish_place6);
}
if (ballsPm.Z < -600)
{
number_act(0, 6, fishPm0, ballsPm, fish0, finish_place8);
}
}
if (no == 4)
{
// number_act(0, 6, fishPm0, ballsPm, fish0, finish_place8);
number_act(0, 3, fishPm0, ballsPm, fish0, finish_place7);
}
#endregion
#region 控制fish1
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//if (time > 5850)
//{
// this.decisions[1].TCode = 7;
// this.decisions[1].VCode = 0;
//}
fish1_still_flag = 0;
if (fish1_still_flag == 1)
{
this.decisions[1].TCode = 7;
this.decisions[1].VCode = 0;
if (fish0.PositionMm.X > -600)// && fish0.PositionMm.Z > -800)
{
fish1_still_flag = 0;
}
}
else
{
if (no == 1)
{
if (f11 == false)
{
/*
if (fishPm1.X < -750)
{
actFast(1, position1, mission.TeamsRef[teamId].Fishes[1].PositionMm, mission.TeamsRef[teamId].Fishes[1].BodyDirectionRad);
}
if (fishPm1.X > -750 && fishPm1.X < -30)
{
actFast(1, position2, mission.TeamsRef[teamId].Fishes[1].PositionMm, mission.TeamsRef[teamId].Fishes[1].BodyDirectionRad);
}
if (fishPm1.X > -30 && fishPm1.X < 650)
{
actFast(1, position3, mission.TeamsRef[teamId].Fishes[1].PositionMm, mission.TeamsRef[teamId].Fishes[1].BodyDirectionRad);
}*/
if (CheckZone(mission.TeamsRef[0].Fishes[1].PositionMm) == 1)
{
goalDest1 = new xna.Vector3(1000f, 0f, 700f);
StrategyHelper.Helpers.PoseToPose(ref decisions[1], mission.TeamsRef[teamId].Fishes[1], goalDest1, pi / 2, 30.0f, 150f, mission.CommonPara.MsPerCycle, ref times);
//StrategyHelper.Helpers.Dribble(ref decisions[1], mission.TeamsRef[teamId].Fishes[1], goalDest0, pi/2, 5, 10, 150f, 4, 6, 15, mission.CommonPara.MsPerCycle, false);
checkFish2FishCollision(mission.TeamsRef[teamId].Fishes[1].PositionMm, mission.TeamsRef[teamId].Fishes[0].PositionMm, mission.TeamsRef[teamId].Fishes[1].CollisionModelRadiusMm, mission.TeamsRef[teamId].Fishes[1].BodyDirectionRad, ref decisions[1]);
}
else
{
if (((mission.TeamsRef[0].Fishes[0].PositionMm.X - mission.TeamsRef[0].Fishes[1].PositionMm.X) * (mission.TeamsRef[0].Fishes[0].PositionMm.X - mission.TeamsRef[0].Fishes[1].PositionMm.X) + (mission.TeamsRef[0].Fishes[0].PositionMm.Z - mission.TeamsRef[0].Fishes[1].PositionMm.Z) * (mission.TeamsRef[0].Fishes[0].PositionMm.Z - mission.TeamsRef[0].Fishes[1].PositionMm.Z)) < 390 * 390)
{
//Console.WriteLine("Fish 2");
//Console.WriteLine((mission.TeamsRef[0].Fishes[0].PositionMm.X - mission.TeamsRef[0].Fishes[1].PositionMm.X) * (mission.TeamsRef[0].Fishes[0].PositionMm.X - mission.TeamsRef[0].Fishes[1].PositionMm.X) + (mission.TeamsRef[0].Fishes[0].PositionMm.Z - mission.TeamsRef[0].Fishes[1].PositionMm.Z) * (mission.TeamsRef[0].Fishes[0].PositionMm.Z - mission.TeamsRef[0].Fishes[1].PositionMm.Z));
decisions[1].TCode = 7;
decisions[1].VCode = 0;
}
else
{
//Console.WriteLine("Fish 2");
//Console.WriteLine(mission.TeamsRef[0].Fishes[1].PositionMm);
if (mission.TeamsRef[0].Fishes[1].PositionMm.X < -616 && mission.TeamsRef[0].Fishes[1].PositionMm.Z > -500)
{
//Console.WriteLine("stage 1");
//Console.WriteLine(mission.TeamsRef[0].Fishes[1].BodyDirectionRad);
if (mission.TeamsRef[0].Fishes[1].BodyDirectionRad > -1.5 && mission.TeamsRef[0].Fishes[1].BodyDirectionRad < 1.7)
{
decisions[1].TCode = 0;
decisions[1].VCode = 5;
//Console.WriteLine("turn left");
}
else if (mission.TeamsRef[0].Fishes[1].BodyDirectionRad >= 1.7 || mission.TeamsRef[0].Fishes[1].BodyDirectionRad < -1.9)
{
decisions[1].TCode = 14;
decisions[1].VCode = 5;
//Console.WriteLine("turn right");
}
else
{
//Console.WriteLine(mission.TeamsRef[0].Fishes[1].BodyDirectionRad);
//Console.WriteLine("go straight");
decisions[1].TCode = 7;
decisions[1].VCode = 14;
}
}
else if (mission.TeamsRef[0].Fishes[1].PositionMm.X < 0 && mission.TeamsRef[0].Fishes[1].PositionMm.X > -616 && mission.TeamsRef[0].Fishes[1].PositionMm.Z < -700 || mission.TeamsRef[0].Fishes[1].PositionMm.X < -616 && mission.TeamsRef[0].Fishes[1].PositionMm.Z < -500)
{
//Console.WriteLine("stage 2");
decisions[1].TCode = 14;
decisions[1].VCode = 14;
//Console.WriteLine("turn right");
}
else if (mission.TeamsRef[0].Fishes[1].PositionMm.X < 0 && mission.TeamsRef[0].Fishes[1].PositionMm.Z < 500)
{
//Console.WriteLine("stage 3");
//Console.WriteLine(mission.TeamsRef[0].Fishes[1].BodyDirectionRad);
if (mission.TeamsRef[0].Fishes[1].BodyDirectionRad > -1.7 && mission.TeamsRef[0].Fishes[1].BodyDirectionRad < 1.5)
{
decisions[1].TCode = 14;
decisions[1].VCode = 5;
//Console.WriteLine("turn right");
}
else if (mission.TeamsRef[0].Fishes[1].BodyDirectionRad > 1.9 || mission.TeamsRef[0].Fishes[1].BodyDirectionRad <= -1.7)
{
decisions[1].TCode = 0;
decisions[1].VCode = 5;
//Console.WriteLine("turn left");
}
else
{
//Console.WriteLine(mission.TeamsRef[0].Fishes[1].BodyDirectionRad);
//Console.WriteLine("go straight");
decisions[1].TCode = 7;
decisions[1].VCode = 14;
}
}
else if (mission.TeamsRef[0].Fishes[1].PositionMm.X > -616 && mission.TeamsRef[0].Fishes[1].PositionMm.X < 0 && mission.TeamsRef[0].Fishes[1].PositionMm.Z > 500 || mission.TeamsRef[0].Fishes[1].PositionMm.X > 0 && mission.TeamsRef[0].Fishes[1].PositionMm.X < 616 && mission.TeamsRef[0].Fishes[1].PositionMm.Z > 700)
{
//Console.WriteLine("stage 4");
decisions[1].TCode = 0;
decisions[1].VCode = 14;
//Console.WriteLine("turn left");
}
else if (mission.TeamsRef[0].Fishes[1].PositionMm.X < 616 && mission.TeamsRef[0].Fishes[1].PositionMm.Z > -500)
{
//Console.WriteLine("stage 5");
//Console.WriteLine(mission.TeamsRef[0].Fishes[1].BodyDirectionRad);
if (mission.TeamsRef[0].Fishes[1].BodyDirectionRad > -1.5 && mission.TeamsRef[0].Fishes[1].BodyDirectionRad < 1.5)
{
decisions[1].TCode = 0;
decisions[1].VCode = 5;
//Console.WriteLine("turn left");
}
else if (mission.TeamsRef[0].Fishes[1].BodyDirectionRad > 1.9 || mission.TeamsRef[0].Fishes[1].BodyDirectionRad < -1.9)
{
decisions[1].TCode = 14;
decisions[1].VCode = 5;
//Console.WriteLine("turn right");
}
else
{
//Console.WriteLine(mission.TeamsRef[0].Fishes[1].BodyDirectionRad);
decisions[1].TCode = 7;
decisions[1].VCode = 14;
//Console.WriteLine("go straight");
}
}
else if (mission.TeamsRef[0].Fishes[1].PositionMm.X > 0 && mission.TeamsRef[0].Fishes[1].PositionMm.X < 616 && mission.TeamsRef[0].Fishes[1].PositionMm.Z < -500 || mission.TeamsRef[0].Fishes[1].PositionMm.X > 616 && mission.TeamsRef[0].Fishes[1].PositionMm.Z < -700)
{
//Console.WriteLine("stage 6");
decisions[1].TCode = 14;
decisions[1].VCode = 14;
//Console.WriteLine("turn right");
}
else if (mission.TeamsRef[0].Fishes[1].PositionMm.Z < 0)
{
//Console.WriteLine("stage 7");
//Console.WriteLine(mission.TeamsRef[0].Fishes[1].BodyDirectionRad);
if (mission.TeamsRef[0].Fishes[1].BodyDirectionRad > -1.5 && mission.TeamsRef[0].Fishes[1].BodyDirectionRad < 1.5)
{
decisions[1].TCode = 14;
decisions[1].VCode = 5;
//Console.WriteLine("turn right");
}
else if (mission.TeamsRef[0].Fishes[1].BodyDirectionRad > 1.9 || mission.TeamsRef[0].Fishes[1].BodyDirectionRad < -1.9)
{
decisions[1].TCode = 0;
decisions[1].VCode = 5;
//Console.WriteLine("turn left");
}
else
{
//Console.WriteLine(mission.TeamsRef[0].Fishes[1].BodyDirectionRad);
decisions[1].TCode = 7;
decisions[1].VCode = 14;
//Console.WriteLine("go straight");
}
}
}
}
if (fishPm1.X >= 650)
{
actSlow(1, position5, mission.TeamsRef[teamId].Fishes[1].PositionMm, mission.TeamsRef[teamId].Fishes[1].BodyDirectionRad);
if (fish0.PolygonVertices[0].X > 1100)
{
// actFast(1, position4, mission.TeamsRef[teamId].Fishes[1].PositionMm, mission.TeamsRef[teamId].Fishes[1].BodyDirectionRad);
StrategyHelper.Helpers.PoseToPose(ref decisions[1], mission.TeamsRef[teamId].Fishes[1], position4, (float)Math.Atan((position4.Z - fishPm1.Z) / (position4.X - fishPm1.X)), 30.0f, 40, mission.CommonPara.MsPerCycle, ref times);
}
if (fishPm1.Z > 0)
{
this.decisions[1].VCode = 1;
this.decisions[1].TCode = 2;
if (fish1.BodyDirectionRad > (-Math.PI / 2) && fish1.BodyDirectionRad < (-Math.PI / 3))
{
this.decisions[1].VCode = 0;
this.decisions[1].TCode = 7;
}
}
if (fishPm0.Z < -200 && f01 == true)
{
number_act(1, 1, fishPm1, ballsPm, fish1, finish_placep2);
}
}
}
else
{
//number_act(1, 1, fishPm1, ballsPm, fish1, finish_placep2);
//if (ballsPm.Z < -600 && ballsPm.Z > -660)
//{
// number_act(1, 2, fishPm1, ballsPm, fish1, finish_placep1);
//}
//if (ballsPm.Z < -660 || ballsPm.X < 750)
//{
// number_act(1, 2, fishPm1, ballsPm, fish1, mission.TeamsRef[teamId].Fishes[0].BodyPolygonVertices[3]); //原来是finish_placep3
//}
if (upState == 0)
{
number_act(1, 1, fishPm1, ballsPm, fish1, finish_placep2);
if (ballsPm.Z < -660)// && ballsPm.Z > -660)
{
upState = 1;
}
}
if (upState == 1)
{
number_act(1, 2, fishPm1, ballsPm, fish1, finish_placep1);
//if (ballsPm.Z < -660 || ballsPm.X < 750)
if (ballsPm.X < 750)
{
upState = 2;
}
}
if (upState == 2)
{
number_act(1, 2, fishPm1, ballsPm, fish1, mission.TeamsRef[teamId].Fishes[0].BodyPolygonVertices[3]); //原来是finish_placep3
}
}
}
if (no == 2)
{
number_act(1, 2, fishPm1, ballsPm, fish1, mission.TeamsRef[teamId].Fishes[0].BodyPolygonVertices[3]); //原来是finish_placep3
if (f02 == true)
{
//if (ballsPm.Z < 350)
//{
// Console.WriteLine("第1个");
// number_act(1, 3, fishPm1, ballsPm, fish1, finish_placep4);
//}
//else if (ballsPm.Z < 660)// || ballsPm.Z >= 660 && ballsPm.X >= 30)
//{
// Console.WriteLine("第2个");
// number_act(1, 3, fishPm1, ballsPm, fish1, finish_placep5);
//}
//else if (ballsPm.Z >= 660)// && ballsPm.X < 30)
//{
// Console.WriteLine("第3个");
// xna.Vector3 tmp = new xna.Vector3(ballsPm.X - 50, 0, ballsPm.Z);
// number_act(1, 4, fishPm1, ballsPm, fish1, tmp);//finish_placep6);
// /* if (ballsPm.Z - fishPm1.Z >= 100)
// {
// times = 100;
// StrategyHelper.Helpers.PoseToPose(ref decisions[1], mission.TeamsRef[teamId].Fishes[1], position11, (float)Math.Atan((position11.Z - fishPm1.Z) / (position11.X - fishPm1.X)), 30.0f, 40, mission.CommonPara.MsPerCycle, ref times);
// }
// else
// {
// number_act(1, 4, fishPm1, ballsPm, fish1, finish_place4);
// }*/
//}
if (downState == 0)
{
if (ballsPm.Z < 350)
{
//Console.WriteLine("第1个");
number_act(1, 3, fishPm1, ballsPm, fish1, finish_placep4);
}
else
{
downState = 1;
}
}
if (downState == 1)
{
if (ballsPm.Z < 660 || ballsPm.Z >= 660 && ballsPm.X >= 10)
{
//Console.WriteLine("第2个");
number_act(1, 3, fishPm1, ballsPm, fish1, finish_placep5);
}
else
{
downState = 2;
}
}
if (downState == 2)
{
xna.Vector3 tmp = new xna.Vector3(ballsPm.X - 50, 0, ballsPm.Z);
number_act(1, 4, fishPm1, ballsPm, fish1, tmp);
}
//if (ballsPm.Z < 350)
//{
// number_act(1, 3, fishPm1, ballsPm, fish1, finish_placep4);
//}
//else if (ballsPm.Z < 660)
//{
// xna.Vector3 tmp = new xna.Vector3(0, 0, 700);
// number_act(1, 3, fishPm1, ballsPm, fish1, finish_placep5);
//}
//else
//{
// xna.Vector3 tmp = new xna.Vector3(ballsPm.X - 50, 0, ballsPm.Z);
// number_act(1, 4, fishPm1, ballsPm, fish1, tmp);
//}
}
}
if (no == 3)
{
/*
number_act(1, 3, fishPm1, ballsPm, fish1, finish_placep7);
if (ballsPm.X > -80 && ballsPm.Z > 630)
{
number_act(1, 3, fishPm1, ballsPm, fish1, finish_placep7);
}
if (ballsPm.Z < 600 && ballsPm.Z > 200)
{
number_act(1, 7, fishPm1, ballsPm, fish1, finish_placep8);
}
if (ballsPm.Z < 200 && ballsPm.Z > -200)
{
number_act(1, 7, fishPm1, ballsPm, fish1, finish_placep9);
}
*/
xna.Vector3 tmp = new xna.Vector3(ballsPm.X - 40, 0, ballsPm.Z);
number_act(1, 3, fishPm1, ballsPm, fish1, tmp);
if (ballsPm.X < -460)// && fish1.PolygonVertices[0].X > -480)
{
//xna.Vector3 tmp1 = new xna.Vector3(-600, 0, 1000);// ballsPm.Z + 70);
xna.Vector3 tmp1 = new xna.Vector3(-600, 0, (ballsPm.Z > 800 ? 1000 : ballsPm.Z + 200));
actSlow(1, tmp1, mission.TeamsRef[teamId].Fishes[1].PositionMm, mission.TeamsRef[teamId].Fishes[1].BodyDirectionRad);
}
if (fish1.PolygonVertices[0].X <= -550 && ballsPm.Z >= -600)
{
//Console.WriteLine("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
int i = 1;
xna.Vector3 fp = mission.TeamsRef[teamId].Fishes[i].PositionMm; // fish position
float dir_x = -150f;
float dir_z = dir_x / (float)Math.Sqrt(8);
xna.Vector3 dir = new xna.Vector3(dir_x, 0f, dir_z);
xna.Vector3 targetPoint = fp + dir;
float targetDirection = -(float)Math.PI / 6 * 5;
StrategyHelper.Helpers.Dribble(
ref decisions[i], mission.TeamsRef[teamId].Fishes[i], targetPoint, targetDirection, 5, 10, 150, 14, 7, 15, 100, true
);
}
if (ballsPm.Z < -600)
{
// this.decisions[1].TCode = 6;
// this.decisions[1].VCode = 6;
actFast(1, position10, mission.TeamsRef[teamId].Fishes[1].PositionMm, mission.TeamsRef[teamId].Fishes[1].BodyDirectionRad);
}
if (fishPm1.X < -750)
{
actFast(1, position11, mission.TeamsRef[teamId].Fishes[1].PositionMm, mission.TeamsRef[teamId].Fishes[1].BodyDirectionRad);
}
}
if (no == 4)
{
xna.Vector3 length2 = position11 - fishPm1;
if (stillState == 3)
{
if (length2.Length() > 60)
{
//actFast(1, position11, mission.TeamsRef[teamId].Fishes[1].PositionMm, mission.TeamsRef[teamId].Fishes[1].BodyDirectionRad);
actSlow(1, position11, mission.TeamsRef[teamId].Fishes[1].PositionMm, mission.TeamsRef[teamId].Fishes[1].BodyDirectionRad);
// StrategyHelper.Helpers.PoseToPose(ref decisions[1], mission.TeamsRef[teamId].Fishes[1], position11, (float)Math.Atan((position11.Z - fishPm1.Z) / (position11.X - fishPm1.X)), 30.0f, 40, mission.CommonPara.MsPerCycle, ref times);
}
else
{
stillState = 4;
}
}
else if (stillState == 4) //旋转到指定角度
{
//if (fish1.BodyDirectionRad > -Math.PI / 2 && fish1.BodyDirectionRad < -1.06 && length2.Length() < 60)
if (fish1.BodyDirectionRad > -Math.PI / 4 * 3 && fish1.BodyDirectionRad < -Math.PI / 3 * 2)
{
stillState = 5;
}
else
{
this.decisions[1].VCode = 1;
this.decisions[1].TCode = 0;
}
}
else if (stillState == 5)
{
if (ballsPm.Z > -200)
{
stillState = 6;
}
else
{
this.decisions[1].VCode = 0;
this.decisions[1].TCode = 7;
}
}
else if (stillState == 6)
{
//number_act(1, 3, fishPm1, ballsPm, fish1, finish_place7);
number_act(1, 3, fishPm1, ballsPm, fish1, new xna.Vector3(ballsPm.X - 30, 0, ballsPm.Z));
}
/* if (ballsPm.Z < -600)
{
actFast(1, position10, mission.TeamsRef[teamId].Fishes[1].PositionMm, mission.TeamsRef[teamId].Fishes[1].BodyDirectionRad);
}
if (fish1.BodyDirectionRad > -Math.PI / 2 && fish1.BodyDirectionRad < -1.06)
{
this.decisions[1].VCode = 0;
this.decisions[1].TCode = 7;
}
if (f14 == true)
{
this.decisions[1].VCode = 1;
this.decisions[1].TCode = 7;
}*/
}
}
#endregion
#region final
if (mission.EnvRef.Balls[0].PositionMm.X <= -1264 && mission.EnvRef.Balls[0].PositionMm.Z >= -104 && !(f04 && f14))
{
decisions[0].TCode = 7;
decisions[0].VCode = 0;
}
#endregion
if (f04 && f14)
{
decisions[0].TCode = 7;
decisions[0].VCode = 0;
}
return this.decisions;
}
public Decision actFast(int i, xna.Vector3 position, xna.Vector3 fishPm, double bodyDirectionRad)//找点
{
double x = fishPm.X;
double z = fishPm.Z; //鱼的刚体坐标
double num11 = position.X;
double num12 = position.Z;
double num14 = Math.Atan((num12 - z) / (num11 - x));//刚体和目标点这条直线与x轴的角度正切值
if ((num11 - x) < 0.0)//鱼在球的右侧
{
if (num14 > 0.0)
{
num14 -= Math.PI;
}
else
{
num14 += Math.PI;
}
}
double num15 = num14 - bodyDirectionRad;
if (num15 > Math.PI)//---------鱼实际要转过的角度取最优法
{
num15 -= Math.PI * 2;
}
else if (num15 < -Math.PI)
{
num15 += Math.PI * 2;
}
double juli = Math.Sqrt(Math.Pow(x - num11, 2.0) + Math.Pow(z - num12, 2.0));
if (num15 > 0)
{
if (Math.Abs(num15) > 0.1 * Math.PI)
{
decisions[i].TCode = 15;
decisions[i].VCode = 1;
}
else
{
decisions[i].TCode = 7;
if (juli > 10)
{
decisions[i].VCode = 15;
}
else
{
decisions[i].VCode = 0;
}
}
}
if (num15 < 0)
{
if (Math.Abs(num15) > 0.1 * Math.PI)
{
decisions[i].TCode = 0;
decisions[i].VCode = 1;
}
else
{
decisions[i].TCode = 7;
if (juli > 10)
{
decisions[i].VCode = 15;
}
else
{
decisions[i].VCode = 0;
}
}
}
return decisions[i];
}
public Decision actSlow(int i, xna.Vector3 position, xna.Vector3 fishPm, double bodyDirectionRad)//找点
{
double x = fishPm.X;
double z = fishPm.Z; //鱼的刚体坐标
double num11 = position.X;
double num12 = position.Z;
double num14 = Math.Atan((num12 - z) / (num11 - x));//刚体和目标点这条直线与x轴的角度正切值
if ((num11 - x) < 0.0)//鱼在球的右侧
{
if (num14 > 0.0)
{
num14 -= Math.PI;
}
else
{
num14 += Math.PI;
}
}
double num15 = num14 - bodyDirectionRad;
if (num15 > Math.PI)//---------鱼实际要转过的角度取最优法
{
num15 -= Math.PI * 2;
}
else if (num15 < -Math.PI)
{
num15 += Math.PI * 2;
}
double juli = Math.Sqrt(Math.Pow(x - num11, 2.0) + Math.Pow(z - num12, 2.0));
if (num15 > 0)
{
if (Math.Abs(num15) > 0.1 * Math.PI)
{
decisions[i].TCode = 15;
decisions[i].VCode = 1;
}
else
{
decisions[i].TCode = 7;
if (juli > 550)
{
decisions[i].VCode = 12;
}
if (juli > 350 && juli < 550)
{
decisions[i].VCode = 9;
}
if (juli > 150 && juli < 350)
{
decisions[i].VCode = 8;
}
if (juli > 50 && juli < 150)
{
decisions[i].VCode = 7;
}
if (juli < 50)
{
decisions[i].VCode = 0;
}
}
}
if (num15 < 0)
{
if (Math.Abs(num15) > 0.1 * Math.PI)
{
decisions[i].TCode = 0;
decisions[i].VCode = 1;
}
else
{
decisions[i].TCode = 7;
if (juli > 550)
{
decisions[i].VCode = 12;
}
if (juli > 350 && juli < 550)
{
decisions[i].VCode = 9;
}
if (juli > 150 && juli < 350)
{
decisions[i].VCode = 8;
}
if (juli > 50 && juli < 150)
{
decisions[i].VCode = 7;
}
if (juli < 50)
{
decisions[i].VCode = 0;
}
}
}
return decisions[i];
}
public Decision number_act(int i, int j, xna.Vector3 fishPm, xna.Vector3 ballsPm, RoboFish fish, xna.Vector3 finish_place)
{
double xg = finish_place.X;
double zg = finish_place.Z;//终点位置
double r = 58.0;
double x = fishPm.X;
double z = fishPm.Z; //鱼的刚体坐标
double num6 = ballsPm.X;
double num7 = ballsPm.Z; //球心坐标
double d = Math.Atan((zg - num7) / (xg - num6));//球心到目标点这条直线和x轴的角度正切值
if ((xg - num6) < 0.0)//目标点位于球心左侧
{
if (d > 0.0)
{
d -= Math.PI;
}
else
{
d += Math.PI;
}
}
float targetDirection = (float)d;
double num0 = ballsPm.X + (Math.Sqrt(3) * r * Math.Sin(d));
double num1 = ballsPm.Z - (Math.Sqrt(3) * r * Math.Cos(d));
double num2 = ballsPm.X - (Math.Sqrt(3) * r * Math.Sin(d));
double num3 = ballsPm.Z + (Math.Sqrt(3) * r * Math.Cos(d));
double num11 = num6 - (r * Math.Cos(d));
double num12 = num7 - (r * Math.Sin(d));//找到击球点---延长线上
double num13 = num6 + (r * Math.Cos(d));
double num14 = num7 + (r * Math.Sin(d));
double len1 = Math.Sqrt(Math.Pow(x - num11, 2.0) + Math.Pow(z - num12, 2.0));
double len2 = Math.Sqrt(Math.Pow(x - num13, 2.0) + Math.Pow(z - num14, 2.0));
if (len1 < len2)
{
xna.Vector3 targetPoint = new xna.Vector3((float)num11, 0f, (float)num12);
switchDribble(i, j, fish, targetPoint, targetDirection, true);
}
else
{
double len3 = Math.Sqrt(Math.Pow(x - num0, 2.0) + Math.Pow(z - num1, 2.0));
double len4 = Math.Sqrt(Math.Pow(x - num2, 2.0) + Math.Pow(z - num3, 2.0));
if (len3 > len4)
{
xna.Vector3 targetPoint = new xna.Vector3((float)num2, 0f, (float)num3);
switchDribble(i, j, fish, targetPoint, targetDirection, true);
}
else
{
xna.Vector3 targetPoint = new xna.Vector3((float)num0, 0f, (float)num1);
switchDribble(i, j, fish, targetPoint, targetDirection, true);
}
}
return decisions[i];
}
public Decision switchDribble(int i, int j, RoboFish fish, xna.Vector3 targetPoint, float targetDirection, bool flag)
{
switch (j)
{
case 1: StrategyHelper.Helpers.Dribble(ref decisions[i], fish, targetPoint, targetDirection, 4, 4, 200, 11, 4, 10, 100, flag); break;//1
case 2: StrategyHelper.Helpers.Dribble(ref decisions[i], fish, targetPoint, targetDirection, 5, 3, 120, 3, 9, 6, 100, flag); break; //2
case 3: StrategyHelper.Helpers.Dribble(ref decisions[i], fish, targetPoint, targetDirection, 6, 4, 200, 10, 5, 10, 100, flag); break;//3
case 4: StrategyHelper.Helpers.Dribble(ref decisions[i], fish, targetPoint, targetDirection, 4, 4, 200, 10, 4, 10, 100, flag); break;//4
case 5: StrategyHelper.Helpers.Dribble(ref decisions[i], fish, targetPoint, targetDirection, 6, 4, 200, 10, 5, 10, 100, flag); break;//5
case 6: StrategyHelper.Helpers.Dribble(ref decisions[i], fish, targetPoint, targetDirection, 4, 4, 200, 10, 4, 10, 100, flag); break;//6
case 7: StrategyHelper.Helpers.Dribble(ref decisions[i], fish, targetPoint, targetDirection, 10, 4, 200, 10, 8, 10, 100, flag); break;//快
default: break;
}
return decisions[i];
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment