Null Eins Spiel

El Kabong

Aktives Mitglied
Hallo!

Ich hab folgende Aufgabenstellung:

Ein Spieler des NullEinsSpiels hat einen Namen und kann ein Spiel spielen, das er entweder gewinnt oder verliert.
Definieren Sie eine Klasse, die die Spielbilanz eines Spielers führt.
Diese Klasse soll über eine Methode spiel(boolean gewonnen) verfügen, mit der angeben werden kann,
ob der Spieler gewonnen oder verloren hat. Außerdem soll die Anzahl der insgesamt gespielten Spiele, der insgesamt
gewonnenen und der insgesamt verlorenen Spiele und die Gewinnquote (in Prozent) des Spielers ermittelt
werden können.

Nun, was ich bisher hinbekommen habe ich nicht sehr viel.

Java:
public class NullEinsSpiel {
public static void main(String[] args) {

	spiel();
	
}

	public static void spiel() {
	
	int zaehler = 0;
	int zahl = (int)((Math.random()) *  2 + 0);
	
	if (zahl == 0) {
		System.out.println(true);
		zaehler = zaehler++;
		
	} else {
		System.out.println(false);
		zaehler = zaehler++;
	
	}

	System.out.println(zaehler);
	}
	}


Meine Idee war es das wenn die Zahl 0 rauskommt das der Spieler dann gewinnt und wenn eine 1 rauskommt das der Spieler dann eben verliert. Gut, dass ich die 0 und 1 rausbekomme hab ich hinbekommen. Allerdings hab ich Schwierigkeiten mit dem Zähler.
In der Aufgabenstellung steht ja das jedes Spiel gezählt werden muss. Ich dachte mir dann einfach das nach jedem ausgeben von true oder false der Zähler um eins erhöht wird. Nur leider funktioniert das nicht so ganz wie ich es mir erhofft hatte.


Danke für die Hilfe!



Gruß,
El Kabong
 
G

Gast2

Gast
Ein Spiel ist ein Spiel... Du sollst aber mehrere Spiele (oder zumindest Durchläufe) haben...

Java:
public class NullEinsSpiel {
	private int alleSpiele = 0;
	private int gewonneneSpiele = 0;

	public static void main(String[] args) {
		NullEinsSpiel nes = new NullEinsSpiel();
		
		// 10 mal spielen
		for (int i = 0; i < 10; i++) {
			
			// setzte mit deiner zufall methode gewonnen oder verloren
			int zahl = (int) ((Math.random()) * 2 + 0);
			if (zahl == 0) {
				nes.spiel(true);
			} else {
				nes.spiel(false);
			}
		}

		// noch 10 mal spielen - diesmal mit etwas schönerer Zufallsfuntion
		Random rnd = new Random();
		for (int i = 0; i < 10; i++) {
	        nes.spiel(rnd.nextBoolean());
		}
		
		System.out.println("Alle Spiele: "+nes.getAlleSpiele());
		System.out.println("Gewonnen Spiele: "+nes.getGewonneneSpiele());
		System.out.println("Verlorene Spiele: "+(nes.getAlleSpiele()-nes.getGewonneneSpiele()));
	}

	public void spiel(boolean gewonnen) {
		alleSpiele++;
		if (gewonnen) {
			gewonneneSpiele++;
		}
	}

	public int getAlleSpiele() {
		return alleSpiele;
	}

	public int getGewonneneSpiele() {
		return gewonneneSpiele;
	}

}

Versuch das mal nachzuvollziehen - und die Statistik/Gewinnquote und den Spieler dann dazu zu bauen
 
Zuletzt bearbeitet von einem Moderator:

El Kabong

Aktives Mitglied
Hallo!

Bei der Methode spiel(boolean gewonnen) muss ja ein Parameter übergeben werden. rnd.nextBoolean() ist dieser Parameter, richtig?


Ich hab jetzt versucht den Spieler einzubauen und die Quote.

Java:
import java.util.Random;

public class NullEinsSpiel {
	private double alleSpiele = 0;
	private double gewonneneSpiele = 0;
	private double quote;
	private String name;

	public static void main(String[] args) {
		NullEinsSpiel nes = new NullEinsSpiel();
		NullEinsSpiel name = new NullEinsSpiel("Mr Floppy");

		for (int i = 0; i < 10; i++) {

			int zahl = (int) ((Math.random()) * 2 + 0);
			if (zahl == 0) {
				nes.spiel(true);
			} else {
				nes.spiel(false);
			}
		}

		// noch 10 mal spielen - diesmal mit etwas schönerer Zufallsfuntion
		Random rnd = new Random();
		for (int i = 0; i < 10; i++) {
			nes.spiel(rnd.nextBoolean());
		}

		System.out.println("Name des Spielers: " + name.name);
		System.out.println("Alle Spiele: " + nes.getAlleSpiele());
		System.out.println("Gewonnen Spiele: " + nes.getGewonneneSpiele());
		System.out.println("Verlorene Spiele: "
				+ (nes.getAlleSpiele() - nes.getGewonneneSpiele()));
		System.out.println("Quote: " + nes.getGewinnQuote());

	}

	public void spiel(boolean gewonnen) {
		alleSpiele++;
		if (gewonnen) {
			gewonneneSpiele++;
		}
	}

	public double getAlleSpiele() {
		return alleSpiele;
	}

	public double getGewonneneSpiele() {
		return gewonneneSpiele;
	}

	public double getGewinnQuote() {
		this.quote = gewonneneSpiele / alleSpiele * 100;
		return quote;
	}

	public NullEinsSpiel(String name) {
		this.name = name;
	}

	public NullEinsSpiel() {
		
	}
}


EDIT: Ich musste den Datentyp int in double ändern, da ich ansonsten bei der Quote immer eine 0 rausbekommen würde.



Gruß,
El Kabong
 
G

Gast2

Gast
Jetzt stehen [c]name[/c] und [c]nes[/c] aber in keinem Zusammenhang.

Wenn du es so machen möchtest dann doch:
Java:
    public static void main(String[] args) {
        NullEinsSpiel nes = new NullEinsSpiel("Mr Floppy");
        //... und der Rest
    }

Und dann solltest du auch eine [c]getName()[/c] anbieten und die nutzen:
Java:
public String getName(){
  return name;
}

und

Java:
 System.out.println("Name des Spielers: " + nes.getName());

Ich denke mal für eine Hausaufgabe sollte das schon langen. Wenn man etwas weiterdenkt könnte man sich fragen ob der Name des Spielers wirklich eine Eigenschaft des Spiels ist. Und auch ob die Anzahl der Gespielten Spiele Eigenschaft des Spiel sind. Wohl eher nicht - aber das würde einiges an Umbauarbeit bedeuten.
 

El Kabong

Aktives Mitglied
Ich hab diese Aufgabe zum Spaß nochmal bearbeitet. Ich wollte jetzt noch eine Niederlagenquote einbauen, jedoch wird die im meinen Programm nicht ausgerechnet und ich weiß nicht wieso.
Echt zum verrückt werden.


Java:
package Klassen;

import java.util.Scanner;

public class NullEinsSpiel {

	static Scanner sc = new Scanner(System.in);

	static int counterGewonnen = 0;
	static int counterVerloren = 0;
	static int gespielteSpiele = 0;
	static int counterSpiele = 0;
	static double gewinnQuote;
	static double verlierQuote;
	static String spielername;

	public static void spiel(boolean gewonnen) {

		System.out.println("Bitte geben Sie ihren Namen ein : ");
		String spielername = sc.next();
		counterSpiele++;
		if (gewonnen) {
			System.out.println("Spielername : " + spielername);
			counterGewonnen++;
			System.out.println("Glückwunsch, gewonnen! ");
			System.out.println("Anzahl gewonnener Spiele : " + counterGewonnen);
			gewinnQuote = counterGewonnen / counterSpiele * 100;
			System.out.println("Ihre Gewinnquote liegt bei : " + gewinnQuote);
			System.out.println("Sie haben bereits " + counterSpiele
					+ " Spiel(e) gespielt.");

		} else {
			System.out.println("Spielername : " + spielername);
			counterVerloren++;
			System.out.println("Leider verloren! ");
			System.out.println("Anzahl verlorener Spiele : " + counterVerloren);
			verlierQuote = counterVerloren / counterSpiele * 100;
			System.out.println("Ihre Verlierquote liegt bei : " + verlierQuote);
			System.out.println("Sie haben bereits " + counterSpiele
					+ " Spiel(e) gespielt.");
		}

	}

	public static void main(String[] args) {

		NullEinsSpiel.spiel(true);
		NullEinsSpiel.spiel(true);
		NullEinsSpiel.spiel(false);

	}
}
 
G

Gast2

Gast
Java:
 verlierQuote = (double)counterVerloren / counterSpiele * 100;

Sollte da weiterhelfen

Vergleiche auch:

Java:
    public static void main(String[] args) {
 
      double a;
      int i = 1;
      int j = 3;
      
      a = i / j * 100;
      System.out.println(a);
      a = (double)i / j * 100;
      System.out.println(a);
 
    }
 

El Kabong

Aktives Mitglied
Okay danke!
Aber da frag ich mich warum
Java:
gewinnQuote = counterGewonnen / counterSpiele * 100;
das funktioniert hat, oder hat das nur funktioniert da immer 100% rausgekommen sind?
 
G

Gast2

Gast
Okay danke!
Aber da frag ich mich warum
Java:
gewinnQuote = counterGewonnen / counterSpiele * 100;
das funktioniert hat, oder hat das nur funktioniert da immer 100% rausgekommen sind?

Ja richtig, ist mir letzten mal drauf gucken durch die Lappen gegangen. Musst dir mal nen bisserl was anlesen zu int, long, double, float und den darauf implementierten algebraischen Funktionen.
 

Neue Themen


Oben