# Running Debugged vs. Non-Debugged

Hi,
I have a program that simulates a game many times and returns the percent of the time that each team won (8 teams).  I believe I have all the logics correct, but I'm finding some odd results.  When I run the program stepping through the lines (in debug mode obviously), it distributes the wins correctly.  However, when I simply run the program through for 100 trials, one team will win all 100 times.  And then if I run it again, another team will win 100 times.  Then again, and team 1 will win 84 times and team 2 will win 16 times and the other 6 teams won't win at all.  Now if I run the program through a million trials, it seems to distribute nicely.  I'm really confused as to why this would ever happen.  My logic is correct since as I said before, running the program debugged works fine.  This is C# dot net console program btw.

Here's my code:
using System;

namespace Project1
{
class Class1
{
public static void Main(string[] args)
{
int gameWinner;
double percentWon;
int[] teamGames = new int[8];

for (int xx = 1; xx <= 100; xx++)
{
gameWinner = Class1.RunGame();
teamGames[gameWinner]++;
}

for (int yy = 1; yy <= 8; yy++)
{
percentWon = (teamGames[yy - 1]/100.000);
Console.WriteLine("Team " + yy + " = " + percentWon);
}
}

public static int RunGame()
{
int team1, team2, teamondeck, pointmod, winner;
int[] teamWins = new int[8];

team1 = 1;
team2 = 2;
teamondeck = 3;
pointmod = 1;
Random r = new Random();

while (true)
{
if (r.NextDouble() >= .5)
{
teamWins[team1 - 1] = teamWins[team1 - 1] + pointmod;
if (teamWins[team1 - 1] >= 7)
{
winner = team1 - 1;
break;
}
team2 = teamondeck;
teamondeck++;
}
else
{
teamWins[team2 - 1] = teamWins[team2 - 1] + pointmod;
if (teamWins[team2 - 1] >= 7)
{
winner = team2 - 1;
break;
}
team1 = team2;
team2 = teamondeck;
teamondeck++;
}
if (teamondeck > 8)
{
teamondeck = 1;
pointmod = 2;
}
}
return winner;
}
}
}

I'd appreciate any help.  Thanks!!
###### Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x

Commented:
I found by making the variable r a global variable your program works correctly. Not sure if I can explain why it doesn't work the way that you have it. But if i basically set up a random numbe rin a fuction and fill a listbox continually I get the same number for many consecutive values then it changes and repeats those many times , on and on.

Well here is your code modified and it seems to work now.

using System;

namespace Project1
{
class Class1
{
static Random r;

public static void Main(string[] args)
{
int gameWinner;
double percentWon;
int[] teamGames = new int[8];
r = new Random(); //((int)DateTime.Now.Ticks)

for (int xx = 1; xx <= 100; xx++)
{
gameWinner = Class1.RunGame();
teamGames[gameWinner]++;
}

for (int yy = 1; yy <= 8; yy++)
{
percentWon = (teamGames[yy - 1]/100.000);
Console.WriteLine("Team " + yy + " = " + percentWon);
}

}

public static int RunGame()
{
int team1, team2, teamondeck, pointmod, winner;
int[] teamWins = new int[8];

team1 = 1;
team2 = 2;
teamondeck = 3;
pointmod = 1;

while (true)
{
if (r.NextDouble() >= .5)
{
teamWins[team1 - 1] = teamWins[team1 - 1] + pointmod;
if (teamWins[team1 - 1] >= 7)
{
winner = team1 - 1;
break;
}
team2 = teamondeck;
teamondeck++;
}
else
{
teamWins[team2 - 1] = teamWins[team2 - 1] + pointmod;
if (teamWins[team2 - 1] >= 7)
{
winner = team2 - 1;
break;
}
team1 = team2;
team2 = teamondeck;
teamondeck++;
}
if (teamondeck > 8)
{
teamondeck = 1;
pointmod = 2;
}
}
return winner;
}
}
}

Hope this helps.

Good luck
0

Author Commented:
Excellent, GrumbleBot!!  This was driving me crazy .. I guess C# doesn't re-seed the random variable when it's re-created.  Very strange, but I'm glad you caught it.  Thanks millions.
0