コード例 #1
0
        /// <summary>
        /// 普通的发球
        /// </summary>
        /// <param name="fistTrack"></param>
        /// <returns></returns>
        private match_event ServeEvent(Track fistTrack)
        {
            match_event ev = CreateNewEvent();

            //判断是内角还是外角发球
            double middleValue = Court.Width / 2;

            ///判断是否内角发球
            if (Math.Abs(middleValue - fistTrack.FirstPosition.Position.X) > 2057.5)
            {
                ev.EventType = (int)MatchEventType.OutFistServe;
            }
            else
            {
                ev.EventType = (int)MatchEventType.InnerFirstServe;
            }

            ev.EventResult = (int)processSingleTrack(fistTrack);

            if (ev.EventResult != (int)MatchEventResult.SCORE)
            {
                LogText.Error("CompleteRand", "数据出错:轨迹{0}", fistTrack.TraceString);;
            }

            return(ev);
        }
コード例 #2
0
        /// <summary>
        ///一发处理
        /// </summary>
        private void FirstServeEvent(Track fistTrack)
        {
            match_event ev = CreateNewEvent();

            //判断是内角还是外角发球
            double middleValue = Court.Width / 2;

            ///判断是否内角发球
            if (Math.Abs(middleValue - fistTrack.FirstPosition.Position.X) > 2057.5)
            {
                ev.EventType = (int)MatchEventType.OutFistServe;
            }
            else
            {
                ev.EventType = (int)MatchEventType.InnerFirstServe;
            }

            ev.EventResult = (int)processSingleTrack(fistTrack);

            if (ev.EventResult != (int)MatchEventResult.SCORE)
            {
                LogText.Error("CompleteRand", "数据出错:轨迹{0}", fistTrack.TraceString);;
            }

            DataProviderServices.instance.AddMatchEvent(ev);

            LogText.Info("FirstServeEvent", "一发判断:" + ev.EventResult.ToString());
        }
コード例 #3
0
        /// <summary>
        /// 处理接发球
        /// </summary>
        /// <param name="tracks"></param>
        private match_event ProcessRecive(IList <Track> tracks)
        {
            match_event serv = ServeEvent(tracks[0]);

            if (tracks[0].Status != MatchEventResult.INSIDE)
            {
                LogText.Error("CompleteRand", "数据出现异常,roundID:" + currentRound.Id);
            }

            match_event ev = CreateNewEvent();

            //修正如果上条轨迹是没有落地点,判断是不是截杀揭发球
            if (tracks[0].Status == MatchEventResult.OUT_SIDE)
            {
                tracks[0].Status = MatchEventResult.INSIDE;
                serv.EventResult = (int)MatchEventResult.INSIDE;

                ev.EventType = (int)MatchEventType.CutRecive;
                LogText.Info("ProcessRecive", "修改上条轨迹结果,将出界改为界内,当前事件为截杀事件");
            }
            else if (tracks[0].Status == MatchEventResult.INSIDE)
            {
                ev.EventType = (int)MatchEventType.CommonRecive;
                LogText.Info("ProcessRecive", "普通接发球");
            }
            DataProviderServices.instance.AddMatchEvent(serv);

            ev.EventResult = (int)processSingleTrack(tracks[1], false);

            LogText.Info("ProcessRecive", "记录当前事件的结果,并保存上一条轨迹事件到数据库中");

            return(ev);
        }
コード例 #4
0
        /// <summary>
        /// 创建新的比赛事件
        /// </summary>
        public match_event CreateNewEvent()
        {
            match_event ev = new match_event();

            ev.ID      = Guid.NewGuid().ToString();
            ev.MatchID = Id;
            ev.RoundID = currentRound.Id;
            return(ev);
        }
コード例 #5
0
        /// <summary>
        /// 二发处理
        /// </summary>
        private void SecondServ()
        {
            match_event ev = CreateNewEvent();

            //判断是内角还是外角发球
            double middleValue = Court.Width / 2;

            ///判断二发是内角还是外角发球
            if (Math.Abs(middleValue - currentRound.Tracks[1].FirstPosition.Position.X) > 2057.5)
            {
                ev.EventType = (int)MatchEventType.OutSecondServe;
            }
            else
            {
                ev.EventType = (int)MatchEventType.InnerSecondServe;
            }
            currentRound.CompetitionCount = 0;

            //二发结果
            ev.EventResult = (int)processSingleTrack(currentRound.Tracks[1], true);

            DataProviderServices.instance.AddMatchEvent(ev);
            LogText.Info("SecondServ", "二发事件:" + ev.EventType.ToString());
        }
コード例 #6
0
        /// <summary>
        /// 当前回合完成,可以分析当前回合内的数据
        /// 一发失败
        /// </summary>
        public bool CompleteRand()
        {
            IList <Track> tracks = currentRound.Tracks;

            if (tracks.Count == 0)
            {
                LogText.Error("CompleteRand", "当前回合的轨迹数为0,发生数据错误");
                return(false);
            }

            //一发
            if (tracks.Count == 1)
            {
                LogText.Info("CompleteRand", "当前回合只有1条轨迹");

                FirstServeEvent(tracks[0]);

                SetWinner(currentRound, tracks[0]);

                if (tracks[0].Status == MatchEventResult.SCORE)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else if (tracks.Count == 2)
            {
                Track firstT = tracks[0];

                ///一发失败,从第二个轨迹开始开始计算
                ///第一条轨迹已经判断过了,并且一二两条轨迹都是同一个人
                if (firstT.Status != MatchEventResult.UNKNOW && firstT.Owner.Equals(tracks[1].Owner))
                {
                    LogText.Info("CompleteRand", "一发失误,开始进行二发");

                    SecondServ();
                    //设定二发的赢球人
                    SetWinner(currentRound, tracks[1]);
                    return(true);
                }
                else
                {
                    currentRound.CompetitionCount = 1;
                    match_event reciveEvent = ProcessRecive(tracks);
                    DataProviderServices.instance.AddMatchEvent(reciveEvent);
                    SetWinner(currentRound, tracks[1]);
                    LogText.Info("CompleteRand", "普通的两条轨迹处理完成");
                }
            }
            else if (tracks.Count > 2)
            {
                LogText.Info("CompleteRand", "大于2条轨迹回合处理");
                match_event serv = ProcessRecive(tracks);

                for (int i = 2; i <= tracks.Count - 1; i++)
                {
                    match_event ev = CreateNewEvent();
                    if (tracks[i - 1].Status == MatchEventResult.OUT_SIDE)
                    {
                        tracks[i - 1].Status = MatchEventResult.INSIDE;
                        serv.EventResult     = (int)MatchEventResult.INSIDE;
                        DataProviderServices.instance.AddMatchEvent(serv);
                    }
                    ev.EventResult = (int)processSingleTrack(tracks[i], false);
                    serv           = ev;
                }
                DataProviderServices.instance.AddMatchEvent(serv);

                SetWinner(currentRound, tracks[tracks.Count - 1]);
            }
            currentRound.Save();
            return(true);
        }