/// <summary> /// 試合結果を反映する /// </summary> /// <param name="kind">試合結果種別</param> /// <param name="schoolGradeKind">対戦校の学校のランク</param> /// <param name="teamNumber">対戦チーム番号(リセット時の敗北の場合はs000を指定)</param> /// <param name="calledGameWinInning">コールド勝ちした場合のイニング数</param> public void ApplyGameResult(GameResultKind kind, SchoolGradeKind schoolGradeKind, TeamNumber teamNumber, int calledGameWinInning) { // コールド勝ちした場合のイニング数の設定 CalledGameWinInning = calledGameWinInning; // コールド勝ちした場合はEXP増加 if (CalledGameWinInning > 0) { foreach (GameMember member in TeamSetting.AllDefaultTeamMembers) { if (CalledGameWinInning <= 2) { member.Player.GameExp *= 5; } else if (CalledGameWinInning <= 4) { member.Player.GameExp *= 3; } else if (CalledGameWinInning <= 6) { member.Player.GameExp *= 2; } else if (CalledGameWinInning <= 8) { member.Player.GameExp *= 13 / 10; } } } // 対戦チーム番号の登録 // (リセット時の敗北の時は登録しない) if (teamNumber != TeamNumber.s000) { MatchUpTeamNumbers.Add(teamNumber); // 直近の100件までしか保管しない if (MatchUpTeamNumbers.Count > 100) { MatchUpTeamNumbers.RemoveAt(0); } } // 学校の評判ポイントの更新 UpdateSchoolGradePoint(kind, schoolGradeKind); // それ以外は試合結果ごとに分岐 switch (kind) { case GameResultKind.Win: // 勝利 Win++; LatestGameResult = GameResultKind.Win; if (CurrentCup != CupKind.AutumnPreliminary) { // リーグ戦以外 if (IsFinalGame) { // 甲子園出場回数を加算 if (CurrentCup == CupKind.AutumnCup) SpringKoshienCount++; if (CurrentCup == CupKind.SummerPreliminary) SummerKoshienCount++; // 甲子園優勝回数を加算 if (CurrentCup == CupKind.SpringKoshien) SpringKoshienVictoryCount++; if (CurrentCup == CupKind.SummerKoshien) SummerKoshienVictoryCount++; // 決勝戦を勝利した場合は大会終了 if (CurrentCup == CupKind.SummerPreliminary || CurrentCup == CupKind.AutumnCup) { // 夏の予算か秋の決勝大会の場合は次の大会の出場権獲得 IsPreviousWinner = true; } // 夏の甲子園を優勝すると3年生は引退となる if (CurrentCup == CupKind.SummerKoshien) { Graduate(); } CurrentCup = CupKind.Nothing; } else { // 決勝戦でなければ試合進行度を加算 GameRound++; } } else { // リーグ戦 LeagueWin++; ApplyLeagueResult(); } break; case GameResultKind.Lose: // 敗北 if (CurrentCup == CupKind.SummerPreliminary || CurrentCup == CupKind.SummerKoshien) { // 夏の大会であれば3年生の引退 Graduate(); } Lose++; LatestGameResult = GameResultKind.Lose; if (CurrentCup != CupKind.AutumnPreliminary) { // リーグ戦以外は大会終了 CurrentCup = CupKind.Nothing; } else { // リーグ戦 ApplyLeagueResult(); } break; case GameResultKind.Draw: // 引き分け Draw++; LatestGameResult = GameResultKind.Draw; if (CurrentCup != CupKind.AutumnPreliminary) { // リーグ戦以外の場合 // 試合進行度などを何も変更しないことで再試合を発生させる // 同じ高校と再び対戦するようにフラグを立てる IsReMatch = true; } else { // リーグ戦は引き分けでも再試合はなく、次の試合に進む(2勝以上が条件のため負けに等しい) ApplyLeagueResult(); } break; default: throw new Exception("Invalid GameResultKind"); } }
/// <summary> /// 学校の評判ポイントを更新 /// </summary> /// <param name="kind">試合結果種別</param> /// <param name="schoolGradeKind">対戦校の学校のランク</param> private void UpdateSchoolGradePoint(GameResultKind kind, SchoolGradeKind schoolGradeKind) { switch (kind) { case GameResultKind.Win: #region 勝利 // 勝利 const int basicWinValue = 1; int winValue; switch (schoolGradeKind) { case SchoolGradeKind.Week: winValue = basicWinValue * 1; break; case SchoolGradeKind.Modestly: winValue = basicWinValue * 2; break; case SchoolGradeKind.MiddleRank: winValue = basicWinValue * 4; break; case SchoolGradeKind.Powerful: winValue = basicWinValue * 8; break; case SchoolGradeKind.Great: winValue = basicWinValue * 16; break; default: throw new Exception("Invalid SchoolGradeKind"); } Instance.SchoolGradePoint = Instance.SchoolGradePoint + winValue; #endregion break; case GameResultKind.Lose: #region 敗北 // 敗北 // 格上に負けた場合はマイナスなし // 同格に負けた場合は勝った場合と同じマイナス // 格下に負けた場合も同じマイナスで何ランク格下でも同じとする(1.5倍は体感的に下がり過ぎる) const int basicLoseValue = 1; int loseValue = 0; // 現在の学校のランクで分岐 switch (Instance.SchoolGradeKind) { case SchoolGradeKind.Week: // 弱小 // そこそこまではすぐ上がるように弱小は負けても評判が下がらない break; case SchoolGradeKind.Modestly: // そこそこ switch (schoolGradeKind) { case SchoolGradeKind.Week: loseValue = basicLoseValue * 2; break; case SchoolGradeKind.Modestly: loseValue = basicLoseValue * 2; break; } break; case SchoolGradeKind.MiddleRank: // 中堅 switch (schoolGradeKind) { case SchoolGradeKind.Week: case SchoolGradeKind.Modestly: loseValue = basicLoseValue * 4; break; case SchoolGradeKind.MiddleRank: loseValue = basicLoseValue * 4; break; } break; case SchoolGradeKind.Powerful: // 強豪 switch (schoolGradeKind) { case SchoolGradeKind.Week: case SchoolGradeKind.Modestly: case SchoolGradeKind.MiddleRank: loseValue = basicLoseValue * 8; break; case SchoolGradeKind.Powerful: loseValue = basicLoseValue * 8; break; } break; case SchoolGradeKind.Great: // 名門 switch (schoolGradeKind) { case SchoolGradeKind.Week: case SchoolGradeKind.Modestly: case SchoolGradeKind.MiddleRank: case SchoolGradeKind.Powerful: loseValue = basicLoseValue * 16; break; case SchoolGradeKind.Great: loseValue = basicLoseValue * 16; break; } break; default: throw new Exception("Invalid SchoolGradeKind"); } Instance.SchoolGradePoint = Instance.SchoolGradePoint - loseValue; #endregion break; case GameResultKind.Draw: // 引き分けはポイント増減なし return; default: throw new Exception("Invalid GameResultKind"); } }