#1 13. März 2008 HIlfe bei C# code Code: using System; using System.Collections.Generic; using System.Text; namespace Kniffel { class Program { static int Main(string[] args) { Console.WriteLine("HERZLICH WILLKOMMEN ! BEREIT ZU KNIFFELN ? \n"); Menue m = new Menue(); m.MainMenue(); Console.ReadLine(); return 0; } } public class Menue { public int MainMenue() { Console.WriteLine("\nSie befinden sich nun im Hauptmenü. \n"); Console.WriteLine("Sie haben nun mehrere Möglichkeiten fortzufahren: \n"); Console.WriteLine("> Um die Spielregeln zu lesen drücken Sie bitte die eins!\n"); Console.WriteLine("> Um den Single-Player Modus zu starten drücken Sie bitte die zwei!\n"); Console.WriteLine("> Um den Multi-Player Modus zu starten drücken Sie bitte die drei!\n"); string Auswahl; Auswahl = Console.ReadLine(); while (Auswahl != "1" || Auswahl != "2" || Auswahl != "3") { if (Auswahl == "1") { Regeln r = new Regeln(); r.Spielregeln(); } else if (Auswahl == "2") { Solo s = new Solo(); s.SinglePlayer(); } else if (Auswahl == "3") { Multi mul = new Multi(); mul.MultiPlayer(); } Auswahl = Console.ReadLine(); } return 0; } } public class Regeln { public int Spielregeln() { Console.WriteLine("\nSpielregeln:\n------------"); Console.WriteLine("\nBei dem Spiel Kniffel geht es darum in einer gewissen Anzahl von Runden\n"); Console.WriteLine("alle Bilder der Spielkarte zu erwürfeln. Pro Runde wird drei mal gewürfelt.\n"); Console.WriteLine("Wenn man eine Sache doppelt würfelt, aber dafür woanders keinen Platz mehr hat,\n"); Console.WriteLine("kann man es in die Chance eintragen. Ist auch diese belegt muss ein anderes\n"); Console.WriteLine("Bild gestrichen werden.\n"); Console.WriteLine("------------"); Console.WriteLine("Zurück zum Hauptmenü? Drücke bitte die eins.\n"); string option; option = Console.ReadLine(); while (option != "1") { if (option == "1") { Menue m = new Menue(); m.MainMenue(); } option = Console.ReadLine(); } return 0; } } public class Solo { public int SinglePlayer() { Console.WriteLine("HALLO"); return 0; } } public class Multi { public int MultiPlayer() { Console.WriteLine("HALLO"); return 0; } } public class Wurf { public int wuerfeln() { return 0; } } public class List1 { public int SoloListe() { return 0; } } public class List2 { public int MultiListe() { return 0; } } } hab hier folgenden code. es geht eigentlich nur um die Klasse Regeln. wenn ich die bedingung der if anweisung erfülle (also eins eingebe) sollte ja eigentlich das Menü wieder aufgerufen werden. aber das wird nicht gemacht. stattdessen wird wieder die Klasse Regeln aufgerufen. Wieso macht er dies? was muss ich verändern um die Klasse Menü erneut aufrufen zu können? mfg Flu + Multi-Zitat Zitieren
#2 13. März 2008 AW: HIlfe bei C# code was das Problemm ist erkenn ich auf die schnelle jetzt nicht - habe leider jetzt keine Zeit da ich weg muss. Aber gehe mal deine Source mit dem Debugger Schritt für Schritt durch. Einfach einen Breakpoint setzen und dann das Programm starten. + Multi-Zitat Zitieren
#3 13. März 2008 AW: HIlfe bei C# code du musst die while Schleife vor der If Schleife rausmachen. weil das was in der while-Schleife steht wird nur ausgeführt, wenn nicht 1 eingegeben wurde. gebe ich nun aber 1 als "option" an, dann springt er sofort auf "return 0;" wenn du unbedingt willst, dass er im falle von option!=1 was macht, dann mach das so: Code: public class Regeln { public int Spielregeln() { Console.WriteLine("\nSpielregeln:\n------------"); Console.WriteLine("\nBei dem Spiel Kniffel geht es darum in einer gewissen Anzahl von Runden\n"); Console.WriteLine("alle Bilder der Spielkarte zu erwürfeln. Pro Runde wird drei mal gewürfelt.\n"); Console.WriteLine("Wenn man eine Sache doppelt würfelt, aber dafür woanders keinen Platz mehr hat,\n"); Console.WriteLine("kann man es in die Chance eintragen. Ist auch diese belegt muss ein anderes\n"); Console.WriteLine("Bild gestrichen werden.\n"); Console.WriteLine("------------"); Console.WriteLine("Zurück zum Hauptmenü? Drücke bitte die eins.\n"); begin: string option; option = Console.ReadLine(); switch (option) { case "1": Menue b = new Menue(); b.MainMenue(); break; default: Console.WriteLine("Bitte eins drücken um zum Hauptmenü zurückzukehren."); goto begin; break; } return 0; } + Multi-Zitat Zitieren
#4 16. März 2008 AW: HIlfe bei C# code noch eine frage. habe folgennden Code Code: public class Wurf { public int wuerfeln() { int i=1; int Zufallszahl; string ergebnis; string ergebnis1; string ergebnis2; string ergebnis3; string ergebnis4; while(i<6) { Random rnd = new Random(); Zufallszahl = rnd.Next(1, 6); Console.WriteLine("Wurf " + i + ": " + Zufallszahl); i++; System.Threading.Thread.Sleep(10); if (i == 1) { string wurf1 = String.Concat(Zufallszahl); ergebnis = String.Copy(wurf1); } if (i == 2) { string wurf2 = String.Concat(Zufallszahl); ergebnis1 = String.Copy(wurf2); } if (i == 3) { string wurf3 = String.Concat(Zufallszahl); ergebnis2 = String.Copy(wurf3); } if (i == 4) { string wurf4 = String.Concat(Zufallszahl); ergebnis3 = String.Copy(wurf4); } if (i == 5) { string wurf5 = String.Concat(Zufallszahl); ergebnis4 = String.Copy(wurf5); } } ergebnis = String.Concat(ergebnis1, ergebnis2, ergebnis3); Console.WriteLine(ergebnis); return 0; } } das sind die fehler dazu: Fehler 4 Verwendung der nicht zugewiesenen lokalen Variablen "ergebnis1" G:\c#\mein Buch\So für mich\ConsoleApplication1\Kniffel\Kniffel\Kniffel\Program.cs 187 Fehler 5 Verwendung der nicht zugewiesenen lokalen Variablen "ergebnis2" G:\c#\mein Buch\So für mich\ConsoleApplication1\Kniffel\Kniffel\Kniffel\Program.cs 187 Fehler 6 Verwendung der nicht zugewiesenen lokalen Variablen "ergebnis3" G:\c#\mein Buch\So für mich\ConsoleApplication1\Kniffel\Kniffel\Kniffel\Program.cs 187 die zeile wo der fehler liegt: ergebnis = String.Concat(ergebnis1, ergebnis2, ergebnis3); wie kann ich den fehler beheben? mfg Flu + Multi-Zitat Zitieren
#5 16. März 2008 AW: HIlfe bei C# code Es liegt daran das ergebnis1, ergebnis2, ergebnis3 nicht initialisiert wurde. Mit Code: string ergebnis = ""; string ergebnis1 = ""; string ergebnis2 = ""; string ergebnis3 = ""; string ergebnis4 = ""; behebst du diesen Fehler. + Multi-Zitat Zitieren
#6 16. März 2008 AW: HIlfe bei C# code noch eine frage Code: public class Auswahl { public int auswahl() { Wurf wuerfe = new Wurf(); string aussortiert; Console.WriteLine("\nBitte die Zahlen auswählen die behalten werden!\n"); Console.WriteLine("Beispiel: Wenn die Zahlen 13345 gewürfelt wurden und man will\n"); Console.WriteLine("die zwei dreier haben, dann die Zahlen 2 und 3 eintippen, also die\n"); Console.WriteLine("Stelle wo sie stehen.\n"); int stelle = 0; stelle = Console.Read(); if (stelle == '1') { aussortiert = wuerfe.Substring(1, 1); Console.WriteLine(aussortiert); } return 0; } } Fehler: Fehler 4 "Kniffel.Wurf" enthält keine Definition für "Substring". G:\c#\mein Buch\So für mich\ConsoleApplication1\Kniffel\Kniffel\Kniffel\Program.cs 262 die methode Wurf wurde so verändert wie Hachi es gesagt hat. aber wie bekomme ich das mit dem Substring jetzt hin? + Multi-Zitat Zitieren
#7 16. März 2008 AW: HIlfe bei C# code Dem Fehler nach zu urteilen enthält die Klasse Wurf die Methode Substring nicht. Substring ist eine Methode von Strings + Multi-Zitat Zitieren
#9 16. März 2008 AW: HIlfe bei C# code ich habe zwar nicht ganz genau verstanden was du machen willst, jedoch liegt der Fehler in dieser Zeile Code: aussortiert = wuerfe.Substring(1, 1); wuerfe kennt kein Substring, vieleicht meintest du: Code: aussortiert = stelle.Substring(1, 1); da sonst die Eingabe von der Console überhaupt nicht berücksichtigt wird + Multi-Zitat Zitieren
#10 16. März 2008 AW: HIlfe bei C# code der soll aus dem String wuerfe eine zahl extrahieren. diese soll dann in dem string aussortiert gespeichert werden. dazu muss ich den string wuerfe mit den gespeicherten zahlen aus der methode Wurf holen. um den zusammenhang von dem programm mal zu verdeutlichen: es soll ein kniffelspiel werden. da man beim kniffeln ja drei würfe hat und würfel aussortieren kann die nicht mehr gewürfelt werden sollen, brauch ich diese methode die aus dem string mit den gewürfelten zahlen, manche aussortieren kann. so jetzt ist halt meine frage wie ich den string wuerfe mit den gespeicherten zahlen in der methode Auswahl benutzen kann, so dass ich das mit dem Substring drauf anwenden kann. mfg Flu + Multi-Zitat Zitieren
#11 17. März 2008 AW: HIlfe bei C# code Ich gehe mal davon aus dass das alles in der Methode auswahl geschehen soll. das Problem ist dabei, dass die Methode nicht weiss was gewürfelt wurde. Die neue Instanz von der Klasse Wurf hat nichts mit der alten Wurfinstanz zu tun, die den Wurf ausgegeben hat. Daher solltest du der Methode die aktuell gewürfelten Zahlen mitübergeben. Code: public class Auswahl { public int auswahl(int wurf) { string behalten; Console.WriteLine("\nBitte die Zahlen auswählen die behalten werden!\n"); Console.WriteLine("Beispiel: Wenn die Zahlen 13345 gewürfelt wurden und man will\n"); Console.WriteLine("die zwei dreier haben, dann die Zahlen 2 und 3 eintippen, also die\n"); Console.WriteLine("Stelle wo sie stehen.\n"); String stellen = ""; stellen = Console.ReadLine(); if (stellen != null) { for(int i=0; i<stellen.Length; i++) { int iStelle = Convert.ToInt(stellen[i]); behalten = behalten + Convert.ToString(wurf)[iStelle]; } Console.WriteLine("Werden behalten: " + behalten); } return Convert.ToInt(behalten); } } Ich habe mal die Methode etwas abgeändert. Ich würde sie nicht eins zu eins kopieren, da ich gerade keine Entwicklungsumgebung habe und ich sie daher nicht auf kleine Syntaxfehler geprüft habe. Jetzt gibt die Methode die Zahlen des Wurfes zurück, die der Spieler behalten will. Zur Erklährung: Du kannst Methoden Werte übergen, indem du sie in die Klammern nach dem Methodennamen schreibst. Aufrufen musst du die Methode so (nur ein Beispiel): Code: int wurf = 0; Auswahl ausw = new Auswahl(); ausw.auswahl(wurf) + Multi-Zitat Zitieren
#12 17. März 2008 AW: HIlfe bei C# code ne das klappt leider nicht. selbst als ich alle fehler behoben hab.Wenn ich das programm ausführe kommt da ne fehlermeldung wenn ich an der stelle des programms ankomme. über die wir hier die ganze zeit sprechen. Fehler: Eine nicht behandelte Ausnahme des Typs "System.IndexOutOfRangeException" ist in Kniffel.exe aufgetreten. Zusätzliche Informationen: Der Index war außerhalb des Arraybereichs. trotzdem thx für die hilfe bis jetzt. evtl. fällt jemanden noch was ein. mfg Flu + Multi-Zitat Zitieren
#13 17. März 2008 AW: HIlfe bei C# code Der Fehler kommt daher, dass du auf eine Stelle des Wurfes zugreifen willst die es nicht gibt. Wenn z.B. 13345 gewürfelt wurde und der Spieler gibt 7. Habe es mal folgendermaßen abgeändert, es wird jetzt ein String übergeben und kein Integer mehr, außerdem wird der Fehler abgefangen. Du solltest jedoch noch mehr Fehlerprüfunge bzw. try und catch einbauen. Code: public class Auswahl { public int auswahl(String wurf) { string behalten; Console.WriteLine("\nBitte die Zahlen auswählen die behalten werden!\n"); Console.WriteLine("Beispiel: Wenn die Zahlen 13345 gewürfelt wurden und man will\n"); Console.WriteLine("die zwei dreier haben, dann die Zahlen 2 und 3 eintippen, also die\n"); Console.WriteLine("Stelle wo sie stehen.\n"); String stellen = ""; stellen = Console.ReadLine(); if (stellen != null) { for(int i=0; i<stellen.Length; i++) { int iStelle = Convert.ToInt(stellen[i]); if(wurf.Length > iStelle) behalten = behalten + wurf[iStelle-1]; else Console.WriteLine("Fehler: Die Stelle "+iStelle+" ist im Wurf "+wurf" nicht enthalten"); } Console.WriteLine("Werden behalten: " + behalten); } return Convert.ToInt(behalten); } } + Multi-Zitat Zitieren
#14 17. März 2008 AW: HIlfe bei C# code probiere deins sofort aus. evtl kannst du mir ja mit diesem gespräch weiterhelfen. ich weiß nicht so ganz was er meint. aber du kannst mir das an meinem alten code evtl. einbauen. Code: Speedy ?(15:04): schreib eine Methode SubString() in deiner Wurf-Klasse Flu ?(15:04): ok. ich werds versuchen. thx Speedy ?(15:04): was willst du überhaupt mit würfe.SubString() erreichen? Flu ?(15:05): bestimmte stellen des strings extrahieren Speedy ?(15:05): aber dann musss würfedoch ein string sein ist er aber nicht du könntest aber public class Wurf so deklareieren: public class Wurf : String Speedy ?(15:06): dann hä#tttest du sie von der STring-Klasse abgeleitet und eine SubString() methode Flu ?(15:06): wuerfe ist doch ein string. Speedy ?(15:06): ja? Wurf wuerfe = new Wurf(); Flu ?(15:06): string wuerfe = ""; Speedy ?(15:07): wo steht das? Flu ?(15:07): ich möchte ja den string wuerfe aus der methode Wurf übernehmen Speedy ?(15:07): ok Flu ?(15:07): in der klasse wuerfeln() oben bei den deklarationen Speedy ?(15:07): aber der fehler ist doch in der klasse auswahl dort istwuerfe als Wurf deklarier Speedy ?(15:08): t Flu ?(15:09): und wie schaff ich es den string wuerfe in die klasse auswahl() zu übernehmen? muss ich Wurf wuerfe = new Wurf(); so schreiben: Wurf w = new Wurf(); Speedy ?(15:09): du könntest ein property für wuerfe in der klasse wurf erstellen Speedy ?(15:10): und dann kannst du so drauf zugreifen: Wurf wuerfe = new Wuerfe(); wuerfe.Wuerfe.SubString(bla, bla); Flu ?(15:11): thx Flu ?(15:13): kannste mir kurz sagen wie man diese properties oben in der methode Wurf macht? oder ist das das was du mir gerade geschrieben hast? das mit den properties und diesen teil (Speedy ?(15:10): und dann kannst du so drauf zugreifen: Wurf wuerfe = new Wuerfe(); wuerfe.Wuerfe.SubString(bla, bla); ) hätt ich gern eingebaut wenn das geht. thx flu + Multi-Zitat Zitieren
#15 17. März 2008 AW: HIlfe bei C# code Jetzt verstehe ich das Ganze Problem erst. Du solltest dich mal mit den Grundlagen der Objektorientierten Programmierung auseinandersetzen. Begriffe wie Properties, Object, Methode, Parameter, Instanz und Vererbung sollten dir geläufig sein. Nur mal so am Rande bemerkt. Zu deinen Problem: Wenn die Methode Wuerfeln die Zahlen ausgibt die gewürfelt wurden, wird nirgend das Ergebnis gespeichert. Du solltest der Klasse Wurf Variablen hinzufügen die das Ergebnis beinhalten, also von der Methode Wuerfeln gefühlt werden. Code: private string ergebnis; Mit Hilfe von sog. getter und setter kannst du dann auf die Variable auserhalb der Klasse zugreifen, wenn das aufrufende Objekt eine Instanz von Wurf besitzt. Solche Variablen sind dann die Properties einer Klasse. Wenn du die Klasse Wurf um 4 Properties, die jeweils eins der Würfelergebnisse speichert. So kannst du dir die SubString-Methode sparen, da du dann durch die Getter direkt darauf zugreifen kannst. + Multi-Zitat Zitieren
#16 18. März 2008 AW: HIlfe bei C# code ich fang ja gerade erst an c# zu lernen ( seit 1,5 monaten) da ist man halt noch nicht ganz so weit^^ trotzdem thx für die hilfe. werd mir das thema mal anschauen. lol hab gerade gesehen das das thema mit geter und so 2 seiten weiter in meinem buch behandelt wird + Multi-Zitat Zitieren
#17 18. März 2008 AW: HIlfe bei C# code Ist schon in Ordnung, jeder hat ja mal bei Null angefangen. Finde es jedoch gut das du dich gleich mit der OOP auseinandersetzt. + Multi-Zitat Zitieren