# Würfelspiel



## Ocean-Driver (7. Dez 2006)

Hallo,

Ich hab bereits ein Programm geschrieben, welches die größsten von drei Zahlen auswertet und ob zwei Zahlen gleichgroß sind, oder alle drei gleichgroß sind.

jetzt würde ich gern ein Würfelspiel schreiben.
Nur, welche möglichkeit gibt es?

Ich hab mir das ganze so vorgestellt:

Es wird die Anzahl von Nutzern eingeben ( 1-3 erstmal nur)

Das ganze will ich inner Console schreiben.
Nur wie kann ich eine zufällige Zahl erzeugen?

Vieleicht ist es ja als Struktogramm besser zu verstehen:

 - Eingabe von  Mitspielern
 - Wenn 3 dann generiere drei Zufallszahlen  und weiß diese zahl1, zahl2, zahl3 zu
 - Wenn 2 dann zahl = 0 und generie zwei zufallszahlen für zahl1 & zahl2


Danke schonmal


P.S.
Ich hab einmal die Überprüfung in einer Classe und das Würfelprogramm in einer anderen, wie kann ich von der einen auf die andere verweisen?


----------



## SlaterB (7. Dez 2006)

für Zufallszahlen benutze die Klasse Random


----------



## Ocean-Driver (7. Dez 2006)

Hi,

und wie sieht das in etwa aus?Danke

Edit:

So hier mal mein IF & Else Konstrukot mit der Überprüfung:

(Class: Zahlenberechnung)

```
if (zahl1 > zahl2)
		   {
		 
			if (zahl1 == zahl3)
		      {

		      System.out.println("Zahl1 und Zahl3 sind gleichgroß und größer als zahl2");

		      }
		   else
		      {
		       
		      if (zahl1 > zahl3)
		         {
		      System.out.println("zahl1 ist am größsten");

		         }
		      else
		         {

		           System.out.println("Zahl3 ist am größsten");

		         }
		      }
		   }
		else
		   {
		     
		   if (zahl1 == zahl2)
		      {
		        
			      if (zahl1 == zahl3) {System.out.println("Alle Zahlen sind gleichgroß");}
			      else
		      if (zahl1 > zahl3)
		         {
		           System.out.println("zahl1 und zahl2 sind gleichgroß und größer als Zahl3");

		         }
		      else
		         {
		         System.out.println("Zahl3 ist am größsten");
		 
		         }
		      }
		   else
		      {
		        

		      if (zahl2 == zahl3)
		         {
		           
		         System.out.println("zahl2 und Zahl3 sind gleichgroß und größer als zahl1");

		         }
		      else
		         {
		           

		         if (zahl2 > zahl3)
		            {
		              System.out.println("zahl2 ist am größsten");

		            }
		         else
		            {
		              System.out.println("Zahl3 ist am größsten");

		            }
		         }
		      }
		   }
```

(Class: Wuerfelprogramm)

```
package dreizahlen;
import java.util.*;

public class Wuerfelprogramm {


	public static void main(String[] args) throws Exception{
		
		Scanner s = new Scanner(System.in);
	    Random r = new Random(); 

		int zufall = r.nextInt();
		
		int mitspieler, zahl1, zahl2, zahl3;
		
		System.out.println("Bitte Geben Sie die Zahl von Mitspielern ein");
		mitspieler = s.nextInt();
		

		while (mitspieler == 1)
		{
			System.out.println("Bitte Eingabe wiederholen, das Spiel ist nur zu 2 oder zu 3 spielbar.:");
			mitspieler = s.nextInt();
		}

		
		
		switch (mitspieler)
		{
		case 2: // Hier sollte zahl1 der Wert 0 zugewiesen werden und für zahl2  und zahl3 random werte generiert werden.
		case 3: // Hier sollte allen drei Zahlen ein Random-Wert zugewiesen werden.
		default:System.out.println("Ihre eingabe ist ungültig - Das Spiel ist zu 2 oder zu 3 nutzbar.");
		
		}
		
		
		
		
	
	
	
	}

}
```


----------



## SlaterB (7. Dez 2006)

hmm, tut mir leid, 
wenn du Jave lernen willst, dann bitte alleine und nicht mit der Zeit anderer,
wenn es nur eine Hausaufgabe ist, dann mache ich sie auch nicht,

lese Lehrbücher und schaue in die API 
http://java.sun.com/j2se/1.5.0/docs/api/java/util/Random.html
bzw. warte auf Antworten freundlicherer Forum-Teilnehmer 
(-> bitte nicht von mir auf alle schließen)


----------



## Ocean-Driver (7. Dez 2006)

Hi,

Das sind keine Hausaufgaben, die drei Zahlen Überprüfung haben wir in der Schule gemacht, nun wollte ich mir selbst daraus nen Würfelprogramm schreiben.Wobei das dreizahlen Programm in der Schule nur die größste ausgegeben hat, bei zwei großen gabs dann Error..  :roll:


----------



## SlaterB (7. Dez 2006)

wenn jemand '1' eintippt, dann fängst du das als Fehler ab,
aber die anderen Millionen möglichen Eingaben sind alle ok?

mache lieber 'while not (2 or 3): Wiederholung'

dein switch läßt sich einfacher machen:
Zahl2 und 3 bekommen in jedem Fall Zufallswerte, das kann davor oder danach passieren,
im switch musst du nur entscheiden, was mit Zahl1 passiert,

am besten ganz ohne case:
Zahl1 vorher 0 zuweisen und dann mit einem einfachen if prüfen, ob 3 Spieler da sind,
dann Zahl1 eine Zufallszahl zuweisen,

was ist die Schwierigkeit bei der Zuweisung?
zahl2 = r.nextInt();


----------



## Ocean-Driver (7. Dez 2006)

Hi,


```
package dreizahlen;
import java.util.*;

public class Wuerfelprogramm {


	public static void main(String[] args) throws Exception{
		
		Scanner s = new Scanner(System.in);
	    Random r = new Random(); 

		int zufall = r.nextInt();
		
		int mitspieler, zahl1, zahl2, zahl3;
		int user1, user2, user3;
		
		System.out.println("Bitte Geben Sie die Zahl von Mitspielern ein");
		mitspieler = s.nextInt();
		

		while (!(mitspieler ==2) && !(mitspieler ==3))
		{
			System.out.println("Bitte Eingabe wiederholen, das Spiel ist nur zu 2 oder zu 3 spielbar:");
			mitspieler = s.nextInt();
		}
		

		
		
		switch (mitspieler)
		{
		case 2: 
		System.out.println("Bitte den ersten Mitspieler eingeben(vorerst nur Zahlen)");
		user1 = s.nextInt();
		System.out.println("Bitte den zweiten Mitspieler eingeben(vorerst nur Zahlen)");
		user2 = s.nextInt();
			
		zahl1 = r.nextInt(); zahl2 = r.nextInt(); zahl3 = 0; System.out.println(""+user1+" hat folgenden Wert gewürfelt: "+zahl1+"");
		System.out.println(""+user2+" hat folgenden Wert: "+zahl2+" ");
		
		case 3: zahl1 = r.nextInt(); zahl2 = r.nextInt(); zahl3 = r.nextInt();break;
		default:System.out.println("Ihre eingabe ist ungültig - Das Spiel ist zu 2 oder zu 3 nutzbar.");
		
		}
		
		
		
		
	
	
	
	}

}
```



nun möchte ich diese Werte mit dem Script aus der Klasse Zahlenberechnung überprüfen, wie mache ich dass?
Wie verknüpfe ich zwei Klassen unter einander?
Muss ich in der Zahlenberechnungsklasse das  IF & ELSE Konstrukt noch irgendwie definieren?
Danke

mfg

P.S. Kennt einer ein gutes  Tutorials wo String erklärt werden?
Danke


----------



## SlaterB (7. Dez 2006)

der Code zur 'Zahlenberechnung' (Zahlenvergleich?) muss in irgendeiner Operation stehen,
z.B.
public void vergleiche(int zahl1, ..){
..
}

dann lautet der Aufruf
object.vergleiche(zahl1, zahl2, zahl3);

wobei object ein Objekt der anderen Klasse ist


----------



## Ocean-Driver (7. Dez 2006)

Hi,

Ich hab die IF & ELSE Verzweigung jetzt einfach in den case-bereich eingegliediert.
Nur, jetzt muss ich noch die Strings einfügen..
Hat da einer ein Tutorial?


----------



## SlaterB (7. Dez 2006)

wenn das immer noch diese 70 Zeilen sind (viel kürzer gehts kaum)
dann wären die in einer separaten Operation besser aufgehoben,
wegen der Übersichtlichkeit

---------

> Nur, jetzt muss ich noch die Strings einfügen.. 

was meinst du damit? ein völlig neues bisher nicht erwähntes Problem,
und zu ungenau beschrieben für irgendwelche Empfehlungen

allgemein vielleicht
http://www.galileocomputing.de/openbook/javainsel5/javainsel04_000.htm#Xxx999378


----------



## Ocean-Driver (7. Dez 2006)

hi,

Ich sags mal so:
Hab noch nie mit Strings gearbeitet, will aber usernamen einlesen.
Und wenn ich nen User mit Double einles, gibts folgenden Fehler:

Exception in thread "main" java.util.InputMismatchException
	at java.util.Scanner.throwFor(Unknown Source)
	at java.util.Scanner.next(Unknown Source)
	at java.util.Scanner.nextDouble(Unknown Source)
	at dreizahlen.Wuerfelprogramm.main(Wuerfelprogramm.java:53)


----------



## SlaterB (7. Dez 2006)

Scanner in der API anschauen:
http://java.sun.com/j2se/1.5.0/docs/api/java/util/Scanner.html
ist nur eine andere Operation,

schau auch mal 
http://www.pearson.ch/download/media/9783827268440_SP.pdf
an

bzw suche selber bei google, etwa nach:
java benutzereingaben einlesen

----------

@Exception:
was tippst du denn ein?
Ein double
5.0
oder
5,0?
Punkt oder Komma das kann schon einen wichtigen Unterschied machen


----------



## Leroy42 (8. Dez 2006)

@OceanDriver

Deine Vorgehensweise kann Wochen dauern bevor sich
ein Ergebnis einstellt, da dir die Grundlagen absolut fehlen
und du dich bereits an _mittelschwere_ Spielimplementationen
heranzuwagen versuchst.

Empfehlung: Arbeite dich erstmal mit einem Online-Tutorial
in die Grundlagen von Java (OO-Programmierung) anhand
der dort vorhandenen Beispielsaufgaben ein, bevor du
versuchst, solche (doch komplizierteren) eigene Aufgabenstellungen zu lösen.


----------



## Ocean-Driver (9. Dez 2006)

hi,

Hm.. In der Schule programmieren wir im Moment auf Consolen-Ebene, dort soll wohl alles nacheinander kommen.
Also es hat jetzt schon soweit funktioniert, das jeder User eine Zahl erhält und der Gewinnen ausgegeben wird + wieviel Punkte er mehr hat als die anderen.
Nur z.z. sieht id eAusgabe noch so aus:

Bitte Geben Sie die Zahl von Mitspielern ein
3
Bitte den ersten Mitspieler eingeben(vorerst nur Zahlen)
1
Bitte den zweiten Mitspieler eingeben(vorerst nur Zahlen)
1
Bitte den dritten Mitspieler eingeben(vorerst nur Zahlen)
2
1.0 hat folgenden Wert gewürfelt: -1078150876
1.0 hat folgenden Wert gewürfelt: -2032444014 
2.0 hat folgenden Wert gewürfelt: 1050267504
2.0 hat gewonnen.
2.0 hat 2128418380 mehr Punkte als 1.0 und -1212255778 mehr Punkte als 1.0.

Ist das denn nur über String realisierbar?
Falls ich nämlich einen Namen (Z.B. "Daniel") eingebe, gibts folgenden Error:

Bitte Geben Sie die Zahl von Mitspielern ein
3
Bitte den ersten Mitspieler eingeben(vorerst nur Zahlen)
Daniel
Exception in thread "main" java.util.InputMismatchException
	at java.util.Scanner.throwFor(Unknown Source)
	at java.util.Scanner.next(Unknown Source)
	at java.util.Scanner.nextDouble(Unknown Source)
	at dreizahlen.Wuerfelprogramm.main(Wuerfelprogramm.java:53)


Ich denke das liegt daran das die variable (ist ein double) damit nicht klar kommt.Deswegen würde ich shc on das ganze versuchen so zu realisieren.

P.S. Jetzt wollte ich nur ein While-Konstrukt realisieren, das einen Fehler ausgibt, wenn ein Name doppelt eingegeben wurde.

das ganze habe ich einfach hinter die Benutzereingabe gesetzt:

```
while ((user1 == user2) & (user1 == user3) & (user2 == user3))
			{
				System.out.println("Bitte geben sie für jeden Mitspieler einen Individuellen Namen ein.");
				
			}
```


nur leider bringt das ganze garkein Resultat.Wodran könnte das liegen?


----------



## SlaterB (9. Dez 2006)

statt
s.nextInt();
oder
s.nextDouble()
must du offensichtlich
s.nextString()
oder
s.next() 
verwenden und das Ergebnis in einen String speichern..

durch Fragen kriegt man sowas aber nicht raus,
vielleicht einmal, was stundenlang dauert,

aber solche Fragen stellen sich beim Programmieren alle 5 Min...,
also: probieren probieren probieren und vorher in der API lesen was Scanner kann
und noch vorher in einem Lehrbuch lesen was die wichtigsten Operation sind,

hier wurden sogar schon im Thread schon einige Links gepostet,
musst du nur draufklicken und lesen!..,

ohne Arbeit geht Programmieren aber nicht..

----------

> while ((user1 == user2) & (user1 == user3) & (user2 == user3)) 

wenn schon dann lautet die korrekte Syntax

while ((user1 == user2) && (user1 == user3) && (user2 == user3)) 


vielleicht aber besser oder statt und?

while ((user1 == user2) || (user1 == user3) || (user2 == user3))


----------



## Ocean-Driver (9. Dez 2006)

Hm, komisch damit geht das auch nicht.


```
System.out.println("Bitte den ersten Mitspieler eingeben.");
			user1 = s.next();
			System.out.println("Bitte den zweiten Mitspieler eingeben.");
			user2 = s.next();
			System.out.println("Bitte den dritten Mitspieler eingeben.");
			user3 = s.next();
			
			while ((user1 == user2) || (user1 == user3) || (user2 == user3))
			{
				System.out.println("Bitte geben sie für jeden Mitspieler einen Individuellen Namen ein.");
				
			}
```


Wodrin könnte das Problem liegen?

Noch eine Frage:
Kann ich die Random Zahl auf einen Bereich einklemmen?Z.B. das nur pos. Zahlen rauskommen können?Oder nur von 1-6?


----------



## SlaterB (10. Dez 2006)

Strings sind Objekte, 2 Benutzereingaben sind immer verschiedene Objekte, nie ==,
der Inhalt kann gleich sein, benutze user1.equals(user2)


--------

schaue dir die Random-Klasse an, den Link habe ich bereits gepostet, soviele Operationen gibts da nicht zur Auswahl,
da wirst du schon was finden 

um einen Zufallsbereich weiter zu verändern kann man die Zufallszahl z.B. mit +10 verschieben,


----------

