# Spiel Roulette



## Lenii (5. Jun 2010)

Hallo ihr Lieben 

Am Montag muss unser Spiel programmiert sein..
Ich habe hier jetzt drei Codes, kann mir jemand erklären was da Zeile für Zeile passiert ??
Es geht ums bestehen oder nicht bestehen..
Ich wäre euch sehr sehr dankbar!

LG Lena


*1. Client.java*



```
import java.net.*;
import java.io.*;
import java.util.*;



public class Client {

	BufferedReader br;
	int status;


	/**
	 * @param args
	 */
	Client() throws IOException {
		Socket server = new Socket ("192.168.05.1", 4088);
		InputStream input = server.getInputStream();
		OutputStream output = server.getOutputStream();
		br = new BufferedReader( new InputStreamReader(System.in));
		status = 0;

		
		while (status == 0) {
			System.out.println("Geben Sie bitte 5 verschiedene Zahlen zwischen 0 und 36 ein.");
			
			int zahl1 = 100;
			while (!korrekteEingabe(zahl1)) {
				System.out.print("Zahl1: ");
				zahl1 = Integer.parseInt( br.readLine() );	
			}
			output.write( zahl1 );
			output.flush();

			int zahl2 = 100;
			while (!korrekteEingabe(zahl2)) {
				System.out.print("Zahl2: ");
				zahl2 = Integer.parseInt( br.readLine() );
			}
			output.write( zahl2 );
			output.flush();

			
			int zahl3 = 100;
			while (!korrekteEingabe(zahl3)) {
				System.out.print("Zahl3: ");
				zahl3 = Integer.parseInt( br.readLine() );
			}
			output.write( zahl3 );
			output.flush();

			
			int zahl4 = 100;
			while (!korrekteEingabe(zahl4)) {
				System.out.print("Zahl4: ");
				zahl4 = Integer.parseInt( br.readLine() );
			}
			output.write( zahl4 );
			output.flush();

			
			int zahl5 = 100;
			while (!korrekteEingabe(zahl5)) {
				System.out.print("Zahl5: ");
				zahl5 = Integer.parseInt( br.readLine() );
			}
			output.write( zahl5 );
			output.flush();

			
			status = input.read();
			if(status == 0)
				System.out.println("Nicht getroffen. Weiter gehts...");
			else
				System.out.println("Treffer. Sie haben gewonnen.");

			int zufall = input.read();
				System.out.println("Die Zahl ist: " + zufall);
		}

		
		
		server.close();
		input.close();
		output.close();
	}
	
	public boolean korrekteEingabe(int zahl) {
		for(int i = 0; i <= 36; i++) {
			if(zahl == i)
				return true;
		}
		return false;
	}


	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {	
			Client client = new Client ();
		} catch (IOException e){
			System.out.print(e);
		}
					
   
	}

}
```

*2.DemoThread.java*


```
import java.net.*;
import java.io.*;
import java.util.Random;


public class DemoThread extends Thread {
  
	Socket client;
	InputStream input;
	OutputStream output;
	int status;

    public DemoThread(Socket client){
    	this.client = client;
    }
	
    public void run() {
      		try{
      		
      			
			InputStream input = client.getInputStream();
			OutputStream output = client.getOutputStream();
			status = 0;
		
			while(status == 0) {
				int zahl1 = input.read();

						
				int zahl2 = input.read();
				int zahl3 = input.read();
				int zahl4 = input.read();
				int zahl5 = input.read();
				

				Random r = new Random();
				int zufall = r.nextInt(37);
				
				if(zahl1 == zufall || zahl2 == zufall || zahl3 == zufall || zahl4 == zufall || zahl5 == zufall){
					output.write(1);
					status = 1;
			
				}
				else{
					output.write(0);
					status = 0;
				}
				output.write(zufall);
				output.flush();
			}			
			
			input.close();
			output.close();
			client.close();
			
 		}

		catch(Exception e){}
    }
    

  
}
```

3. Server.java


```
import java.net.*;
import java.io.*;

public class Server {
	
	public static void main(String args[]) throws IOException {

		ServerSocket server = null;
		Socket client1 = null;
		
		try {
			server = new ServerSocket(4088);
		} catch(IOException e) {
			System.err.println("Could not listen on port: 4088.");
            		System.exit(-1);
		}

		while (true) {
			if (client1 == null) {
				client1 = server.accept();
			}


			if (client1 != null) {
				new DemoThread(client1).start();
				client1 = null;
			}
		} //end while
	} //end main
}
```


----------



## Lenii (5. Jun 2010)

Kann mir jemand zeigen, wie dazu ein SequenzDiagramm aussehen sollte ??


----------



## Wortraum (5. Jun 2010)

Du erwartest jetzt aber nicht, daß man Dir 200 Zeilen einzeln erklärt? Wenn Du gezielte Fragen zu einzelnen Stellen hast, kannst Du die natürlich gerne stellen. Was einzelne Klassen wie BufferedReader machen, kannst Du in der Java‐API nachlesen. Im zitierten Quelltext führt bereits ein Link zur richtigen Dokumentation.

Vielleicht als kleine Hilfe zum Client:
⑴ Startet man ein Programm, beginnt es in der main-Methode. Beim Client ist das Zeile 97.
⑵ In der main-Methode wird ein neues Objekt _Client _erzeugt. Das ist hier vielleicht etwas verwirrend, weil die main-Methode in der selben Klasse steht.
⑶ Eine Klasse hat einen Konstruktor, der automatisch ausgeführt wird, sobald ein Objekt von dieser Klasse erstellt wird. Der Konstruktor hat immer den gleichen Namen wie die Klasse, hier ist es also Client(). Dort wird eine Verbindung zum Server geöffnet; daraufhin muß der Benutzer Zahlen eingeben, die an den Server gesandt werden; am Ende wird das Ergebnis vom Server empfangen.
⑷ Für die Datenübermittelung werden Datenströme verwenden, von denen jeder Socket zwei hat: einen zum Schreiben, einen zum Lesen. Es ist ein wenig wie bei einer Rohrpost: am einen Ende steckt man etwas hinein, am anderen Ende kann es entnommen werden.

Und eine kleine Hilfe zum Server:
⑴ Ein Server bedient mehrere Clients, muß also mehrere Dinge gleichzeitig tun. Deswegen gibt es Threads, die man sich, sehr stark vereinfacht und technisch falsch, als eigenständige Programme vorstellen kann.
⑵ In Zeile 21 wartet der Server eine Verbindungsanfrage von einem Client, und wenn eine solche kommt, erstellt er in Zeile 26 einen neuen Thread, der den Client bedient. Daraufhin macht er weiter und wartet erneut in Zeile 21 wieder auf eine neue Client‐Verbindung.
⑶ Derweil läuft der neuerstellte Thread, der die Zahlen vom Client liest, das Ergebnis schreibt und dann beendet wird.


----------



## ARadauer (5. Jun 2010)

> Ich habe hier jetzt drei Codes, kann mir jemand erklären was da Zeile für Zeile passiert ??


ja genau...


----------



## Ruzmanz (5. Jun 2010)

> Kann mir jemand zeigen, wie dazu ein SequenzDiagramm aussehen sollte ??



Wenn du mir ein Sequenzdiagramm zeichnest, dann kann ich es verbessern  Ohne Lösungsansatz gibts nichts. Vorallem nicht umsonst.


----------



## agentone (5. Jun 2010)

> kann mir jemand erklären was da Zeile für Zeile passiert ??



Ich erklär dir allerhöchstens, was insgesamt passiert. Daraus kannst du dann dein SeqDiagramm machen.

Die Klasse Server wird vermutlich zuerst gestartet. Dort wird ein Server auf Port 4088 errichtet. Daraufhin wartet der Server in der while(true)-Schleife auf Clients, die sich mit ihm verbinden wollen. Für jeden Client wird dann ein extra Thread namens DemoThread eröffnet, der sich dann um den Client kümmert.

DemoThread bekommt die Socket übergeben und liest dann 5 Zahlen ein. Danach wird mithilfe von  
	
	
	
	





```
Random r = new Random();
int zufall = r.nextInt(37);
```
eine Zufallszahl im Intervall [0;36] erzeugt. Zuletzt wird geprüft, ob eine der 5 Zahlen der generierten Zufallszahl entspricht, und es wird dann entweder 1 oder 0 zurückgegeben. Zu allerletzt wird die Zufallszahl übermittelt.

Der Client öffnet eine Verbindung zum Server, fordert dann 5 Zahlen vom Benutzer, und schreibt diese in die Socket. Der Client bekommt dann vom Server eine Rückmeldung in Form einer 0 oder einer 1 und gibt entsprechende Nachrichten aus. Zuletzt wird die Zufallszahl empfangen und angezeigt.

Das Programm ist letztlich also ein Ratespiel im Netzwerk. Der Programmierer kannte aber vermutlich noch nicht das ganz neue Feature, welches nämlich erst seit Juni 2010 in Java erschienen ist: Das ARRAY! Damit könnte man den Code dezimieren. Aber was solls: Sonst würden ja die Copy&Paste-Programmierer aussterben for(int i=0; i<5; i++){print("!");}

edit: Warum heißt das eig. Roulette? Irgendwie irreführend...


----------



## Wortraum (6. Jun 2010)

agentone hat gesagt.:


> Für jeden Client wird dann ein extra Thread namens DemoThread eröffnet, der sich dann um den Client kümmert.


Die Threads haben den Namen Thread-n, wobei n bei jedem neuen Thread hochgezählt wird.


----------



## agentone (6. Jun 2010)

> Die Threads haben den Namen Thread-n, wobei n bei jedem neuen Thread hochgezählt wird.



Ja, ich wollte eig. sagen, dass ein Objekt der Klasse DemoThread erstellt wird, welche selbst von Thread erbt. Daraufhin wird die start()-Methode aufgerufen und so der Thread gestartet.

Mit "namens" hab ich mich garnicht auf die name-Eigenschaft der Klasse Thread bezogen.


----------



## Lenii (6. Jun 2010)

Was willst denn haben ??


----------



## agentone (6. Jun 2010)

Heißt es "faul, fauler, Lenii" oder "bonzig, bonziger, Lenii"? Ich kann mich nicht entscheiden...

@Lenii: Tust du nur so, oder bist du wirklich so ****? Du weißt jetzt, wie das Programm funktioniert und du weißt, was ein SeqDiagramm ist, zumindest nachdem du dir Sequenzdiagramm ? Wikipedia durchgelesen hast. Warum hast du also jetzt noch Probleme?


----------



## Lenii (6. Jun 2010)

Och Man..Ich habe keine Ahnung wie das mit dem Sequenzdiagramm ablaufen sollen..


----------



## agentone (6. Jun 2010)

Ich wusste vorher auch nicht was ein SequenzDiagramm sein soll, aber nach dem Durchlesen des Wiki-Eintrags war mir alles klar. Also wirst du es ja auch schaffen. Ich hab nämlich grad keine Lust, irgendwelche Bildchen mit Paint zu malen.

edit: Hier gibt es ein paar Programme, mit denen man solche Diagramme zeichnen könnte.


----------



## Lenii (6. Jun 2010)

Och bitte 

Ich habe keine Ahnung, habe es mir auch durchgelesen, es würde halt echt niemals gut werden, und es muss einigermaßen gut werden..


----------



## hemeroc (6. Jun 2010)

Fang doch einfach an und wir schaun dann drüber es wird schon passabel werden und beim verbessern helfen wir hier alle gerne.


Ruzmanz hat gesagt.:


> Wenn du mir ein Sequenzdiagramm zeichnest, dann kann ich es verbessern  Ohne Lösungsansatz gibts nichts. Vorallem nicht umsonst.


++


----------



## Lenii (6. Jun 2010)

OCH MAN..

Ich verstehe nicht was daran so schlimm ist ?

Ich habe keine Ahnung..


----------



## Wortraum (7. Jun 2010)

Lenii hat gesagt.:


> Ich habe keine Ahnung..


Die braucht man nun einmal, um zu bestehen, und man muß selbst etwas tun, um sie zu bekommen. Erklärungen zum Quelltext hast Du ja nun, und die Sequenz, wie das Programm abläuft, steht teilweise in meiner Beschreibung; sie ist ohnehin sehr einfach.


----------



## Ruzmanz (7. Jun 2010)

Lenii hat gesagt.:


> OCH MAN..
> 
> Ich verstehe nicht was daran so schlimm ist ?
> 
> Ich habe keine Ahnung..



Ich weis nur, das du etwas programmieren musst. Ich kenne einige Lehrer, aber niemals ist mir ein so sadistisches ** über den weg gelaufen, der von mir etwas verlangt hat, was ich nichtmal ansatzweise können müsste. Und vorallem gehöhren Sequenzdiagramme nicht in einen Programmmier-Schnupperkurs in Jahrgangsstufe 10. Also wenn du nichts vorzubringen hast, außer einem "eigenen" Programmcode, den du erklärt haben möchtest, dann liegt meine Hilfsbereitschaft bei -100. Wenn du deine 5 Jährige Schwester oder sonst wen gefragt hättest einen viereckigen Kasten zu malen, bei dem ein sd links oben in der Ecke steht und noch ein paar Methodenaufrufe kreuz und quer gestanden wären, sähe die Sache schon ganz anderst aus.

Ich habe kein Problem damit, dass du sitzen bleibst oder von der Schule gehen musst, also ist für mich auch nichts schlimm, denn es wird ein Arbeitsplatz weniger blockiert, der meiner sein könnte. Auf die Gefahr, dass ich mich zum vierten Mal wiederhohle: 



> Ohne Lösungsansatz gibts nichts. Vorallem nicht umsonst.



Wer keine Fragen hat weis alles. Und du hast in diesem Thread keine Frage gestellt, außer willst du mir dies und das machen.

PS: Da investiere ich lieber 30min für einen Text, wie dumm ich so eine Einstellung finde als grade noch so viel zu machen, dass es für das bestehen der Prüfung o.ä. reicht.


----------



## ARadauer (7. Jun 2010)

Lenii hat gesagt.:


> OCH MAN..
> 
> Ich verstehe nicht was daran so schlimm ist ?
> 
> Ich habe keine Ahnung..



Ich finde es interessant, dass du wirlich meinst, das dir hier jemand deine Hausübung macht, ohne dass du selber dazu was beiträgst... wahrscheinlich siehst du so gut aus, dass dir normalerweise alle klassenkameraden alles nachtragen...

Falls du ein Junge bist... musst du mich mit Bier bestechen... doch leider ist das Wetter zu schön... da steigt mein Preis ins astromomische...


----------

