[C/C++] HIlfe bei C# code

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Flu, 13. März 2008 .

Schlagworte:
  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
     
  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.
     
  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;
     
     }
     
  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
     
  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.
     
  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?
     
  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
     
  8. 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
     
  9. 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
     
  10. 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)
     
  11. 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
     
  12. 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);
     }
     }
     
  13. 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
     
  14. 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.
     
  15. 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
     
  16. 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.
     
  17. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.