static void Main(string[] args) { //create the instances of our objects to be used in this program //you can check for additional namespaces that may be needed to use your objects //we need to have a structure that will allow one to hold an unknown number of instances //of a variable //List<T> is an object that holds x number of datatype instances //The new List<T> physically creates the instance of List<T> in memory. //The constructor of List<T> is called List <Turn> gameTurns = new List <Turn>(); //create 2 instances of the Die object Die Player1Dice = new Die(); //default contructor Die Player2Dice = new Die(6, "green"); //greedy constructor string menuChoice = ""; do { Console.WriteLine("Game Menu: \n"); Console.WriteLine("A) Set Die side count"); Console.WriteLine("B) Roll the dice"); Console.WriteLine("C) Display all game turn results"); Console.WriteLine("X) Exit"); Console.Write("Enter menu choice: "); menuChoice = Console.ReadLine(); switch (menuChoice.ToUpper()) { case "A": { //logic can de done using a method //Console.WriteLine("You selected A"); //the method will need to have the local variables Player1Dice and Player2Dice passed to it //Objects are passed as references SetDiceSides(Player1Dice, Player2Dice); break; } case "B": { //logic can be done actually inside the case //one does not have to always call a method //Console.WriteLine("You selected B"); //Roll the dice for each player //The dot operator is used with your instance to access a Property of a Behaviour Player1Dice.Roll(); Player2Dice.Roll(); //record the result of the roll for this turn //we need to create a new instance of the Turn class Turn aturn = new Turn(); //assign the facevalue of each dice to the Turn instance // SET GET aturn.Player1DiceValue = Player1Dice.FaceValue; aturn.Player2DiceValue = Player2Dice.FaceValue; //determine your battle results //it does not matter in this logic whether we use the values from aturn or the Die variables if (aturn.Player1DiceValue > Player2Dice.FaceValue) { aturn.TurnWinner = "Player1"; } else if (aturn.Player2DiceValue > aturn.Player1DiceValue) //or Player1Dice.FaceValue instead of aturn.Player1DiceValue as an example { aturn.TurnWinner = "Player2"; } else { aturn.TurnWinner = "Draw"; } //Display teh results to teh user Console.WriteLine("Results: Player1 rolled {0}" + " Player2 rolled {1}" + " Winner: {2}", aturn.Player1DiceValue, aturn.Player2DiceValue, aturn.TurnWinner); //add the aturn instance to the List<T> gameTurns.Add(aturn); break; } case "C": { //Console.WriteLine("You selected C"); //display the current standing in the game //foreach loop //this loop will start processing your collection from the 1st instance to the last instance, moving automatically to the next instance //C# will strongly datatype variables at compile time when the datatype is used in declaring the variable //C# also has a datatype called var //var datatype is set at execution time BUT is still strongly datatyped on its FIRST execution foreach (var thisTurn in gameTurns) { Console.WriteLine("Results: Player1 rolled {0}" + " Player2 rolled {1}" + " Winner: {2}", thisTurn.Player1DiceValue, thisTurn.Player2DiceValue, thisTurn.TurnWinner); } Console.WriteLine("\n"); break; } case "X": { //display summary results of game int[] counts = new int [] { 0, 0, 0 }; foreach (var aturn in gameTurns) { if (aturn.TurnWinner.Equals("Player1")) { counts[0]++; } else if (aturn.TurnWinner.Equals("Player2")) { counts[1]++; } else { counts[2]++; } } Console.WriteLine("Player1 wins {0} times, Player2 wins {1} times, Draws {2}.", counts[0], counts[1], counts[2]); Console.WriteLine("Thank you for playing. Come again."); break; //Add foreeach loop that will walk through the collection //Own if statement //Count all wins for Player1, wins for Player2, and count for Draws } default: { Console.WriteLine("Invalid menu choice. Try again."); break; } } } while (menuChoice.ToUpper() != "X"); Console.ReadKey(); }//end of main program eom
static void Main(string[] args) { // create instances of our objects to be used in this program // you can check for additional namespaces that may me needed to use your objects // when you create a project, the default namespace is set to the project name // a good way to visualize projects would be as different buildings on campus... the object would be room number... you could have two room 100's, // but you can tell them apart because one is in CAT and one is in HP // we need to have a structure that will allow us to hold an unknown number of instances of a variable => USE A LIST // array is used for a fixed number of items, list is used for an unknown number of items // List<T> the T here stands for template, you would want to use the variable name being stored in the list, below using Turn // List<T> is an object that holds x number of datatype instances // the new List<T> physically creates the instance of List<T> in memory // the constructor of List<T> is called List <Turn> gameTurns = new List <Turn>(); // FIGURE OUT EXACTLY WHAT HAPPENS HERE // create two instances of the Die object Die Player1Dice = new Die(); // default constructor Die Player2Dice = new Die(6, "Green"); // greedy constructor string menuChoice = ""; do { Console.WriteLine("Game Menu: \n"); Console.WriteLine("A) Set Die side count"); Console.WriteLine("B) Roll the dice"); Console.WriteLine("C) Display all game turn results"); Console.WriteLine("X) Exit"); Console.Write("Enter menu choice: "); menuChoice = Console.ReadLine(); switch (menuChoice.ToUpper()) { case "A": { // logic can de done using a method // the method will need to have the local variables Player1Dice and Player2Dice passed to it // objects are passed as references SetDiceSides(Player1Dice, Player2Dice); break; } case "B": { //logic can be done actually inside the case //one does not have to always call a method // roll the dice for each player, using the roll method // the . operator is used with your instance to access a property or a behaviour Player1Dice.Roll(); // this uses the method Roll on the Object Player1Dice **** CONFIRM IF THIS IS TRUE **** Player2Dice.Roll(); // record the result of the roll for this turn // we will need to create a new instance of the Turn class Turn aturn = new Turn(); // this creates a new instance of the class Turn, named aturn **** CONFIRM IF THIS IS TRUE **** // set get aturn.Player1DiceValue = Player1Dice.FaceValue; // this is a property, you don't have the (), this makes sense because properties don't take in parameters aturn.Player2DiceValue = Player2Dice.FaceValue; // determine dice battle results // it does not matter in this logic weather we use the values from aturn or the values from the Die variables, see below for proof if (aturn.Player1DiceValue > Player2Dice.FaceValue) // this is just done as an example, we should pick one and use the same for both { aturn.TurnWinner = "Player1"; } else if (aturn.Player2DiceValue > aturn.Player1DiceValue) // here we use aturn values for both, this is a better idea { aturn.TurnWinner = "Player2"; } else { aturn.TurnWinner = "Draw"; } Console.WriteLine("Results: Player 1 rolled {0}, Player 2 rolled {1}, winner is {2}", aturn.Player1DiceValue, aturn.Player2DiceValue, aturn.TurnWinner); // add the aturn instance to the List<T> gameTurns.Add(aturn); break; } case "C": { // display the current standing in the game /////////////// //foreach loop /////////////// // this loop will start processing your collection from the first instance to the last instance, moving automatically to the next instance // c# has a datatype called var, var datatype is set at execution time but it still strongly typed based on its first execution foreach (var thisTurn in gameTurns) // **** WHAT THE F**K DOES "IN" DO **** { Console.WriteLine("Results: Player 1 rolled {0}, Player 2 rolled {1}, winner is {2}", thisTurn.Player1DiceValue, thisTurn.Player2DiceValue, thisTurn.TurnWinner); } Console.Write("\n"); break; } // closes case c case "X": { Console.WriteLine("Thank you for playing. Come again."); // HOMEWORK IS TO DISPLAY HERE, HOW MANY WINS PLAYER 1 HAD, HOW MANY WINS PLAYER 2 HAD, AND HOW MANY DRAWS // TRY USING A FOREACH LOOP THAT WALKS THROUGH THE COLLECTION AND DOES COUNTS FOR ME // USE AN IF STATEMENT WITHIN THE FOREACH LOOP // below is to declare a new array, named counts int[] counts = new int[] { 0, 0, 0 }; // you could have just put 3 inbetween the second set of "[]", that would create an array that stores three values // using { 0, 0, 0 } just initializes the three values to zero, which is the default starting value anyways foreach (var aturn in gameTurns) { if (aturn.TurnWinner.Equals("Player1")) { counts[0]++; // this increments the value in the array at position zero (increments meaning adds one to the current value) } else if (aturn.TurnWinner.Equals("Player2")) { counts[1]++; } else { counts[2]++; } } Console.WriteLine("Player 1 won {0} times, player 2 won {1} times, and {2} draws", counts[0], counts[1], counts[2]); Console.WriteLine("Thanks for playing, now frig off!"); break; } // closes case x default: { Console.WriteLine("Invalid menu choice. Try again."); break; } } // closes switch } while (menuChoice.ToUpper() != "X"); Console.ReadKey(); } // end of main