Skip to content

Commit 9042fe1

Browse files
committed
New formula for Win and Lose Calculations.
1 parent 241b58c commit 9042fe1

File tree

2 files changed

+51
-66
lines changed

2 files changed

+51
-66
lines changed

Form1.Designer.cs

Lines changed: 4 additions & 28 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Form1.cs

Lines changed: 47 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1136,56 +1136,65 @@ private void waterMod_ValueChanged(object sender, EventArgs e)
11361136

11371137
public void updateRespProbabilities()
11381138
{
1139-
List<int> avgGlobalResources = new List<int>() { 10, 10, 10, 10, 10, 90, 10, 0 };
1139+
double rollNum = 50; //How many sides on the die.
1140+
int[,] avgTops = new int[3, 8]{
1141+
{13, 13, 13, 13, 13, 13, 13, 13},
1142+
{11, 11, 11, 11, 11, 11, 11, 11},
1143+
{10, 10, 10, 10, 10, 10, 10, 10}
1144+
};
1145+
List<int> partyStatModifiers = getMemberStats();
1146+
int statNum = 0;
11401147

1141-
List<int> resourceModifiers = getGlobalStats();
1148+
int totalMod = 0;
1149+
foreach(int modifier in partyStatModifiers) {
1150+
if (modifier == notAppliedModifier) continue;
1151+
1152+
int top0 = avgTops[0, statNum];
1153+
int top1 = avgTops[1, statNum];
1154+
int top2 = avgTops[2, statNum];
11421155

1143-
List<int> avgPartyStats = new List<int>() { 70, 70, 70, 60, 70, 70, 70, 70};
1156+
double[] weights = getWeights(modifier, top0, top1, top2);
11441157

1145-
List<int> partyStatModifiers = getMemberStats();
1158+
double weightedAvg = ((weights[0] * top0 + weights[1] * top1 + weights[2] * top2) / (weights[0] + weights[1] + weights[2]));
11461159

1160+
totalMod += ((int)Math.Floor(weightedAvg) - modifier);
11471161

1148-
int resourceModifier = 0;
1149-
for (int i = 0; i < avgGlobalResources.Count(); i++)
1150-
{
1151-
int currentResource = avgGlobalResources[i];
1152-
int currentResourceModifier = resourceModifiers[i];
1153-
1154-
if (currentResourceModifier != notAppliedModifier)
1155-
{
1156-
resourceModifier += currentResource - currentResourceModifier;
1157-
}
1162+
statNum++;
11581163
}
11591164

1160-
int partyStatModifier = 0;
1161-
for (int i = 0; i < avgPartyStats.Count(); i++)
1162-
{
1163-
int currentPartyStat = avgPartyStats[i];
1164-
int currentPartyStatModifier = partyStatModifiers[i];
1165+
//If rollNum = 50 (i.e. 50 sided die)
1166+
//probability that roll 0 to 50 + mod is >= 25 -> win
1167+
//probability that roll 0 to 50 + mod is < 25 -> lose
1168+
//Thus check if roll 0-50 < 25 - mod for lose or >= 25 - mod for win.
11651169

1166-
if (currentPartyStatModifier != notAppliedModifier)
1167-
{
1168-
partyStatModifier += currentPartyStat - currentPartyStatModifier;
1169-
}
1170-
}
1170+
Console.WriteLine("Total Mod: " + totalMod);
1171+
double dividor = rollNum / 2.0 - totalMod;
11711172

1172-
int totalModifier = resourceModifier + partyStatModifier;
1173+
double winInterval = Math.Floor(((rollNum - dividor) / rollNum) * 100);
1174+
double loseInterval = Math.Floor((dividor / rollNum) * 100);
11731175

1174-
//r = Random Roll 0-100 + modifier.
1175-
//r < 40 -- Lose
1176-
// 40 <= r < 60 -- pass
1177-
// r >= 60 -- Win
1176+
winInterval = Math.Min(100, Math.Max(winInterval, 0));
1177+
loseInterval = Math.Min(100, Math.Max(loseInterval, 0));
11781178

1179-
float loseThreshold = Math.Max(0, Math.Min(100, 40 - totalModifier)); //Clamp value between 0 and 100
1180-
float winThreshold = Math.Max(0, Math.Min(100, 60 - totalModifier)); //Clamp value between 0 and 100
1179+
lblProbWin.Text = (winInterval + "%");
1180+
lblProbLose.Text = (loseInterval + "%");
1181+
}
11811182

1182-
float loseInterval = loseThreshold;
1183-
float passInterval = winThreshold - loseThreshold;
1184-
float winInterval = 100 - winThreshold;
1185-
1186-
lblProbWin.Text = ((winInterval) + "%");
1187-
lblProbPass.Text = ((passInterval) + "%");
1188-
lblProbLose.Text = ((loseInterval) + "%");
1183+
private double[] getWeights(int modifier, int top0, int top1, int top2)
1184+
{
1185+
int minWeight = 1;
1186+
1187+
double dif1 = top0 - modifier;
1188+
double dif2 = top1 - modifier;
1189+
double dif3 = top2 - modifier;
1190+
1191+
double addNum = Math.Max(0, minWeight - dif3);
1192+
1193+
dif1 += addNum;
1194+
dif2 += addNum;
1195+
dif3 += addNum;
1196+
1197+
return new double[3] { dif1, dif2, dif3 };
11891198
}
11901199

11911200
private void waterCost_ValueChanged(object sender, EventArgs e)

0 commit comments

Comments
 (0)