Trädvy Permalänk
Medlem
Registrerad
Maj 2019

Hjälp Dice Simulator C#

Allt funkar bra loopen rullar men när Jag gör mina val i Switch då får jag samma resultat ?!

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace TheDiCe { class MainClass { public static void Main(string[] args) { int number; Random Unkown = new Random(); number = Unkown.Next(7); number = Unkown.Next(1, 7); List<int> mylist = new List<int>(); mylist.Add(Unkown.Next(1, 7)); mylist.Add(Unkown.Next(1, 7)); mylist.Add(Unkown.Next(1, 7)); mylist.Add(Unkown.Next(1, 7)); DateTime time = DateTime.Now; bool tourne = true; while (tourne) try { Console.WriteLine(" Player " + time.ToString()); Console.WriteLine(" Välkommen till den 6-sidig tärnings konsol "); Console.WriteLine(" Gör val i menyn: "); Console.WriteLine(" Kasta 1 tärning "); Console.WriteLine(" Kasta 2 tärningar "); Console.WriteLine(" kasta 3 tärningar "); Console.WriteLine(" kasta 4 tärningar "); int choise = Convert.ToInt32(Console.ReadLine()); switch (choise) { case 1: Console.WriteLine("[1] Summan av kastade tärning " + mylist[0]); break; case 2: Console.Write(" []Total summan av två kastade tärningar är "); Console.Write(mylist[1] + mylist[2]); Console.WriteLine(" [[Tärning N°1 " + mylist[1] + " Tärning N°2 " + mylist[2]+"]]"); break; default: Console.WriteLine("Felaktig inmatning, mata in en siffra mellan 1-4 annars tryck 5 för och Avsluta"); break; } } } catch { Console.WriteLine(" Fel inmatning vänligen gör ett val i menyn (1 Till 4) "); } Console.ReadKey(); } } }

Fixat codetaggar, fixat felstavning i rubrik, tagit bort meningslös omröstning. /Mod
Trädvy Permalänk
Entusiast
Testpilot
Plats
Chalmers
Registrerad
Aug 2011

Hej och välkommen till forumet!

När du klistrar in kod, slå in den i [code]-taggar, annars blir den svårläst eftersom indenteringen försvinner och den inte får monospace-font. Exempel:

[code]
namespace Foo {
// …
}
[/code]

Redigera gärna ditt inlägg enligt ovanstående.

Skrivet med hjälp av Better SweClockers

Trädvy Permalänk
Medlem
Registrerad
Jun 2012

mylist är en lista med integers, i case 1 så skriver du ut mylist[0] vilket är första index i listan, denna har givits en integer mellan 1 och 6 genom "mylist.Add(Unkown.Next(1, 7));" - säg 3, värdet av mylist[0] kommer då alltid vara 3 (edit: Om du inte ändrar på det senare det vill säga), vilket du alltså skriver ut varje gång.

CPU: AMD Ryzen 1600 3.8GHz Ram: Corsair 3000MHz 16GB Moderkort: Asus Prime B350 Plus Grafikkort: RTX 2060 PSU: EVGA Supernova G3 750W

Trädvy Permalänk
Medlem
Registrerad
Maj 2019

Ja exakt syftet med unkown.next(1, 7); att den ska vara random varje gång jag gör ett val i meny. Det är det som jag inte förstår ? hur ändrar jag på det annars ? @SanyaIV:

Trädvy Permalänk
Entusiast
Testpilot
Plats
Chalmers
Registrerad
Aug 2011

Ser att du redigerat trådstarten, @Tartamine, men du har placerat [code]-taggarna fel. [code] ska vara precis före din kod. [/code] ska vara precis efter din kod. (Och det får förstås inte finnas någon [/code] någonstans däremellan.)

Skrivet med hjälp av Better SweClockers

Trädvy Permalänk
Medlem
Registrerad
Jun 2012
Skrivet av Tartamine:

Ja exakt syftet med unkown.next(1, 7); att den ska vara random varje gång jag gör ett val i meny. Det är det som jag inte förstår ? hur ändrar jag på det annars ? @SanyaIV:

Det är i början av main som du nu skapar listan och säger att de fyra första elementen i listan ska slumpas mellan 1-6, slumpningen görs alltså bara en gång och elementen i listan har sedan alltså det slumpade värdet resten av programmets livstid. Det du vill göra är att slumpa dessa siffror på nytt istället för att återanvända dem, för det syftet är listan något onödigt.

Edit:
För att förtydliga med ett exempel.

int SlumpTal = unknown.next(1,7); while(true){ Console.WriteLine(SlumpTal); }

Om koden ovan skulle läggas till din kod skulle variabeln SlumpTal skrivas ut i en oändlig loop - SlumpTal ges ett slumpmässigt värde mellan 1 och 6 men ges det bara en gång. Det kommer alltså alltid vara samma tal som skrivs ut. Säg nu att vi skriver det såhär istället:

int SlumpTal = 0; while(true){ SlumpTal = unknown.next(1,7); Console.WriteLine(SlumpTal); }

Med koden ovan så kommer variabeln SlumpTal att ges ett nytt slumpmässigt värde i början av varje loop, och därför kommer utskriften att variera.

Hoppas det gjorde det tydligare.

CPU: AMD Ryzen 1600 3.8GHz Ram: Corsair 3000MHz 16GB Moderkort: Asus Prime B350 Plus Grafikkort: RTX 2060 PSU: EVGA Supernova G3 750W

Trädvy Permalänk
Medlem
Registrerad
Mar 2015

Kommentarer får du skriva själv för du måste förstå allt, google är din vän.

using System; using System.Collections.Generic; namespace Dices { class Program { static Random _r = new Random(); static void Main(string[] args) { bool keepPlaying = true; while (keepPlaying) { DateTime time = DateTime.Now; int diecount = 0; List<int> results = new List<int>(); Console.WriteLine("Player " + time.ToString()); Console.WriteLine("Welcome to the six sided dice console"); Console.WriteLine(""); Console.WriteLine("Select from the menu:"); Console.WriteLine(""); Console.WriteLine("1: roll one die"); Console.WriteLine("2: roll two dice"); Console.WriteLine("3: roll three dice"); Console.WriteLine("4: roll four dice"); Console.WriteLine("5: end console"); Console.WriteLine(""); System.ConsoleKeyInfo choice = Console.ReadKey(); switch (choice.Key) { case ConsoleKey.D1: case ConsoleKey.NumPad1: case ConsoleKey.D2: case ConsoleKey.NumPad2: case ConsoleKey.D3: case ConsoleKey.NumPad3: case ConsoleKey.D4: case ConsoleKey.NumPad4: //All cases of keys 1-4 will execute here diecount = Convert.ToInt32(choice.KeyChar.ToString()); break; case ConsoleKey.D5: case ConsoleKey.NumPad5: keepPlaying = false; break; default: Console.WriteLine(""); Console.WriteLine("Invalid choice!"); Console.Beep(600, 500); Console.Clear(); break; } if (diecount>0) { for (int i = 0; i < diecount; i++) { bool keepRolling = true; int rollCount = 1; while (keepRolling && rollCount>0) { int dieres = Roll(); rollCount--; if (dieres==6) { rollCount=+2; results.Add(dieres); } else { if (rollCount<1) { keepRolling = false; } results.Add(dieres); } } } Console.WriteLine(""); Console.WriteLine("Results are in!"); Console.WriteLine(""); int greenCount = 0; int column = 0; int diesum = 0; foreach (int roll in results) { if (roll==6) { Console.BackgroundColor = ConsoleColor.Red; Console.ForegroundColor = ConsoleColor.White; Console.Write(roll.ToString()); Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.White; Console.Write(" "); greenCount = +2; } else { diesum = diesum+roll; if (greenCount>0) { Console.BackgroundColor = ConsoleColor.Green; Console.ForegroundColor = ConsoleColor.Black; Console.Write(roll.ToString()); Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.White; Console.Write(" "); greenCount--; } else { Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.White; Console.Write(roll.ToString()); Console.Write(" "); } } column++; if (column>10) { Console.WriteLine(""); column = 0; } } Console.WriteLine(""); Console.WriteLine("Sum: " + diesum.ToString()); Console.WriteLine(""); Console.Write("Press ENTER to continue!"); string enter = Console.ReadLine(); Console.Clear(); } } } static int Roll(int sides=6) { return (_r.Next(sides) + 1); } } }

Trädvy Permalänk
Medlem
Registrerad
Maj 2019

Tack allihopa problemet är löst

Trädvy Permalänk
Moderator
Registrerad
Aug 2007

Jag använder programmeringsuppgifter som en del i rekrytering. Det första man gör när man får en lösning är att googla valda delar som är centrala för funktionaliteten. Man brukar få någon match. Alla googlar lösningar. Men om man då ser att hela koden är klippt och klistrad så brukar jag konfrontera kandidaten med det och det brukar inte gå så bra för dem.

Vid rekrytering vill jag se kandidatens kod. Om man inte själv skrivit koden, inte skrivit kommentarer, inte gjort något tillägg är det ingen mening att diskutera koden med kandidaten och det finns inget för mig som anställande chef att bedöma utifrån hur bra utvecklare man är.

Jag gissar (hoppas) att det samma gäller för skoluppgifter som är betygsgrundande eller ett antagningsprov. Tillför du inget själv till lösningen så bör det vara ett F oavsett om du har löst uppgiften.

Använd gilla för att markera nyttiga inlägg!