Permalänk

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
Permalänk
99:e percentilen

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.

Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk
Medlem

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.

Permalänk

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:

Permalänk
99:e percentilen

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.)

Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk
Medlem
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.

Permalänk
Medlem

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); } } }

Permalänk

Tack allihopa problemet är löst

Permalänk
Hedersmedlem

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.

Visa signatur

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

Permalänk
Medlem

@Mordekai: Försöker bara förstå hur din kod fungerar använder den lite som inspiration för min egna i en likvärdig uppgift

hur och varför använder du den här koden?

System.ConsoleKeyInfo choice = Console.ReadKey();
switch (choice.Key)

Permalänk
Medlem
Skrivet av iop1poi:

@Mordekai: Försöker bara förstå hur din kod fungerar använder den lite som inspiration för min egna i en likvärdig uppgift

hur och varför använder du den här koden?

System.ConsoleKeyInfo choice = Console.ReadKey();
switch (choice.Key)

Den inväntar ett tangentbordstryck

Genom att göra en early bind till en enum får man enkelt tydliga alternativ i Switch case delen utan att behöva kolla i någon tabell.