Spielablauf funktioniert nicht wie gewollt :/

Status
Nicht offen für weitere Antworten.

dyn

Mitglied
Hi!
Bin dabei eine Art Glücksrad zu programmieren.
Ich bin mittlerweile total durcheinander und weiß nicht, wieso mein Code für den Spielablauf nicht einwandfrei funktioniert.
Es lässt sich wunderbar kompilieren, aber ab und zu ist ein Spieler dran, obwohl er gar nicht dran sein sollte, bzw. das Spiel hört einfach nach einem Dreh auf.
Ich würde mich freuen, wenn jemand mir dahingehend weiterhelfen könnte.

Außerdem würde mich rein code-design-technisch interessieren, ob die Methode zum testen, was beim jeweils gedrehten Betrag passieren soll, eher zur Glücksrad-Klasse oder zur Spieler-Klasse gehört.
Es ist ja klar, dass ein Spieler-Objekt drehen kann.
Aber wer soll nun die Methode zum erdrehten Betrag beinhalten?! Würde mich halt rein OOP-technisch interessieren!

Hier nun der Code:


Code:
 public class glücksrad {
	
	private Spieler spieler1;
	private Spieler spieler2;
	private Spieler spieler3;
	int aktuellerSpieler = 2; 
	String aktuellerName;
     
    
     public glücksrad () 

     { 
     	spieler1 = new Spieler("Mannfred", 0, this, true);
    	spieler2 = new Spieler("Klaus", 0, this, false);
    	spieler3 = new Spieler("Bernd", 0, this, false);
    	naechster();
     }
     
   

     // wer ist als nächstes dran? --> naechster 
    public void naechster()
    { 
		   /* 
		   /  Wenn Spielernummer 2 ist, prüfe ob Spieler1 noch dran ist.
		   /  Wenn nicht, setze Spielernummer auf 3 und Spieler2 ist an der Reihe!
		   /  Wenn doch, gib aus, dass Spieler1 dran ist und drehe das Rad!
		   */
           if (aktuellerSpieler == 2)  
            {
           	 if (spieler1.istDran() == false)
           	 {
           	  aktuellerSpieler = 3;
           	  spieler2.setIstDran(true);
           	 }
           	  else
           	  {
           	   System.out.println("Spieler 1 ist dran!");
           	   spieler1.drehen();
           	  }
            } 
			
		   /* 
		   /  Wenn Spielernummer 3 ist, prüfe ob Spieler2 noch dran ist.
		   /  Wenn nicht, setze Spielernummer auf 1 und Spieler3 ist an der Reihe!
		   /  Wenn doch, gib aus, dass Spieler2 dran ist und drehe das Rad!
		   */	
           if (aktuellerSpieler == 3)  
           {
           	if (spieler2.istDran() == false)
            {
             aktuellerSpieler = 1;
             spieler3.setIstDran(true);
            }
             else
             {
              System.out.println("Spieler 2 ist dran!");
              spieler2.drehen(); 
             }
           } 
           
           /* 
		   /  Wenn Spielernummer 1 ist, prüfe ob Spieler3 noch dran ist.
		   /  Wenn nicht, setze Spielernummer auf 2 und Spieler1 ist an der Reihe!
		   /  Wenn doch, gib aus, dass Spieler3 dran ist und drehe das Rad!
		   */	
           if (aktuellerSpieler == 1)  
           {
            if (spieler3.istDran() == false)
            {
             aktuellerSpieler = 2;
             spieler1.setIstDran(true);
            } 
             
             else
             {
              System.out.println("Spieler 3 ist dran!");
           	  spieler3.drehen();
             }
           	
           } 

      }
     
     public static void main(String args[])
     {
     	new glücksrad();
     }
       	
     	
}

Code:
public class Spieler {
	
	private String name;   		 // Name des Spielers
    private int kontostand;		 // Kontostand Spieler 1
  	private int zahl;	 	 	 // Zufallszahl für gedrehtes Feld
  	private int betrag;      	 // erdrehter Betrag muss noch getBetrag gemacht werden!!
  	private boolean istDran;     // dran?
    private String felder[] = { "Pleite :-P", "500", "200", "1000", "200", "Aussetzen", "Bonus", "2000", "Pleite :-P",
				 "500", "200", "5000", "1000", "Aussetzen", "Bonus", "2000"};
    
    
    // Glücksrad wird bereitgestellt
    glücksrad rad;
	
    
    // Konstruktor
    public Spieler (String name, int kontostand, glücksrad rad, boolean istDran)
	{
     setName(name);
     setKontostand(kontostand);
     setIstDran(istDran);
     this.rad = rad;
    }
    	
    	
    	// Methode setName legt den Namen des Spielers fest.
    	public void setName(String name)

    	{ 
    	 this.name = name;  
    	}     
    
            // Methode getName liefert den Namen des Spielers.
    		public String getName()

    	     { 
  	          return name;  
    	     }
    		
    		// Methode setKontostand legt den Kontostand des Spielers fest.   		
    		public void setKontostand(int kontostand)
    		{
    			this.kontostand = kontostand;
    		}
    		
    		// Methode getKontostand liefert den Kontostand des Spielers
    		public int getKontostand()
    		{
    			return kontostand;
    		}
			
			// Methode setIstdran legt fest, ob der Spieler an der Reihe ist.    		    		    		  
    		public void setIstDran(boolean istDran)
			{
				this.istDran = istDran;
			}
			
    		// Methode istDran ermittelt, ob der Spieler dran ist.
    		public boolean istDran()
    		{
    			return istDran;
    		}
    		
    		
    		
    		// Methode drehen simuliert das Drehen des Rades.
    		public void drehen()
    	        {
    	        	    	   		   
    	   		   // Berechne Zufallsbegriff
    	   		   
    	   		   zahl = (int) (Math.random() * 16);
    	   	       String feld = felder[zahl];
    	   	       System.out.println("gedrehter Betrag: "+felder[zahl]);    	   	       
    	        	 
    		     	      	
	   	      	  	      	
	   	      	switch (zahl)
				{
	   	      	 // Wenn Bankrott -> Kontostand auf 0, nächster Spieler!
	   	      	 case 0: case 8: kontostand = 0; istDran = false; rad.naechster();
	   	      	 
	   	      	 // Wenn Aussetzen -> nächster Spieler!
	   	      	 case 5: case 13: istDran = false; rad.naechster();
	   	      	 
	   	      	 // Wenn Bonus -> nächster Spieler! (muss noch geändert werden)
	   	      	 case 6: case 14: istDran = false; rad.naechster();
	   	      	 
	   	      	 // Wenn 500 -> fuege 500 zum Konto hinzu, Spieler ist weiterhin dran.
	   	      	 case 1: case 9:  kontostand += 500; istDran = true ;break;
	   	      	 
	   	      	 // Wenn 200 -> fuege 200 zum Konto hinzu, Spieler ist weiterhin dran.
	   	      	 case 2: case 4: case 10: kontostand += 200; istDran = true;break;
	   	      	 
	   	      	 // Wenn 1000 -> fuege 1000 zum Konto hinzu, Spieler ist weiterhin dran.
	   	      	 case 3: case 12: kontostand += 1000;istDran = true;break;
	   	      	 
	   	      	 // Wenn 2000 -> fuege 2000 zum Konto hinzu, Spieler ist weiterhin dran.
	   	      	 case 7: case 15: kontostand += 2000;istDran = true;break;
	   	      	
	   	      	 // Wenn 5000 -> fuege 5000 zum Konto hinzu, Spieler ist weiterhin dran.
	   	      	 case 11: kontostand += 5000;istDran = true;break;
	   	     	   	     
				}
	   	           }
    		  	}
 
D

dyyn

Gast
Ich habe das nicht im anderen Thread weitergeschrieben, weil das eine GANZ andere Thematik war.
Es ging da quasi um Grafikausgabe und nicht um den Spielablauf.
Außerdem habe ich es nicht in den Spiele-Bereich gepackt, weil dort meist grafische Spiele besprochen werden, ich aber eine schlichte SWING-Applikation(mit einem sich evtl. drehenden Rad) erstellen will!
Immerhin danke für die Information, dass du die Methode also in die Glücksrad-Klasse stecken würdest...

Meldet euch bitte, wenn ihr mir wirklich helfen könnt
:###
 

Mag1c

Top Contributor
Moin,

in deinem Spiel fehlt eine Hauptschleife. Du rufst rekursiv immer wieder naechster() auf. Du wirst dadurch irgendwann einen Stacküberlauf bekommen. Und das ist auch der Grund, warum dein Spiel einfach aufhört, da du in "drehen()" eben nur unter bestimmten Bedingungen wieder "naechster()" aufrufst. Wenn das nicht passiert, ist das Spiel einfach zuende.

Versuche mal, den Spielablauf etwas generischer zu gestalten. Packe z.B. einfach alle Spieler (egal wie viele) in eine Liste ("ArrayList spielerListe = new ArrayList(); spielerListe.add(spieler1)..."). In der Hauptspielschleife (könnte eine neue Klasse für den Spielablauf ergeben) wird einfach der erste Spieler aus der Liste genommen("spielerListe.remove(0)"). Der ist jetzt dran, d.h. der Spieler führt eine "spieler.aktion()" aus. Seine "aktion()" besteht aus "gluecksrad.drehen()" und der Auswertung des Ergebnisses. Wenn der Spieler fertig ist, wird er in der Liste wieder hinten angehängt ("spielerListe.add(spieler)").
Jetzt solltest du noch eine Abbruch(Gewinn-)bedingung in die Hauptschleife einbauen, damit die Spieler sich nicht zu Tode spielen.

Gruß
Mag1c
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D WSDL-Aufruf funktioniert nicht mehr nach Umstieg auf Maven Allgemeine Java-Themen 4
Zrebna Berechnung der Zeit funktioniert nicht wie erwartet: Date, GregorianCalendar Allgemeine Java-Themen 16
V Wie funktioniert das Schlüsselwort "final" von Java? Allgemeine Java-Themen 19
M Apache Proxy Weiterleitung auf Tomcat funktioniert nicht wie gewünscht Allgemeine Java-Themen 1
W While Schleife funktioniert nicht ganz Allgemeine Java-Themen 4
H do-while Schleife funktioniert nicht wie ich es möchte Allgemeine Java-Themen 7
ERlK JDA Code funktioniert nicht? Allgemeine Java-Themen 4
B HeapSort für Array of Strings funktioniert nur teilweise Allgemeine Java-Themen 3
stormyark TikTakToe funktioniert nicht Allgemeine Java-Themen 10
T Remove bei ArrayList funktioniert nicht Allgemeine Java-Themen 2
M Map<String,String>funktioniert nicht richtig Allgemeine Java-Themen 4
P String.replace() funktioniert nicht? Allgemeine Java-Themen 3
boschl2000 Springerproblem-Implementierung funktioniert nicht richtig Allgemeine Java-Themen 1
F Getter Methode aufrufen funktioniert nicht Allgemeine Java-Themen 1
N Regulärer Ausdruck funktioniert nicht Allgemeine Java-Themen 6
Lukas2904 Wie funktioniert ein KeyLogger? Allgemeine Java-Themen 3
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
1Raini Java if-Abfrage funktioniert nicht! Allgemeine Java-Themen 3
Killunox MaxHeap Zuweisung unter Linux funktioniert nicht Allgemeine Java-Themen 1
I Wieso funktioniert das nich? Allgemeine Java-Themen 5
Dann07 MP3 Datei abspielen funktioniert nicht Allgemeine Java-Themen 6
O Aus JAR-Datei erstellte EXE-Datei funktioniert nicht Allgemeine Java-Themen 10
A Mp3 Player funktioniert nicht Allgemeine Java-Themen 0
X JNA funktioniert nicht mehr Allgemeine Java-Themen 4
bueseb84 FolderWatcher mit WatchService funktioniert nur bedingt Allgemeine Java-Themen 5
Drachenbauer Division mit Int funktioniert nicht Allgemeine Java-Themen 3
O docx-Datei erzeugung mit DocXStamper funktioniert nicht Allgemeine Java-Themen 2
F Schleife funktioniert nicht richtig Allgemeine Java-Themen 13
T Split() Methode funktioniert nicht?! Allgemeine Java-Themen 11
L Tesseract-OCR 4.0 unter Linux funktioniert nicht Allgemeine Java-Themen 3
J Wie konkret funktioniert das Modulsystem unter Java 11? Allgemeine Java-Themen 4
J Neuronales Netz funktioniert mal und mal nicht. Allgemeine Java-Themen 3
T Umlaute in Eclipse einlesen funktioniert nicht Allgemeine Java-Themen 16
A Methodenaufruf funktioniert nicht richtig Allgemeine Java-Themen 5
C WindowBuilder Design funktioniert nicht Allgemeine Java-Themen 0
J FTPSClient funktioniert nicht Allgemeine Java-Themen 4
H IDEA IntelliJ Java Mail funktioniert nach Export nicht mehr! Allgemeine Java-Themen 1
M Operatoren Warum funktioniert diese überprüfung nicht? Allgemeine Java-Themen 7
R jar-Datei funktioniert nicht Allgemeine Java-Themen 2
E Open Declaration Funktioniert nicht Allgemeine Java-Themen 0
R Verschlüsselung funktioniert nicht Allgemeine Java-Themen 5
RalleYTN requires transitive funktioniert nicht? Allgemeine Java-Themen 7
R Bruteforce hashes mit multithreading. Funktioniert das so? Allgemeine Java-Themen 0
P Best Practice Wieso funktioniert der Modulo - Operator nicht? Allgemeine Java-Themen 2
HarleyDavidson Eigener PropertyChangeListener funktioniert einfach nicht Allgemeine Java-Themen 3
J Exclude funktioniert nicht Allgemeine Java-Themen 2
K .jar funktioniert nicht vollständig Allgemeine Java-Themen 1
P Java https proxy (-Dhttps.proxyHost) Start-Parameter funktioniert nicht? Allgemeine Java-Themen 2
L Auswertung eines Testes funktioniert nicht Allgemeine Java-Themen 37
O Fahrenheit/Celsius Converter funktioniert nicht Allgemeine Java-Themen 2
M Serialisierung funktioniert nicht Allgemeine Java-Themen 9
D Collections.sort funktioniert nicht in exportierten .class Dateien Allgemeine Java-Themen 10
J Arrays auf gleichheit untersuchen funktioniert nicht Allgemeine Java-Themen 11
P GUI: ArrayList anzeigen funktioniert nicht Allgemeine Java-Themen 5
H Timer funktioniert nicht? Allgemeine Java-Themen 3
R javax.comm --> Programm funktioniert nach Export nicht mehr Allgemeine Java-Themen 0
O Mein JButton Array funktioniert nicht Allgemeine Java-Themen 3
R Erste Schritte Object reference funktioniert nicht. Wie mach ichs richtig? Allgemeine Java-Themen 3
J If Abfrage funktioniert nicht Allgemeine Java-Themen 4
R Objekt funktioniert nicht auf iOS Allgemeine Java-Themen 15
U PersistenceManager.createEntityManager funktioniert nicht Allgemeine Java-Themen 3
D Java Datei nach Eclipse Export funktioniert nicht Allgemeine Java-Themen 0
M Eigene forEach()-Methode funktioniert nicht. Allgemeine Java-Themen 2
H File.listFiles() funktioniert nicht... Allgemeine Java-Themen 10
JG12111989 Auswertung von Fragebogen funktioniert nicht! Allgemeine Java-Themen 7
M Primzahlberechnung funktioniert nicht. Allgemeine Java-Themen 4
A JFreeChart funktioniert nicht :( Allgemeine Java-Themen 6
C file.delete() funktioniert bei zweiten aufruf nicht mehr Allgemeine Java-Themen 3
F Datei einlesen funktioniert nicht Allgemeine Java-Themen 3
A Debugger im Java-Editor funktioniert nicht Allgemeine Java-Themen 5
B DB-Zugriff einer Webanwendung funktioniert nicht mit Java 7 Allgemeine Java-Themen 2
B Web-Anwendung funktioniert mit Java 1.8, aber nicht mit Java 1.7 (auf Client) Allgemeine Java-Themen 5
J Swing Cursor.WAIT funktioniert nicht nach JFileChooser Allgemeine Java-Themen 1
P Wie funktioniert das Feedback eines Klicks auf eine Java GUI Allgemeine Java-Themen 10
F JTextField funktioniert nicht Allgemeine Java-Themen 6
Athena Programm funktioniert nur beim Debugging korrekt, sonst nicht. Allgemeine Java-Themen 1
S CSV Eintrag der nächsten Zeile auslesen funktioniert nicht Allgemeine Java-Themen 8
S Command funktioniert in Kommandzeile aber nicht mit ProcessBuilder bzw. Runtime.exec auf MAC Allgemeine Java-Themen 3
G Verschlüsselungsalgorythmus funktioniert nicht Allgemeine Java-Themen 2
buggy84 Ausführen einer Batch mit Parameterübergabe funktioniert nicht richtig Allgemeine Java-Themen 18
G Befehl funktioniert in Eclipse allerdings nicht in einer Jar-Datei Allgemeine Java-Themen 3
N Werte aus Arrays auslesen funktioniert nicht Allgemeine Java-Themen 5
W getResources funktioniert nur in Eclipse, nicht in JAR Allgemeine Java-Themen 2
S Methode funktioniert nicht als ActionListener Allgemeine Java-Themen 4
M exec() funktioniert nicht Allgemeine Java-Themen 1
M RC4-Chiffre (funktioniert eingeschränkt) Allgemeine Java-Themen 6
X Datentypen Dropzone.options funktioniert nicht Allgemeine Java-Themen 1
D Java funktioniert nur mit deaktivierter Grafikkarte Allgemeine Java-Themen 3
L Erste Schritte Eclipse und Lokal funktioniert - in HTML nicht! Allgemeine Java-Themen 2
K MD5 funktioniert nicht korrekt !? Allgemeine Java-Themen 9
M JAR Datei erstellen funktioniert nicht Allgemeine Java-Themen 5
Q JLabel Textausgabe funktioniert nicht Allgemeine Java-Themen 4
E SimpleDateFormat-Konvertierung funktioniert nicht Allgemeine Java-Themen 3
T Dateidownload Funktioniert nicht Allgemeine Java-Themen 4
C Wie funktioniert Projektplanung? Allgemeine Java-Themen 18
K String.replace funktioniert nicht Allgemeine Java-Themen 3
G treeMap.putall funktioniert nicht?! Allgemeine Java-Themen 2
DaniSahne96 Threads Code funktioniert nicht wie er sollte Allgemeine Java-Themen 9
S Warum funktioniert die runable -.jar nicht? Allgemeine Java-Themen 7
P Eclipse Unter Windows erstelle .jar unter Linux (Ubuntu) funktioniert nicht Allgemeine Java-Themen 5

Ähnliche Java Themen


Oben