Edit #2: The random numbers work now however if you put the same one in as before eg. if n1 = 7 and you put in 7 twice it will print 7 is correct twice but only add one to the display. At the same time you can also find the other number thats correct.
Edit: I know you guys are marking this a duplicate but it does not help at all because I don't understand that thread.
I need this to work by tomorrow so any help would work.
I have this game for a class and inside of the game I have this safe cracking puzzle thing and I cant seem to get it to work.
The first problem is that when you pass 20 guesses it plays the generateCombo(); WriteLine(); infinitely.
The second is the first 2 numbers are always different but numbers 2, 3 and 4 are ALWAYS the same.
I just started coding this year and don't know to much about how to fix an infinite loop.
Thanks in advance!
class Safe
{
public bool safeLocked { get; set; }
public int guesses { get; set; }
public int cn1 { get; set; }
public int cn2 { get; set; }
public int cn3 { get; set; }
public int cn4 { get; set; }
public int num1 { get; set; }
public int num2 { get; set; }
public int num3 { get; set; }
public int num4 { get; set; }
}
class Guesses
{
public string puzzleGuess { get; set; }
}
public static void Main(string[] args)
{
static Guesses numberOf = new Guesses();
static Safe safe = new Safe();
safe.guesses = 0;
safe.safeLocked = true;
safe.cn1 = 0;
safe.cn2 = 0;
safe.cn3 = 0;
safe.cn4 = 0;
}
public static void generateCombo()
{
safe.cn1 = 0;
safe.cn2 = 0;
safe.cn3 = 0;
safe.cn4 = 0;
Random n = new Random();
//First number
safe.num1 = n.Next(1, 10);
//Second number
safe.num2 = n.Next(1, 10);
//Third number
safe.num3 = n.Next(1, 10);
//Fourth number
safe.num4 = n.Next(1, 10);
Console.WriteLine("A new combonation has been generated.");
Console.ReadLine();
safeCracking();
}
public static void printScreen()
{
Console.Clear();
Console.ForegroundColor = ConsoleColor.Green;
Console.Write("Guesses: ");
Console.ResetColor();
Console.WriteLine("{0}", safe.guesses);
Console.WriteLine("");
Console.WriteLine(" ================================= ");
Console.WriteLine(" | | | | | ");
Console.WriteLine(" | | | | | ");
Console.WriteLine(" | {0} | {1} | {2} | {3} | ", safe.cn1, safe.cn2, safe.cn3, safe.cn4);
Console.WriteLine(" | | | | | ");
Console.WriteLine(" | | | | | ");
Console.WriteLine(" ================================= ");
Console.WriteLine("");
Console.WriteLine("Guess the numbers of the combination one by one.");
Console.WriteLine("");
Console.Write(safe.num1);
Console.Write(safe.num2);
Console.Write(safe.num3);
Console.Write(safe.num4);
}
public static void safeCracking()
{
string numg;
int numberG;
for (safe.guesses = 0; safe.guesses < 20;)
{
printScreen();
try
{
numg = Console.ReadLine();
numberG = int.Parse(numg);
}
catch
{
numg = "";
numberG = 0;
}
numberOf.puzzleGuess = numg;
//Check number 4
if (safe.cn3 > 0 && (numg == safe.num4.ToString()) && safe.cn4 == 0)
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("");
Console.WriteLine("{0} Is Correct!", numberOf.puzzleGuess);
Console.ResetColor();
safe.safeLocked = false;
safe.cn4 = numberG;
safeUnlocked();
break;
}
//Check number 3
else if (safe.cn2 > 0 && (numg == safe.num3.ToString()) && safe.cn3 == 0)
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("");
Console.WriteLine("{0} Is Correct!", numberOf.puzzleGuess);
Console.ResetColor();
safe.cn3 = numberG;
Console.ReadLine();
}
//Check number 2
else if (safe.cn1 > 0 && (numg == safe.num2.ToString()) && safe.cn2 == 0)
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("");
Console.WriteLine("{0} Is Correct!", numberOf.puzzleGuess);
Console.ResetColor();
safe.cn2 = numberG;
Console.ReadLine();
}
//Check number 1
else if (safe.cn1 <= 0 && (numg == safe.num1.ToString()) && safe.cn1 == 0)
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("");
Console.WriteLine("{0} Is Correct!", numberOf.puzzleGuess);
Console.ResetColor();
safe.cn1 = numberG;
Console.ReadLine();
}
else {
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("");
Console.WriteLine("{0} Is Incorrect!", numberOf.puzzleGuess);
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine("Press Enter to continue...");
Console.ResetColor();
Console.ReadLine();
safe.guesses++;
}
}
generateCombo();
safe.guesses = 0;
}
public static void safeUnlocked()
{
Console.Clear();
Console.WriteLine("The latch on the safe pops open and you give the door a pull.");
Console.ReadLine();
Console.WriteLine("Inside of the safe you find a medallion and 3 red potions.");
Console.ForegroundColor = ConsoleColor.Blue;
Console.ReadLine();
Console.WriteLine("MEDALLION ADDED TO INVENTORY AND PLAYER DAMAGE 2X...");
Console.ReadLine();
Console.WriteLine("3 HEALTH POTIONS ADDED TO INVENTORY...");
Console.ResetColor();
Console.ReadLine();
Console.WriteLine("As soon as you grab the last potion the roof opens and you hear a deep voice mumbling.");
Console.ReadLine();
Console.ForegroundColor = ConsoleColor.Magenta;
switch (playerClass.richtofen)
{
case 0:
Console.WriteLine("THE PURPLE KEEPER HAS AWOKEN...");
purpleKeeperBattle();
Console.ResetColor();
return;
case 1:
Console.WriteLine("THE SHADOW MAN HAS AWOKEN...");
shadowManBattle();
Console.ResetColor();
return;
}
}