[Java] NimmSpiel umschreiben

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von klaxx, 30. September 2008 .

Schlagworte:
  1. 30. September 2008
    NimmSpiel umschreiben

    Heyho, ich habe hier in meiner etwas schlaflosen Nacht bis 2 Uhr an diesem Code gesessen bis dieser einwandfrei lief.

    Meine Aufgabenstellung besagt aber, das ich nicht 2 Spieler haben darf, sondern einen Spieler und einen Computer.

    Zur Info: Beim meinem Nimmspiel geht es darum nicht das letzte Stäbchen zu bekommen.

    Die Formel dafür wäre, damit der Computer auch zieht, damit er gewinnt: Anzahl = Rest%(max+1)
    bedeutet wenn ich 15 habe Modulo 4 = 12 rest 3. Also soll der Computer 3 ziehen. Ich hab nur echt keinen Schimmer wo ich das jetzt hincodiere. Oder wo ich was umschreibe.

    Das Programm ist lauffähig..

    Code:
    /*
    Nimmspiel von klaxx
    */
    
    import java.io.*; /*Importieren der Sprachen, Klassen etc.*/
    import java.lang.*;/* */
    
    public class NimmSpiel /* erstellen der Klasse NimmSpiel */
    
    {
     //Attribute
     Spieler spielerA, spieler B, aktSpieler; // Objekte der Klasse Spieler
     int zahl;
     static int start;
     static BufferedReader readln;
     
     //Hauptprogramm
     public static void main(String[] args)
     {
     Spieler spielerA = new Spieler();
     Spieler spielerB = new Spieler();
     System.out.println("\n\n\t ||||||| //// ----\n\n");
     System.out.println("\t Herzlich willkommen zum");
     System.out.println("\t Nimm-Spiel");
     System.out.println("\n\n\t |||| ////// -----\n\n");
     System.out.println("\tAnzahl der Staebchen, mit denen heute gespielt wird: ");
     readln = new BufferedReader(new InputStreamReader(System.in));
     try
     {
     start = Integer.valueOf(readln.readLine());
     }
     catch(Exception e)
     {
     System.out.println("\tWenn Sie keine Eingabe hinbekommen .......");
     System.out.println("\tdann wird heute mit 15 Staebchen gespielt !");
     start = 15;
     }
     NimmSpiel spiel = new NimmSpiel(spielerA, spielerB, start );
     spiel go();
     }
     //Konstruktor
     public NimmSpiel(Spieler spielerA, spieler spielerB, int zahl)
     {
     this.spielerA = spielerA;
     this.spielerB = spielerB;
     this.aktSpieler = spielerA;
     this.zahl = zahl;
     }
     
     //Spielsteuerung
     public void go()
     {
     System.out.print("\n\tSpieler A: -> ");
     while (this.zahl > 0)
     {
     //System.out.printf(" Rest: "+this.zahl+" -> ");
     System.out.printf(" es liegen: %4d Staebchen -> ",this.zahl);
     int spielerZahl = this.aktSpieler.liefereZahl();
     if (!(spielerZahl == 1 || spielerZahl == 2 || spielerZahl == 3))
     {
     System.out.print("\n\t Nur Zahlen von 1 bis 3 sind erlaubt!");
     return;
     }
     this.zahl = spielerZahl;
     if (this.zahl > 0)
     {
     if (this.aktSpieler == spielerA)
     {
     this.aktSpieler == spielerB;
     System.out.print("\n\tSpieler B: -> ");
     }
     else
     {
     this.aktSpieler == spielerA;
     System.out.print("\n\tSpieler A: -> ");
     }
     }
     }
     if (this.aktSpieler == SpielerA)
     System.out.println("\n\n\t!! Spieler A hat gewonnen !!");
     else
     System.out.println("\n\n\t!! Spieler B hat gewonnen !!");
     }
    }
    class Spieler
    {
     BufferedReader readln;
     public int liefere Zahl()
     {
     readln = new BufferedReader(new InputStreamReader(System.in));
     try
     {
     System.out.print(" ziehen Sie 1 2 oder 3: ");
     return Integer.valueOf(readln.radLine());
     }
     catch(Exception e)
     {
     return 0;
     }
     }
    }
    //Programm Ende
    
    kann mir wer sagen wo ich was umschreiben muss.. ich bin für sowas zu unfähig..
     
  2. 30. September 2008
    AW: NimmSpiel umschreiben

    naja in deiner go() methode musst du irgendwo die abfrage reingeben ob es sich beim aktspieler um den computer handelt oder nicht! ist das so, dann ist das stäbchen dass er nehmen muss aus der formel, ansonsten rufst du lieferZahl auf den aktspieler auf!

    also so in die richtung ...

    Code:
    //irgendwo rest und max definieren
    int spielerZahl = -1;
    if (this.aktSpieler == SpielerB)
    { 
     spielerZahl = rest%(max+1);
    }
    else 
     spielerZahl = aktSpieler.liefereZahl();
    //check ob zahl korrekt ...
    rest--;
    
    Müsste so in die Richtung funktionieren ... der computer ist dann halt unschlagbar du könntest jetzt noch schwierigkeitsgrade einführen sodass die zahl die der computer nimmt entweder rein zufällig ist, zufällig und aus formel oder nur aus formel ...
     
  3. 30. September 2008
    AW: NimmSpiel umschreiben

    Danke!

    Jo das mit dem Schwierigkeitsgrad, das der Computer das zufällig nimmt könnte man machen.
    Ich habs bis jetz auch nicht geschaft den Computer zu schlagen
    Ich setzt deinen Code mal eben um ^^



    Wäre das so korrekt?#

    Code:
    /*
    Nimmspiel von klaxx
    */
    
    import java.io.*; /*Importieren der Sprachen, Klassen etc.*/
    import java.lang.*;/* */
    
    public class NimmSpiel /* erstellen der Klasse NimmSpiel */
    
    {
     //Attribute
     Spieler spielerA, spieler B, aktSpieler; // Objekte der Klasse Spieler
     int zahl;
     static int start;
     static BufferedReader readln;
     
     //Hauptprogramm
     public static void main(String[] args)
     {
     Spieler spielerA = new Spieler();
     Spieler spielerB = new Spieler();
     System.out.println("\n\n\t ||||||| //// ----\n\n");
     System.out.println("\t Herzlich willkommen zum");
     System.out.println("\t Nimm-Spiel");
     System.out.println("\n\n\t |||| ////// -----\n\n");
     System.out.println("\tAnzahl der Staebchen, mit denen heute gespielt wird: ");
     readln = new BufferedReader(new InputStreamReader(System.in));
     try
     {
     start = Integer.valueOf(readln.readLine());
     }
     catch(Exception e)
     {
     System.out.println("\tWenn Sie keine Eingabe hinbekommen .......");
     System.out.println("\tdann wird heute mit 15 Staebchen gespielt !");
     start = 15;
     }
     NimmSpiel spiel = new NimmSpiel(spielerA, spielerB, start );
     spiel go();
     }
     //Konstruktor
     public NimmSpiel(Spieler spielerA, spieler spielerB, int zahl)
     {
     this.spielerA = spielerA;
     this.spielerB = spielerB;
     this.aktSpieler = spielerA;
     this.zahl = zahl;
     }
     
     //Spielsteuerung
     public void go()
     {
     System.out.print("\n\tSpieler A: -> ");
     while (this.zahl > 0)
     {
     
     //rest und max definieren
     int spielerZahl = -1;
     if (this.aktSpieler == SpielerB)
     { 
     spielerZahl = rest%(max+1);
     }
     else 
     spielerZahl = aktSpieler.liefereZahl();
     //check ob zahl korrekt ...
     rest--;
     //System.out.printf(" Rest: "+this.zahl+" -> ");
     System.out.printf(" es liegen: %4d Staebchen -> ",this.zahl);
     int spielerZahl = this.aktSpieler.liefereZahl();
     if (!(spielerZahl == 1 || spielerZahl == 2 || spielerZahl == 3))
     {
     System.out.print("\n\t Nur Zahlen von 1 bis 3 sind erlaubt!");
     return;
     }
     this.zahl = spielerZahl;
     if (this.zahl > 0)
     {
     if (this.aktSpieler == spielerA)
     {
     this.aktSpieler == spielerB;
     System.out.print("\n\tC Computer: -> ");
     }
     else
     {
     this.aktSpieler == spielerA;
     System.out.print("\n\tSpieler A: -> ");
     }
     }
     }
     if (this.aktSpieler == SpielerA)
     System.out.println("\n\n\t!! Spieler A hat gewonnen !!");
     else
     System.out.println("\n\n\t!! Computer hat gewonnen !!");
     }
    }
    class Spieler
    {
     BufferedReader readln;
     public int liefere Zahl()
     {
     readln = new BufferedReader(new InputStreamReader(System.in));
     try
     {
     System.out.print(" ziehen Sie 1 2 oder 3: ");
     return Integer.valueOf(readln.radLine());
     }
     catch(Exception e)
     {
     return 0;
     }
     }
    }
    //Programm Ende
    
     
  4. 30. September 2008
    AW: NimmSpiel umschreiben

    nach dem block den du von mir hast fragst du die zahl erneut ab, egal ob computer oder nicht! diese zeile gehört raus

    Code:
    //rest und max definieren
     int spielerZahl = -1;
     if (this.aktSpieler == SpielerB)
     spielerZahl = this.zahl%(max+1);
     else 
     spielerZahl = aktSpieler.liefereZahl();
     
     if (!(spielerZahl == 1 || spielerZahl == 2 || spielerZahl == 3))
     {
     System.out.print("\n\t Nur Zahlen von 1 bis 3 sind erlaubt!");
     return;
     }
     this.zahl--;
    
    
    sofern this.zahl die anzahl der übrig gebliebenen stäbchen ist gehört das so, ansonsten bitte dementsprechend umändern
     
  5. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.