Permalänk
Medlem

Hjälp med ja eller nej kod C#

Hejsan! Googlat igenom och försökt hitta alternativ till att stoppa in en funktion för "Ja eller nej frågor". Hittade Messagebox men av någon anledning kan jag inte använda det i visual studios (nånting jag måste missat men som ej nämnts). Har någon något tips på andra sätt?

Håller på med ett liknande spel till hänga gubben och det är när gissningen av själva ordet blivit rätt jag vill att den ställer frågan spela igen?, OM JA, spelas igen, OM NEJ, återgå till meny/EXIT

Permalänk
Medlem

@skriy:

Är det i ett gränssnitt du menar?
Använder du Windows Forms eller WPF (eller arbetar du med webb - MVC t.ex.)?

Windows Forms (kodexempel längst ned):
MessageBox

WPF:
MessageBox

Permalänk
Medlem

https://msdn.microsoft.com/en-us/library/system.windows.forms...

MessageBox(NULL, "meddelande", "din felkod", NULL);

Visa signatur

[IT-Dept]
Ryzen 1700 OC - 32 - 1070

Permalänk
Medlem
Skrivet av debben:

@skriy:

Är det i ett gränssnitt du menar?
Använder du Windows Forms eller WPF (eller arbetar du med webb - MVC t.ex.)?

Windows Forms (kodexempel längst ned):
MessageBox

WPF:
MessageBox

Skrivet av martin_cs:

Det är detta jag menar: https://i.gyazo.com/46d1d500287f05308d3cd54927a58b9b.png

Borde jag implementera "using system.Windows.form;"?
Det funkar inte för mig för att jag missar något

Permalänk
Medlem

@skriy: Det ser ut som att du göra en konsol-applikation. Då kan du inte använda några funktioner för gränssnitt utan du får koda en lösning baserad på konsol-gränssnittet.

Hur har du gjort när du frågar om vilken bokstav spelaren vill gissa på?

Permalänk
Medlem
Skrivet av Golvmopp:

@skriy: Det ser ut som att du göra en konsol-applikation. Då kan du inte använda några funktioner för gränssnitt utan du får koda en lösning baserad på konsol-gränssnittet.

Hur har du gjort när du frågar om vilken bokstav spelaren vill gissa på?

Ah alright, det är inte hänga gubben grej det här, utan mer en simplare variant

edit: Just nu om man gissar rätt går den direkt till meny och alltså inte igenom messagebox osv.

Permalänk
Medlem
Skrivet av skriy:

Ah alright, det är inte hänga gubben grej det här, utan mer en simplare variant

https://gyazo.com/67b4aeff0499b9fabdb0d7887c2c39ea

edit: Just nu om man gissar rätt går den direkt till meny och alltså inte igenom messagebox osv.

Jag skulle ha lagt en loop runt hela programmet som körs så länge en variabel är sann. Sedan ställa frågan "vill du fortsätta spela?" och låta användaren svara med en ReadLine. Beroende på vad användaren svarar så manipulerar du variabeln som styr huvud-loopen.

Psuedokod:

bool keepPlaying = true;

while(keepPlaying)
{
// Kod för spel

Console.WriteLine("Vill du fortsätta spela? Svara JA/NEJ");
String check = Console.ReadLine();

if(check.equals("JA")
{
//do nothing
}
else if(check.equals("NEJ")
{
keepPlaying = false;
}
}

Permalänk
Medlem
Skrivet av Golvmopp:

Jag skulle ha lagt en loop runt hela programmet som körs så länge en variabel är sann. Sedan ställa frågan "vill du fortsätta spela?" och låta användaren svara med en ReadLine. Beroende på vad användaren svarar så manipulerar du variabeln som styr huvud-loopen.

Psuedokod:

bool keepPlaying = true;

while(keepPlaying)
{
// Kod för spel

Console.WriteLine("Vill du fortsätta spela? Svara JA/NEJ");
String check = Console.ReadLine();

if(check.equals("JA")
{
//do nothing
}
else if(check.equals("NEJ")
{
keepPlaying = false;
}
}

Så om man väljer "JA" behöver man ingen kod för att spelet ska reloopas?

Permalänk
Skrivet av skriy:

Så om man väljer "JA" behöver man ingen kod för att spelet ska reloopas?

Koden för loopen är utanför, så länge variablen keepPlaying är sann kommer spelet fortsätta. När man inte vill fortsätta längre ändras den till falsk. while(keepPlaying) dvs. Så länge keepPlaying är sant så gör det som är inom klamrarna.

Visa signatur

Corsair Vengeance LPX 4x8GB DDR4 2666MHz CL16 | Intel Core i7 6700 3,4 GHz 8MB | MSI Z170A KRAIT GAMING | Corsair Force Series 3 120 GB | Seagate SSHD Desktop 2 TB 7200 RPM 3,5" | Creative Sound Blaster Z PCIe | Western Digital 500 GB | Samsung Writemaster | Corsair TX750 V2 750 W | EVGA GeForce GTX 970 4GB SSC ACX 2.0+| Fractal Design Define R5 (Svart)

Permalänk
Medlem

Tack för alla ovanstående svar, är det någon som kan se vad jag gör för fel här? Då string svaret inte registreras vid "if"

Permalänk
Medlem
Skrivet av skriy:

Tack för alla ovanstående svar, är det någon som kan se vad jag gör för fel här? Då string svaret inte registreras vid "if"

https://gyazo.com/59b3ec8e5c1d8b1cd72fc0442ad30313

Du har skapat variabeln i ett annat "scope"( d.v.s brackets, { } ).
För att komma åt "svaret" så måste du använda den i samma scope som den skapades. Lägg

string svaret = Console.ReadLine();

ovanför if-satsen och försök igen

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk
Medlem
Skrivet av Pamudas:

Du har skapat variabeln i ett annat "scope"( d.v.s brackets, { } ).
För att komma åt "svaret" så måste du använda den i samma scope som den skapades. Lägg

string svaret = Console.ReadLine();

ovanför if-satsen och försök igen

https://gyazo.com/d498bdd0b5e0ba83276f1d3676e49ace

Sådär?

Permalänk
Medlem

Eftersom Console.ReadLine() blockerar tills dess att du skrivit in något, så kommer du alltså behöva skriva JA/NEJ innan du får se om du har skrivit rätt eller fel svar.
Släng in koden ovanför den andra if-satsen.

string svaret = Console.ReadLine(); if(svaret == "JA") { }

Något du även bör tänka på är att du gjort så att endast JA och NEJ kommer fungera. Skrivs ja eller nej så kommer inget att hända.
Det går att ordna med

if(svaret.ToLower() == "ja") { } else break;

-- du vill väl inte att det ska spela någon roll om användaren skriver nej? Allt du egentligen behöver veta är om användaren skriver ja...

En till sak som jag vill poängtera är att även fast du skriver in ett fel svar så kommer du få skriva in ja/nej, detta för varje ord i OrdVal.
Finns lite annat smått som du själv får klura ut sen

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk
Medlem
Skrivet av Pamudas:

Eftersom Console.ReadLine() blockerar tills dess att du skrivit in något, så kommer du alltså behöva skriva JA/NEJ innan du får se om du har skrivit rätt eller fel svar.
Släng in koden ovanför den andra if-satsen.

string svaret = Console.ReadLine(); if(svaret == "JA") { }

Något du även bör tänka på är att du gjort så att endast JA och NEJ kommer fungera. Skrivs ja eller nej så kommer inget att hända.
Det går att ordna med

if(svaret.ToLower() == "ja") { } else break;

-- du vill väl inte att det ska spela någon roll om användaren skriver nej? Allt du egentligen behöver veta är om användaren skriver ja...

En till sak som jag vill poängtera är att även fast du skriver in ett fel svar så kommer du få skriva in ja/nej, detta för varje ord i OrdVal.
Finns lite annat smått som du själv får klura ut sen

Tack så mycket! Vet att det är mycket fel, kan tänka mig att loopen är fel då den aldrig gått till "ja och nej frågan" sen jag började med koden, så ska börja läsa på allt igen.

Permalänk
Medlem

Försöker få den att loopa tills gissningen är korrekt, hur kan jag få den att känna igen om ordet är rätt i första if-satsen. Med tanke på att den just nu loopas runt oavsett rätt/fel svar.
Ska man inte använda sig av foreach här?

https://gyazo.com/a0a527fc2889b740b969d627da4f7d56

Permalänk
Medlem

Din loop är alltid "true".

Du får breaka den om användaren gissat rätt.

Jag hade inte skrivit while(true)

Utan skapat en variabel av typen boolean som sedan fått värdet false om användaren gissat rätt.

t.ex.

while(running){ if(gissat_rätt){ running = false; } }

Visa signatur

[IT-Dept]
Ryzen 1700 OC - 32 - 1070