added points calculation to challenge mode
This commit is contained in:
1 parent
4fd98ee1a3
commit
8cbccc7f95
2 files changed
+148
-11
No files matched your search
@@ -9,13 +9,13 @@ namespace Vocaluxe.PartyModes
|
||||
public class ChallengeRounds
|
||||
{
|
||||
private Random _Rand;
|
||||
private List<Combination> _Rounds;
|
||||
private int _NumPlayer;
|
||||
|
||||
public List<Combination> Rounds;
|
||||
|
||||
public ChallengeRounds(int NumRounds, int NumPlayer, int NumPlayerAtOnce)
|
||||
{
|
||||
_Rounds = new List<Combination>();
|
||||
Rounds = new List<Combination>();
|
||||
_Rand = new Random(System.DateTime.Now.Millisecond);
|
||||
|
||||
if (NumPlayerAtOnce < 1 || NumRounds < 1 || NumPlayer == 0)
|
||||
@@ -29,21 +29,21 @@ namespace Vocaluxe.PartyModes
|
||||
|
||||
public Combination GetRound(int RoundNr)
|
||||
{
|
||||
if (RoundNr >= _Rounds.Count || _NumPlayer == 0 || _Rounds.Count == 0)
|
||||
if (RoundNr >= Rounds.Count || _NumPlayer == 0 || Rounds.Count == 0)
|
||||
return null;
|
||||
|
||||
return _Rounds[RoundNr];
|
||||
return Rounds[RoundNr];
|
||||
}
|
||||
|
||||
private void BuildRounds(int NumRounds, int NumPlayerAtOnce, Random Rand)
|
||||
{
|
||||
Combinations Combinations = new Combinations(_NumPlayer, NumPlayerAtOnce, Rand);
|
||||
_Rounds.Add(Combinations.GetNextCombination(null));
|
||||
Rounds.Add(Combinations.GetNextCombination(null));
|
||||
|
||||
for (int i = 1; i < NumRounds; i++)
|
||||
{
|
||||
|
||||
_Rounds.Add(Combinations.GetNextCombination(GetPlayerDemand(i)));
|
||||
Rounds.Add(Combinations.GetNextCombination(GetPlayerDemand(i)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ namespace Vocaluxe.PartyModes
|
||||
|
||||
for (int i = 0; i < RoundIndex; i++)
|
||||
{
|
||||
foreach (int PlayerIndex in _Rounds[i].Player)
|
||||
foreach (int PlayerIndex in Rounds[i].Player)
|
||||
{
|
||||
NumPlayed[PlayerIndex]++;
|
||||
}
|
||||
@@ -70,7 +70,7 @@ namespace Vocaluxe.PartyModes
|
||||
max = p;
|
||||
}
|
||||
|
||||
int num = _Rounds[0].Player.Count;
|
||||
int num = Rounds[0].Player.Count;
|
||||
List<int> result = new List<int>();
|
||||
List<int> other = new List<int>();
|
||||
List<int> last = new List<int>();
|
||||
@@ -83,7 +83,7 @@ namespace Vocaluxe.PartyModes
|
||||
{
|
||||
if (RoundIndex > 0)
|
||||
{
|
||||
if (!_Rounds[RoundIndex - 1].IsAvailable(i))
|
||||
if (!Rounds[RoundIndex - 1].IsAvailable(i))
|
||||
other.Add(i);
|
||||
else
|
||||
last.Add(i);
|
||||
|
||||
@@ -24,8 +24,20 @@ namespace Vocaluxe.PartyModes
|
||||
public struct DataToScreenMain
|
||||
{
|
||||
public int CurrentRoundNr;
|
||||
|
||||
public List<Combination> Combs;
|
||||
public List<ResultTableRow> ResultTable;
|
||||
}
|
||||
|
||||
public struct ResultTableRow
|
||||
{
|
||||
public int PlayerID;
|
||||
public int NumWon;
|
||||
public int NumDrawn;
|
||||
public int NumLost;
|
||||
public int SumSingPoints;
|
||||
public int NumGamePoints;
|
||||
}
|
||||
|
||||
#endregion ToScreen
|
||||
|
||||
#region FromScreen
|
||||
@@ -82,10 +94,21 @@ namespace Vocaluxe.PartyModes
|
||||
public List<int> ProfileIDs;
|
||||
|
||||
public ChallengeRounds Rounds;
|
||||
public List<ResultTableRow> ResultTable;
|
||||
|
||||
public int CurrentRoundNr;
|
||||
}
|
||||
|
||||
struct Stats
|
||||
{
|
||||
public int ProfileID;
|
||||
public int SingPoints;
|
||||
public int GamePoints;
|
||||
public int Won;
|
||||
public int Drawn;
|
||||
public int Lost;
|
||||
}
|
||||
|
||||
private DataToScreenConfig ToScreenConfig;
|
||||
private DataToScreenNames ToScreenNames;
|
||||
private DataToScreenMain ToScreenMain;
|
||||
@@ -126,6 +149,9 @@ namespace Vocaluxe.PartyModes
|
||||
_ScreenSongOptions.Sorting.SongSorting = ESongSorting.TR_CONFIG_FOLDER;
|
||||
_ScreenSongOptions.Sorting.Tabs = EOffOn.TR_CONFIG_ON;
|
||||
|
||||
ToScreenMain.ResultTable = new List<ResultTableRow>();
|
||||
GameData.ResultTable = new List<ResultTableRow>();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -234,7 +260,10 @@ namespace Vocaluxe.PartyModes
|
||||
if (_Screens != null)
|
||||
{
|
||||
GameData.Rounds = new ChallengeRounds(GameData.NumRounds, GameData.NumPlayer, GameData.NumPlayerAtOnce);
|
||||
GameData.CurrentRoundNr = 0;
|
||||
GameData.CurrentRoundNr = 1;
|
||||
ToScreenMain.CurrentRoundNr = 1;
|
||||
ToScreenMain.Combs = GameData.Rounds.Rounds;
|
||||
UpdateScores();
|
||||
Screen.DataToScreen(ToScreenMain);
|
||||
}
|
||||
break;
|
||||
@@ -244,7 +273,13 @@ namespace Vocaluxe.PartyModes
|
||||
case EStage.Singing:
|
||||
_Screens.TryGetValue("PartyScreenChallengeMain", out Screen);
|
||||
if (_Screens != null)
|
||||
{
|
||||
UpdateScores();
|
||||
ToScreenMain.CurrentRoundNr = GameData.CurrentRoundNr;
|
||||
ToScreenMain.Combs = GameData.Rounds.Rounds;
|
||||
|
||||
Screen.DataToScreen(ToScreenMain);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -443,5 +478,107 @@ namespace Vocaluxe.PartyModes
|
||||
_ScreenSongOptions.Selection.TeamNames[i] = "foobar";
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateScores()
|
||||
{
|
||||
if (GameData.ResultTable.Count == 0)
|
||||
{
|
||||
for (int i = 0; i < GameData.NumPlayer; i++)
|
||||
{
|
||||
ResultTableRow row = new ResultTableRow();
|
||||
row.PlayerID = GameData.ProfileIDs[i];
|
||||
row.NumWon = 0;
|
||||
row.NumDrawn = 0;
|
||||
row.NumLost = 0;
|
||||
row.SumSingPoints = 0;
|
||||
row.NumGamePoints = 0;
|
||||
GameData.ResultTable.Add(row);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
SPlayer[] results = _Base.Game.GetPlayer();
|
||||
if (results == null)
|
||||
return;
|
||||
|
||||
if (results.Length < GameData.NumPlayerAtOnce)
|
||||
return;
|
||||
|
||||
List<Stats> points = GetPointsForPlayer(results);
|
||||
|
||||
for (int i = 0; i < GameData.NumPlayerAtOnce; i++)
|
||||
{
|
||||
int index = -1;
|
||||
for (int j = 0; j < GameData.ResultTable.Count; j++)
|
||||
{
|
||||
if (results[i].ProfileID == GameData.ResultTable[i].PlayerID)
|
||||
{
|
||||
index = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (index != -1)
|
||||
{
|
||||
ResultTableRow row = GameData.ResultTable[index];
|
||||
|
||||
row.NumWon += points[i].Won;
|
||||
row.NumDrawn += points[i].Drawn;
|
||||
row.NumLost += points[i].Lost;
|
||||
row.SumSingPoints += points[i].SingPoints;
|
||||
row.NumGamePoints += points[i].GamePoints;
|
||||
|
||||
GameData.ResultTable[index] = row;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private List<Stats> GetPointsForPlayer(SPlayer[] Results)
|
||||
{
|
||||
List<Stats> result = new List<Stats>();
|
||||
for(int i = 0; i < GameData.NumPlayerAtOnce; i++)
|
||||
{
|
||||
Stats stat = new Stats();
|
||||
stat.ProfileID = Results[i].ProfileID;
|
||||
stat.SingPoints = (int)Results[i].Points;
|
||||
stat.Won = 0;
|
||||
stat.Drawn = 0;
|
||||
stat.Lost = 0;
|
||||
stat.GamePoints = 0;
|
||||
result.Add(stat);
|
||||
}
|
||||
|
||||
result.Sort(delegate(Stats s1, Stats s2) { return s1.SingPoints.CompareTo(s2.SingPoints); });
|
||||
|
||||
int current = result[result.Count - 1].SingPoints;
|
||||
int points = result.Count;
|
||||
|
||||
for (int i = result.Count - 1; i >= 0; i--)
|
||||
{
|
||||
Stats res = result[i];
|
||||
|
||||
if (i < result.Count - 1)
|
||||
{
|
||||
if (current > res.SingPoints)
|
||||
{
|
||||
res.GamePoints = i * 2;
|
||||
}
|
||||
else
|
||||
res.GamePoints = points;
|
||||
}
|
||||
else
|
||||
res.GamePoints = i * 2;
|
||||
|
||||
current = res.SingPoints;
|
||||
points = res.GamePoints;
|
||||
|
||||
result[i] = res;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user