久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 水中魚代碼 [打印本頁]

作者: xlpx    時間: 2018-7-16 12:58
標題: 水中魚代碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using xna = Microsoft.Xna.Framework;
using Microsoft.Xna.Framework;
using URWPGSim2D.Common;
using URWPGSim2D.StrategyLoader;
using URWPGSim2D.Core;
namespace URWPGSim2D.Strategy
{
    public class Strategy : MarshalByRefObject, IStrategy
    {
        #region reserved code never be changed or removed
        /// <summary>
        /// override the InitializeLifetimeService to return null instead of a valid ILease implementation
        /// to ensure this type of remote object never dies
        /// </summary>
        /// <returns>null</returns>
        public override object InitializeLifetimeService()
        {
            //return base.InitializeLifetimeService();
            return null; // makes the object live indefinitely
        }
        #endregion
        /// <summary>
        /// 決策類當前對象對應的仿真使命參與隊伍的決策數組引用 第一次調用GetDecision時分配空間
        /// </summary>
        ///
        private Decision[] decisions = null;
        /// <summary>
        /// 獲取隊伍名稱 在此處設置參賽隊伍的名稱
        /// </summary>
        /// <returns>隊伍名稱字符串</returns>
        public string GetTeamName()
        {
            return "懟2號球向上 往回";
        }
        
        
        
        
        
        
        
        public static int i = 0;
        float π=(float)Math .PI;
        
        
        
        
        
        /// <summary>
        /// 獲取當前仿真使命(比賽項目)當前隊伍所有仿真機器魚的決策數據構成的數組
        /// </summary>
        /// <param name="mission">服務端當前運行著的仿真使命Mission對象</param>
        /// <param name="teamId">當前隊伍在服務端運行著的仿真使命中所處的編號
        /// 用于作為索引訪問Mission對象的TeamsRef隊伍列表中代表當前隊伍的元素</param>
        /// <returns>當前隊伍所有仿真機器魚的決策數據構成的Decision數組對象</returns>
        public Decision[] GetDecision(Mission mission, int teamId)
        {
            // 決策類當前對象第一次調用GetDecision時Decision數組引用為null
            if (decisions == null)
            {// 根據決策類當前對象對應的仿真使命參與隊伍仿真機器魚的數量分配決策數組空間
                decisions = new Decision[mission.CommonPara.FishCntPerTeam];
            }
            #region 決策計算過程 需要各參賽隊伍實現的部分
            #region 策略編寫幫助信息
            //====================我是華麗的分割線====================//
            //======================策略編寫指南======================//
            //1.策略編寫工作直接目標是給當前隊伍決策數組decisions各元素填充決策值
            //2.決策數據類型包括兩個int成員,VCode為速度檔位值,TCode為轉彎檔位值
            //3.VCode取值范圍0-14共15個整數值,每個整數對應一個速度值,速度值整體但非嚴格遞增
            //有個別檔位值對應的速度值低于比它小的檔位值對應的速度值,速度值數據來源于實驗
            //4.TCode取值范圍0-14共15個整數值,每個整數對應一個角速度值
            //整數7對應直游,角速度值為0,整數6-0,8-14分別對應左轉和右轉,偏離7越遠,角度速度值越大
            //5.任意兩個速度/轉彎檔位之間切換,都需要若干個仿真周期,才能達到穩態速度/角速度值
            //目前運動學計算過程決定穩態速度/角速度值接近但小于目標檔位對應的速度/角速度值
            //6.決策類Strategy的實例在加載完畢后一直存在于內存中,可以自定義私有成員變量保存必要信息
            //但需要注意的是,保存的信息在中途更換策略時將會丟失
            //====================我是華麗的分割線====================//
            //=======策略中可以使用的比賽環境信息和過程信息說明=======//
            //場地坐標系: 以毫米為單位,矩形場地中心為原點,向右為正X,向下為正Z
            //            負X軸順時針轉回負X軸角度范圍為(-PI,PI)的坐標系,也稱為世界坐標系
            //mission.CommonPara: 當前仿真使命公共參數
            //mission.CommonPara.FishCntPerTeam: 每支隊伍仿真機器魚數量
            //mission.CommonPara.MsPerCycle: 仿真周期毫秒數
            //mission.CommonPara.RemainingCycles: 當前剩余仿真周期數
            //mission.CommonPara.TeamCount: 當前仿真使命參與隊伍數量
            //mission.CommonPara.TotalSeconds: 當前仿真使命運行時間秒數
            //mission.EnvRef.Balls:
            //當前仿真使命涉及到的仿真水球列表,列表元素的成員意義參見URWPGSim2D.Common.Ball類定義中的注釋
            //mission.EnvRef.FieldInfo:
            //當前仿真使命涉及到的仿真場地,各成員意義參見URWPGSim2D.Common.Field類定義中的注釋
            //mission.EnvRef.ObstaclesRect:
            //當前仿真使命涉及到的方形障礙物列表,列表元素的成員意義參見URWPGSim2D.Common.RectangularObstacle類定義中的注釋
            //mission.EnvRef.ObstaclesRound:
            //當前仿真使命涉及到的圓形障礙物列表,列表元素的成員意義參見URWPGSim2D.Common.RoundedObstacle類定義中的注釋
            //mission.TeamsRef[teamId]:
            //決策類當前對象對應的仿真使命參與隊伍(當前隊伍)
            //mission.TeamsRef[teamId].Para:
            //當前隊伍公共參數,各成員意義參見URWPGSim2D.Common.TeamCommonPara類定義中的注釋
            //mission.TeamsRef[teamId].Fishes:
            //當前隊伍仿真機器魚列表,列表元素的成員意義參見URWPGSim2D.Common.RoboFish類定義中的注釋
            //mission.TeamsRef[teamId].Fishes[i].PositionMm和PolygonVertices[0],BodyDirectionRad,VelocityMmPs,
            //                                   AngularVelocityRadPs,Tactic:
            //當前隊伍第i條仿真機器魚魚體矩形中心和魚頭頂點在場地坐標系中的位置(用到X坐標和Z坐標),魚體方向,速度值,
            //                                   角速度值,決策值
            //====================我是華麗的分割線====================//
            //========================典型循環========================//
            //for (int i = 0; i < mission.CommonPara.FishCntPerTeam; i++)
            //{
            //  decisions[i].VCode = 0; // 靜止
            //  decisions[i].TCode = 7; // 直游
            //}
            //====================我是華麗的分割線====================//
            #endregion
            //請從這里開始編寫代碼
            #endregion
            Vector3[] yu = new Vector3[2];
            yu[0] = mission.TeamsRef[teamId].Fishes[0].PolygonVertices[0]; ///魚頭1的位置
            yu[1] = mission.TeamsRef[teamId].Fishes[1].PolygonVertices[1]; ///魚頭2的位置
            //球的坐標                                                                     
            Vector3 b1 = mission.EnvRef.Balls[0].PositionMm;
            Vector3 b2 = mission.EnvRef.Balls[1].PositionMm;
            Vector3 b3 = mission.EnvRef.Balls[2].PositionMm;
            Vector3 b4 = mission.EnvRef.Balls[3].PositionMm;
            Vector3 b5 = mission.EnvRef.Balls[4].PositionMm;
            Vector3 b6 = mission.EnvRef.Balls[5].PositionMm;
            Vector3 b7 = mission.EnvRef.Balls[6].PositionMm;
            Vector3 b8 = mission.EnvRef.Balls[7].PositionMm;
            Vector3 b9 = mission.EnvRef.Balls[8].PositionMm;
           
            if(i==0)
            {  
            
                  int times = 0;
                  StrategyHelper.Helpers.PoseToPose(ref decisions[0], mission.TeamsRef[teamId].Fishes[0], b8, 0f, 0f, 0f, mission.CommonPara.MsPerCycle, ref times);
                  decisions[0].VCode = 14;//目標方向弧度改為GetAngleToDestPoint(yu[0].X, yu[0].Y, b2.X, b2.Y)
              }//1號魚游到2號球  優化:1游到魚正下方  2嘗試帶球函數 3判斷球的位置選擇不同距離閾值
            


           
         
               
              /*  if (0f < b2.X && b2.X <= 406f)
                        StrategyHelper.Helpers.Dribble(ref decisions[0], mission.TeamsRef[teamId].Fishes[0], b2, 1.57f, 10, 10, 58, 5, 5, 10, 100, false);
                //調節速度14、10
                    else if (406<b2.X)
                    {

                        StrategyHelper.Helpers.Dribble(ref decisions[0], mission.TeamsRef[teamId].Fishes[0], b2, -0.5235988f, 10, 10, 58, 14, 11, 10, 100, false);
                    }//3/4Pi


            
                                 
                else
                    {

                        StrategyHelper.Helpers.Dribble(ref decisions[0], mission.TeamsRef[teamId].Fishes[0], b2, 0.5235988f, 10, 10, 58, 14, 11, 10, 100, false);
                    }//將球推到8號球(上方2分球)右方
            }
            if (yu[0].Y <= -862)//到達b8 2分球右下方
            {
                i++;
                if (i == 1)

                    //學姐
                    //魚1帶2號和7號球的判斷

                    if (b8.X <= 0 && b8.Y < -804)
                    {
                        Vector3 positionb8 = new Vector3(b3.X + 58 + 29, 0, b3.Y - 58 * 3);//擊球點
                       
                        float angl1 = -π * 85 / 360;
                        StrategyHelper.Helpers.Dribble(ref  decisions[0], mission.TeamsRef[teamId].Fishes[0], positionb8, angl1, 5, 10, 150, 14, 8, 15, 100, false);//快速到達定點
                        //魚1帶2號,7號球穩定游動
                    }
                 //else
                 //{
                   //   Vector3 positionb8 = new Vector3(-1164, 0, -876);//目標點
                     //StrategyHelper.Helpers.Dribble(ref  decisions[0], mission.TeamsRef[teamId].Fishes[0], b2, 3.14f, 5, 10, 150, 6, 4, 15, 100, true);
                     //decisions[1].VCode = 14;
                     //魚1只帶2號球快速游動
                 }
              StrategyHelper.Helpers.Dribble(ref decisions[0], mission.TeamsRef[teamId].Fishes[0], b4, 3.14f, 10, 10, 58, 14, 11, 10, 100, false);
                    
             //如果8號球不在范圍內
                //  {StrategyHelper.Helpers.Dribble(ref decisions[0], mission.TeamsRef[teamId].Fishes[0], b2, 3.14f , 10, 10, 58, 14, 11, 10, 100, false); }
                if (b8.X < -1362)
                {
                    Vector3 position2 = new Vector3(b3.X, 0, b3.Y + 58);//擊球點
                    float angl2 = 3.14f * 90 / 360;
                    StrategyHelper.Helpers.Dribble(ref  decisions[0], mission.TeamsRef[teamId].Fishes[0], position2, angl2, 5, 10, 150, 14, 8, 15, 100, false);//快速到達定點
                }
            } */
            return decisions;
               
}
        #region 新函數的引用
        private float GetAngleToDestPoint(float cur_x, float cur_z, float dest_x, float dest_z)
        {
            return (float)Math.Atan2((double)(dest_z - cur_z), (double)(dest_x - cur_x));
        }
        #endregion
    }
}     
   
   








歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: wwwsihu | 最新中文字幕在线播放 | 亚洲区一 | 国产精品久久福利 | 国产成人综合久久 | 国产人成精品一区二区三 | 澳门永久av免费网站 | 天天澡天天狠天天天做 | 日韩视频区 | 91在线精品一区二区 | 在线观看中文字幕视频 | 精品亚洲一区二区 | 欧美黄色大片在线观看 | 欧美h视频 | 欧美日韩精品区 | aaa天堂 | 日韩中文一区 | 亚洲午夜精品视频 | 91 在线| 久久精品综合 | 91在线看| 91免费入口 | 天天插天天射天天干 | 精品久久久久久久久久久久久久久久久 | av手机在线 | 日韩二区三区 | 欧日韩不卡在线视频 | 一级a性色生活片久久毛片波多野 | 免费久久精品视频 | 欧美一级做性受免费大片免费 | 91在线导航 | 精品视频在线免费观看 | 成人免费视频网站在线观看 | 视频一区二区三区中文字幕 | 国产一区免费视频 | 成人av一区二区三区 | 亚洲综合精品 | 国产精品久久片 | 久在线视频播放免费视频 | 日本公妇乱淫xxxⅹ 国产在线不卡 | 一区二区精品 |