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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2201|回復: 0
打印 上一主題 下一主題
收起左側

水中魚代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:372468 發表于 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
    }
}     
   
   



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品一区免费 | 欧美一区二区免费在线 | 久久久.com | 一级午夜aaa免费看三区 | 欧美国产中文字幕 | 99精品视频在线观看 | 日韩欧美亚洲 | 国产一区不卡 | 一区在线观看 | 久久最新| 国产高清自拍视频在线观看 | 日本a视频 | 高清一区二区 | 精品国产91乱码一区二区三区 | 精品欧美| xnxx 日本免费 | 国产精品18hdxxxⅹ在线 | 日韩精品1区2区3区 爱爱综合网 | 亚洲一区二区三区免费视频 | 国产精品精品久久久久久 | 日本免费视频 | 日本免费一区二区三区视频 | 99精品久久久久久中文字幕 | 日本激情视频中文字幕 | 91传媒在线观看 | 国产精品久久精品 | 国产精品精品视频一区二区三区 | 亚洲国产成人精品一区二区 | 亚洲电影免费 | 丁香综合 | 久久香焦 | 性色av香蕉一区二区 | 国产精品波多野结衣 | 在线免费观看日本视频 | 国产丝袜人妖cd露出 | 免费毛片网 | 成人网视频 | 久久久久久国产精品mv | 日韩国产欧美一区 | 欧美一级电影免费观看 | 成人免费毛片片v |