1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2392|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

水中魚代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:372468 發(fā)表于 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>
        /// 決策類當(dāng)前對象對應(yīng)的仿真使命參與隊伍的決策數(shù)組引用 第一次調(diào)用GetDecision時分配空間
        /// </summary>
        ///
        private Decision[] decisions = null;
        /// <summary>
        /// 獲取隊伍名稱 在此處設(shè)置參賽隊伍的名稱
        /// </summary>
        /// <returns>隊伍名稱字符串</returns>
        public string GetTeamName()
        {
            return "懟2號球向上 往回";
        }
        
        
        
        
        
        
        
        public static int i = 0;
        float π=(float)Math .PI;
        
        
        
        
        
        /// <summary>
        /// 獲取當(dāng)前仿真使命(比賽項目)當(dāng)前隊伍所有仿真機(jī)器魚的決策數(shù)據(jù)構(gòu)成的數(shù)組
        /// </summary>
        /// <param name="mission">服務(wù)端當(dāng)前運行著的仿真使命Mission對象</param>
        /// <param name="teamId">當(dāng)前隊伍在服務(wù)端運行著的仿真使命中所處的編號
        /// 用于作為索引訪問Mission對象的TeamsRef隊伍列表中代表當(dāng)前隊伍的元素</param>
        /// <returns>當(dāng)前隊伍所有仿真機(jī)器魚的決策數(shù)據(jù)構(gòu)成的Decision數(shù)組對象</returns>
        public Decision[] GetDecision(Mission mission, int teamId)
        {
            // 決策類當(dāng)前對象第一次調(diào)用GetDecision時Decision數(shù)組引用為null
            if (decisions == null)
            {// 根據(jù)決策類當(dāng)前對象對應(yīng)的仿真使命參與隊伍仿真機(jī)器魚的數(shù)量分配決策數(shù)組空間
                decisions = new Decision[mission.CommonPara.FishCntPerTeam];
            }
            #region 決策計算過程 需要各參賽隊伍實現(xiàn)的部分
            #region 策略編寫幫助信息
            //====================我是華麗的分割線====================//
            //======================策略編寫指南======================//
            //1.策略編寫工作直接目標(biāo)是給當(dāng)前隊伍決策數(shù)組decisions各元素填充決策值
            //2.決策數(shù)據(jù)類型包括兩個int成員,VCode為速度檔位值,TCode為轉(zhuǎn)彎檔位值
            //3.VCode取值范圍0-14共15個整數(shù)值,每個整數(shù)對應(yīng)一個速度值,速度值整體但非嚴(yán)格遞增
            //有個別檔位值對應(yīng)的速度值低于比它小的檔位值對應(yīng)的速度值,速度值數(shù)據(jù)來源于實驗
            //4.TCode取值范圍0-14共15個整數(shù)值,每個整數(shù)對應(yīng)一個角速度值
            //整數(shù)7對應(yīng)直游,角速度值為0,整數(shù)6-0,8-14分別對應(yīng)左轉(zhuǎn)和右轉(zhuǎn),偏離7越遠(yuǎn),角度速度值越大
            //5.任意兩個速度/轉(zhuǎn)彎檔位之間切換,都需要若干個仿真周期,才能達(dá)到穩(wěn)態(tài)速度/角速度值
            //目前運動學(xué)計算過程決定穩(wěn)態(tài)速度/角速度值接近但小于目標(biāo)檔位對應(yīng)的速度/角速度值
            //6.決策類Strategy的實例在加載完畢后一直存在于內(nèi)存中,可以自定義私有成員變量保存必要信息
            //但需要注意的是,保存的信息在中途更換策略時將會丟失
            //====================我是華麗的分割線====================//
            //=======策略中可以使用的比賽環(huán)境信息和過程信息說明=======//
            //場地坐標(biāo)系: 以毫米為單位,矩形場地中心為原點,向右為正X,向下為正Z
            //            負(fù)X軸順時針轉(zhuǎn)回負(fù)X軸角度范圍為(-PI,PI)的坐標(biāo)系,也稱為世界坐標(biāo)系
            //mission.CommonPara: 當(dāng)前仿真使命公共參數(shù)
            //mission.CommonPara.FishCntPerTeam: 每支隊伍仿真機(jī)器魚數(shù)量
            //mission.CommonPara.MsPerCycle: 仿真周期毫秒數(shù)
            //mission.CommonPara.RemainingCycles: 當(dāng)前剩余仿真周期數(shù)
            //mission.CommonPara.TeamCount: 當(dāng)前仿真使命參與隊伍數(shù)量
            //mission.CommonPara.TotalSeconds: 當(dāng)前仿真使命運行時間秒數(shù)
            //mission.EnvRef.Balls:
            //當(dāng)前仿真使命涉及到的仿真水球列表,列表元素的成員意義參見URWPGSim2D.Common.Ball類定義中的注釋
            //mission.EnvRef.FieldInfo:
            //當(dāng)前仿真使命涉及到的仿真場地,各成員意義參見URWPGSim2D.Common.Field類定義中的注釋
            //mission.EnvRef.ObstaclesRect:
            //當(dāng)前仿真使命涉及到的方形障礙物列表,列表元素的成員意義參見URWPGSim2D.Common.RectangularObstacle類定義中的注釋
            //mission.EnvRef.ObstaclesRound:
            //當(dāng)前仿真使命涉及到的圓形障礙物列表,列表元素的成員意義參見URWPGSim2D.Common.RoundedObstacle類定義中的注釋
            //mission.TeamsRef[teamId]:
            //決策類當(dāng)前對象對應(yīng)的仿真使命參與隊伍(當(dāng)前隊伍)
            //mission.TeamsRef[teamId].Para:
            //當(dāng)前隊伍公共參數(shù),各成員意義參見URWPGSim2D.Common.TeamCommonPara類定義中的注釋
            //mission.TeamsRef[teamId].Fishes:
            //當(dāng)前隊伍仿真機(jī)器魚列表,列表元素的成員意義參見URWPGSim2D.Common.RoboFish類定義中的注釋
            //mission.TeamsRef[teamId].Fishes[i].PositionMm和PolygonVertices[0],BodyDirectionRad,VelocityMmPs,
            //                                   AngularVelocityRadPs,Tactic:
            //當(dāng)前隊伍第i條仿真機(jī)器魚魚體矩形中心和魚頭頂點在場地坐標(biāo)系中的位置(用到X坐標(biāo)和Z坐標(biāo)),魚體方向,速度值,
            //                                   角速度值,決策值
            //====================我是華麗的分割線====================//
            //========================典型循環(huán)========================//
            //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的位置
            //球的坐標(biāo)                                                                     
            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;//目標(biāo)方向弧度改為GetAngleToDestPoint(yu[0].X, yu[0].Y, b2.X, b2.Y)
              }//1號魚游到2號球  優(yōu)化:1游到魚正下方  2嘗試帶球函數(shù) 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);
                //調(diào)節(jié)速度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)//到達(dá)b8 2分球右下方
            {
                i++;
                if (i == 1)

                    //學(xué)姐
                    //魚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);//快速到達(dá)定點
                        //魚1帶2號,7號球穩(wěn)定游動
                    }
                 //else
                 //{
                   //   Vector3 positionb8 = new Vector3(-1164, 0, -876);//目標(biāo)點
                     //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號球不在范圍內(nèi)
                //  {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);//快速到達(dá)定點
                }
            } */
            return decisions;
               
}
        #region 新函數(shù)的引用
        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空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表