示例#1
0
 public void InitializeBoard(IBoard board, IScoreInfo scoreInfo, ITetromino tetromino)
 {
     this.DrawBorder(board);
     this.DrawBoard(board);
     this.DisplayInfo(board, scoreInfo);
     this.DisplayNextTetromino(board, tetromino);
 }
示例#2
0
 public ScoresController(PogiDbContext context, IScoreInfo scoreInfo,
                         SignInManager <ApplicationUser> signInManager,
                         UserManager <ApplicationUser> userManager, IMemberData memberData, ICourseData courseData,
                         ICourseDetail courseDetail,
                         IHandicap handicap,
                         ITourInfo tourInfo,
                         ITourDay tourDayInfo,
                         ITeeTimeInfo teeTimeInfo,
                         IHttpContextAccessor httpContextAccessor,
                         IActivity activity,
                         IDateTime dateTime)
 {
     _context             = context;
     _scoreInfo           = scoreInfo;
     _signInManager       = signInManager;
     _userManager         = userManager;
     _memberData          = memberData;
     _courseData          = courseData;
     _courseDetail        = courseDetail;
     _handicap            = handicap;
     _tourInfo            = tourInfo;
     _tourDayInfo         = tourDayInfo;
     _teeTimeInfo         = teeTimeInfo;
     _httpContextAccessor = httpContextAccessor;
     _activity            = activity;
     _dateTime            = dateTime;
 }
示例#3
0
 ///<inheritdoc/>
 public override double GetCount300Rate(IScoreInfo info)
 {
     if (info is null)
     {
         return(0d);
     }
     return((double)info.Count300 / (info.Count300 + info.Count100 + info.CountMiss));
 }
示例#4
0
 /// <inheritdoc/>
 public override bool IsPerfect(IScoreInfo info)
 {
     if (info is null)
     {
         return(false);
     }
     return(info.Count100 + info.Count50 + info.CountMiss == 0);
 }
示例#5
0
 ///<inheritdoc/>
 public override int GetPassedHitObjectCount(IScoreInfo info)
 {
     if (info is null)
     {
         return(0);
     }
     return(info.Count300 + info.Count100);
 }
示例#6
0
 ///<inheritdoc/>
 public override double GetCountGekiRate(IScoreInfo info)
 {
     if (info is null)
     {
         return(0d);
     }
     return(AccuracyCalc(info));
 }
示例#7
0
 /// <inheritdoc/>
 public override double GetCountGekiRate(IScoreInfo info)
 {
     if (info is null)
     {
         return(0d);
     }
     return(GetCount300Rate(info));
 }
示例#8
0
        ///<inheritdoc/>
        public override double AccuracyCalc(IScoreInfo scoreInfo)
        {
            double c300     = scoreInfo.Count300;
            double c100     = scoreInfo.Count100;
            double cMiss    = scoreInfo.CountMiss;
            var    rawValue = (c300 + c100 * 0.5d) / (c300 + c100 + cMiss);

            return(double.IsNaN(rawValue) ? 0 : double.IsInfinity(rawValue) ? 0 : rawValue);
        }
 public Game(IBoard board, IScoreInfo scoreInfo, int tetrominoDropRate, int tetrominoDropRateIncrease)
 {
     this.Board                     = board;
     this.DropTimer                 = new Stopwatch();
     this.ScoreInfo                 = scoreInfo;
     this.TetrominoFactory          = new TetrominoFactory();
     this.TetrominoRepository       = new TetrominoRepository();
     this.TetrominoDropRate         = tetrominoDropRate - (scoreInfo.Level - 1) * tetrominoDropRateIncrease;
     this.TetrominoDropRateIncrease = tetrominoDropRateIncrease;
 }
示例#10
0
        /// <inheritdoc/>
        public override double GetCount300Rate(IScoreInfo info)
        {
            var rawValue = info.Count300 / (double)(info.Count300 + info.Count100 + info.Count50 + info.CountMiss);

            if (double.IsNaN(rawValue) || double.IsInfinity(rawValue))
            {
                return(0d);
            }
            return(rawValue);
        }
示例#11
0
        /// <inheritdoc/>
        public override double GetCountGekiRate(IScoreInfo info)
        {
            var rawValue = info.CountGeki / (double)(info.CountGeki + info.CountKatu);

            if (double.IsNaN(rawValue) || double.IsInfinity(rawValue))
            {
                return(0d);
            }
            return(rawValue);
        }
示例#12
0
 public void DisplayInfo(IBoard board, IScoreInfo scoreInfo)
 {
     ConsoleWriter.WriteLineOnPosition(board.Width * 2 + 5, 0, Constants.LevelLable + scoreInfo.Level);
     ConsoleWriter.WriteLineOnPosition(board.Width * 2 + 5, 1, Constants.ScoreLable + scoreInfo.Score);
     ConsoleWriter.WriteLineOnPosition(board.Width * 2 + 5, 2, Constants.LinesClearedLable + scoreInfo.LinesCleared);
     if (AuthenticationManager.IsAuthenticated())
     {
         ConsoleWriter.WriteLineOnPosition(board.Width * 2 + 5, 3,
                                           Constants.CurrentPlayerNameLabel + AuthenticationManager.GetCurrentUser().Name);
     }
 }
示例#13
0
        /// <inheritdoc/>
        public override GameRanking GetRanking(IScoreInfo info)
        {
            if (info is null)
            {
                return(GameRanking.Unknown);
            }

            var    noMiss   = info.CountMiss == 0;
            double all      = info.Count300 + info.Count100 + info.Count50 + info.CountMiss;
            var    c100Rate = info.Count100 / all;
            var    c50Rate  = info.Count50 / all;
            var    isHdOrFl = false;

            if (info.Mods.Count > 0)
            {
                isHdOrFl = info.Mods.Contains(typeof(HiddenMod)) || info.Mods.Contains(typeof(FlashlightMod));
            }
            if (Math.Abs(AccuracyCalc(info) * 100 - 100) == 0 && Math.Abs(info.Count300 - all) == 0)
            {
                if (isHdOrFl)
                {
                    return(GameRanking.SSH);
                }
                return(GameRanking.SS);
            }

            if (AccuracyCalc(info) * 100 > 93.17 && c50Rate < 0.01 && c100Rate < 0.1 && GetCount300Rate(info) > 0.9 &&
                noMiss)
            {
                if (isHdOrFl)
                {
                    return(GameRanking.SH);
                }
                return(GameRanking.S);
            }

            if (GetCount300Rate(info) > 0.8 && noMiss || GetCount300Rate(info) > 0.9 && !noMiss)
            {
                return(GameRanking.A);
            }

            if (GetCount300Rate(info) > 0.8 && !noMiss || GetCount300Rate(info) > 0.7 && noMiss)
            {
                return(GameRanking.B);
            }

            if (GetCount300Rate(info) > 0.6)
            {
                return(GameRanking.C);
            }

            return(GameRanking.D);
        }
示例#14
0
        ///<inheritdoc/>
        public override GameRanking GetRanking(IScoreInfo info)
        {
            if (info is null)
            {
                return(GameRanking.Unknown);
            }
            var isHdOrFl = false;

            if (info.Mods.Count > 0)
            {
                isHdOrFl = info.Mods.Contains(typeof(HiddenMod)) || info.Mods.Contains(typeof(FlashlightMod));
            }
            if (Math.Abs(AccuracyCalc(info) * 100 - 100) == 0)
            {
                if (isHdOrFl)
                {
                    return(GameRanking.SSH);
                }
                return(GameRanking.SS);
            }

            if (AccuracyCalc(info) * 100 > 98.01)
            {
                if (isHdOrFl)
                {
                    return(GameRanking.SH);
                }
                return(GameRanking.S);
            }

            if (AccuracyCalc(info) * 100 > 94)
            {
                return(GameRanking.A);
            }

            if (AccuracyCalc(info) * 100 > 90)
            {
                return(GameRanking.B);
            }

            if (AccuracyCalc(info) * 100 > 85)
            {
                return(GameRanking.C);
            }

            if (AccuracyCalc(info) * 100 < 85)
            {
                return(GameRanking.D);
            }

            return(GameRanking.Unknown);
        }
示例#15
0
        /// <inheritdoc/>
        public override double AccuracyCalc(IScoreInfo scoreInfo)
        {
            double c300g    = scoreInfo.CountGeki;
            double c300     = scoreInfo.Count300;
            double c200     = scoreInfo.CountKatu;
            double c50      = scoreInfo.Count50;
            double c100     = scoreInfo.Count100;
            double cMiss    = scoreInfo.CountMiss;
            var    rawValue = (c300g + c300 + c200 * (2 / 3.0) + c100 * (1.0 / 3) + c50 * (1 / 6.0)) /
                              (c300g + c300 + c100 + c200 + c50 + cMiss);

            return(double.IsNaN(rawValue) ? 0 : double.IsInfinity(rawValue) ? 0 : rawValue);
        }
示例#16
0
        ///<inheritdoc/>
        public override double AccuracyCalc(IScoreInfo scoreInfo)
        {
            if (scoreInfo is null)
            {
                return(0);
            }
            double c300  = scoreInfo.Count300;
            double c200  = scoreInfo.CountKatu;
            double c50   = scoreInfo.Count50;
            double c100  = scoreInfo.Count100;
            double cMiss = scoreInfo.CountMiss;

            var rawValue = (c300 + c100 + c50) / (c300 + c100 + c200 + c50 + cMiss);

            return(double.IsNaN(rawValue) ? 0 : double.IsInfinity(rawValue) ? 0 : rawValue);
        }
示例#17
0
        /// <inheritdoc/>
        public override GameRanking GetRanking(IScoreInfo info)
        {
            if (info is null)
            {
                return(GameRanking.Unknown);
            }
            bool isHdOrFl = false;

            if (info.Mods.Count > 0)
            {
                isHdOrFl = info.Mods.Contains(typeof(HiddenMod)) || info.Mods.Contains(typeof(FlashlightMod));
            }
            return(AccuracyCalc(info) * 100 >= 100 ? isHdOrFl ? GameRanking.SSH : GameRanking.SS :
                   AccuracyCalc(info) * 100 > 95 ? isHdOrFl ? GameRanking.SH : GameRanking.S :
                   AccuracyCalc(info) * 100 > 90 ? GameRanking.A :
                   AccuracyCalc(info) * 100 > 80 ? GameRanking.B :
                   AccuracyCalc(info) * 100 > 70 ? GameRanking.C :
                   GameRanking.D);
        }
示例#18
0
        /// <inheritdoc/>
        public override double GetCount300Rate(IScoreInfo info)
        {
            if (info is null)
            {
                return(0d);
            }
            double rawValue;

            if (info.CountGeki > 0 && info.Count300 == 0)
            {
                rawValue = GetCountGekiRate(info);
            }
            else
            {
                rawValue = (info.Count300 + info.CountGeki) /
                           (double)(info.CountGeki + info.Count300 + info.CountKatu + info.Count100 + info.Count50 + info.CountMiss);
            }
            if (double.IsNaN(rawValue) || double.IsInfinity(rawValue))
            {
                return(0d);
            }
            return(rawValue);
        }
示例#19
0
 /// <summary>
 ///     300出现率的计算方法
 /// </summary>
 /// <param name="info"></param>
 /// <returns></returns>
 public virtual double GetCount300Rate(IScoreInfo info)
 {
     return(0);
 }
示例#20
0
 /// <inheritdoc/>
 public override bool IsPerfect(IScoreInfo info)
 {
     return(!(info is null) && info.PlayerMaxCombo == info.MaxCombo);
 }
示例#21
0
 /// <inheritdoc/>
 public override int GetPassedHitObjectCount(IScoreInfo info)
 {
     return(info is null ? 0 : info.Count300 + info.Count100 + info.Count50 + info.CountMiss);
 }
示例#22
0
 /// <summary>
 /// 获取游戏中出现过的HitObject在总HitObject中的占比
 /// </summary>
 /// <param name="info"></param>
 /// <returns></returns>
 public virtual double GetHitObjectPercent(IScoreInfo info) =>
 GetPassedHitObjectCount(info) / (double)GetBeatmapHitObjectCount(info.Beatmap, info.Mods);
示例#23
0
 /// <summary>
 /// 获取当前谱面的最大连击
 /// </summary>
 /// <param name="info"></param>
 /// <returns></returns>
 public virtual int GetBeatmapMaxCombo(IScoreInfo info) => info.Beatmap.HitObjects.Count;
示例#24
0
 /// <summary>
 ///     当前的评级的判定方法
 /// </summary>
 /// <param name="info"></param>
 /// <returns></returns>
 public virtual GameRanking GetRanking(IScoreInfo info)
 {
     return(GameRanking.Unknown);
 }
示例#25
0
 /// <summary>
 ///     判断成绩是否达到Perfect判定
 /// </summary>
 /// <param name="info"></param>
 /// <returns></returns>
 public virtual bool IsPerfect(IScoreInfo info)
 {
     return(false);
 }
示例#26
0
 /// <summary>
 ///     获取已经经过了的HitObject的数量
 /// </summary>
 /// <param name="info"></param>
 /// <returns></returns>
 public virtual int GetPassedHitObjectCount(IScoreInfo info)
 {
     return(0);
 }
示例#27
0
 /// <summary>
 ///     这个模式的准度计算方法
 /// </summary>
 /// <param name="scoreInfo"></param>
 /// <returns></returns>
 public virtual double AccuracyCalc(IScoreInfo scoreInfo)
 {
     return(0);
 }
示例#28
0
 private bool checkEquality(IScoreInfo x, IScoreInfo y) => x.OnlineID == y.OnlineID;
示例#29
0
 /// <summary>
 /// A user-presentable display title representing this score.
 /// </summary>
 public static string GetDisplayTitle(this IScoreInfo scoreInfo) => $"{scoreInfo.User.Username} playing {scoreInfo.Beatmap.GetDisplayTitle()}";
示例#30
0
 ///<inheritdoc/>
 public override double GetHitObjectPercent(IScoreInfo info) =>
 GetPassedHitObjectCount(info) / (double)GetBeatmapMaxCombo(info);