public void InitializeBoard(IBoard board, IScoreInfo scoreInfo, ITetromino tetromino) { this.DrawBorder(board); this.DrawBoard(board); this.DisplayInfo(board, scoreInfo); this.DisplayNextTetromino(board, tetromino); }
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; }
///<inheritdoc/> public override double GetCount300Rate(IScoreInfo info) { if (info is null) { return(0d); } return((double)info.Count300 / (info.Count300 + info.Count100 + info.CountMiss)); }
/// <inheritdoc/> public override bool IsPerfect(IScoreInfo info) { if (info is null) { return(false); } return(info.Count100 + info.Count50 + info.CountMiss == 0); }
///<inheritdoc/> public override int GetPassedHitObjectCount(IScoreInfo info) { if (info is null) { return(0); } return(info.Count300 + info.Count100); }
///<inheritdoc/> public override double GetCountGekiRate(IScoreInfo info) { if (info is null) { return(0d); } return(AccuracyCalc(info)); }
/// <inheritdoc/> public override double GetCountGekiRate(IScoreInfo info) { if (info is null) { return(0d); } return(GetCount300Rate(info)); }
///<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; }
/// <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); }
/// <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); }
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); } }
/// <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); }
///<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); }
/// <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); }
///<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); }
/// <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); }
/// <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); }
/// <summary> /// 300出现率的计算方法 /// </summary> /// <param name="info"></param> /// <returns></returns> public virtual double GetCount300Rate(IScoreInfo info) { return(0); }
/// <inheritdoc/> public override bool IsPerfect(IScoreInfo info) { return(!(info is null) && info.PlayerMaxCombo == info.MaxCombo); }
/// <inheritdoc/> public override int GetPassedHitObjectCount(IScoreInfo info) { return(info is null ? 0 : info.Count300 + info.Count100 + info.Count50 + info.CountMiss); }
/// <summary> /// 获取游戏中出现过的HitObject在总HitObject中的占比 /// </summary> /// <param name="info"></param> /// <returns></returns> public virtual double GetHitObjectPercent(IScoreInfo info) => GetPassedHitObjectCount(info) / (double)GetBeatmapHitObjectCount(info.Beatmap, info.Mods);
/// <summary> /// 获取当前谱面的最大连击 /// </summary> /// <param name="info"></param> /// <returns></returns> public virtual int GetBeatmapMaxCombo(IScoreInfo info) => info.Beatmap.HitObjects.Count;
/// <summary> /// 当前的评级的判定方法 /// </summary> /// <param name="info"></param> /// <returns></returns> public virtual GameRanking GetRanking(IScoreInfo info) { return(GameRanking.Unknown); }
/// <summary> /// 判断成绩是否达到Perfect判定 /// </summary> /// <param name="info"></param> /// <returns></returns> public virtual bool IsPerfect(IScoreInfo info) { return(false); }
/// <summary> /// 获取已经经过了的HitObject的数量 /// </summary> /// <param name="info"></param> /// <returns></returns> public virtual int GetPassedHitObjectCount(IScoreInfo info) { return(0); }
/// <summary> /// 这个模式的准度计算方法 /// </summary> /// <param name="scoreInfo"></param> /// <returns></returns> public virtual double AccuracyCalc(IScoreInfo scoreInfo) { return(0); }
private bool checkEquality(IScoreInfo x, IScoreInfo y) => x.OnlineID == y.OnlineID;
/// <summary> /// A user-presentable display title representing this score. /// </summary> public static string GetDisplayTitle(this IScoreInfo scoreInfo) => $"{scoreInfo.User.Username} playing {scoreInfo.Beatmap.GetDisplayTitle()}";
///<inheritdoc/> public override double GetHitObjectPercent(IScoreInfo info) => GetPassedHitObjectCount(info) / (double)GetBeatmapMaxCombo(info);