Hallo,
Ich habe ein ziemliches Problem und komm einfach nicht auf die Lösung.
Die Aufgabe ist, ein Spiel zu programmieren, ich habe Schere, Stein, Papier gewählt. Der Server startet und zwei Clients melden sich an. Dann geben sie eine Zahl ein, die entweder für Schere, oder papier, oder eben Stein steht und dann kommt die ausgabe wer gewonnen hat.
Das Problem ist, dass dieser Spieldurchgang mindestens zweimal gemacht werden muss, da man erst gewinnt, wenn man mindestens 2 mal gewonnen hat.
Ein Durchgang funktioniert einwandfrei, doch dann passiert einfach nichts mehr, und das Terminal bleibt leer...
Ich starre nun schon seit Stunden auf den Code vom Serverthread und komme einfach nicht auf die Lösung... Vielleicht wird der Counter nicht hochgezählt, ich verstehe aber nicht, wieso...
Ich brauche nun DRINGENST Hilfe, da ich das Projekt bald abgeben muss...
Hier sind die Codes:
Serverthread:
falls noch wichtig hier noch die Client und Server Codes:
Client:
Server:
Ich hoffe mir kann jemand helfen... Vielen Dank schonmal im Vorraus!!!
Ich habe ein ziemliches Problem und komm einfach nicht auf die Lösung.
Die Aufgabe ist, ein Spiel zu programmieren, ich habe Schere, Stein, Papier gewählt. Der Server startet und zwei Clients melden sich an. Dann geben sie eine Zahl ein, die entweder für Schere, oder papier, oder eben Stein steht und dann kommt die ausgabe wer gewonnen hat.
Das Problem ist, dass dieser Spieldurchgang mindestens zweimal gemacht werden muss, da man erst gewinnt, wenn man mindestens 2 mal gewonnen hat.
Ein Durchgang funktioniert einwandfrei, doch dann passiert einfach nichts mehr, und das Terminal bleibt leer...
Ich starre nun schon seit Stunden auf den Code vom Serverthread und komme einfach nicht auf die Lösung... Vielleicht wird der Counter nicht hochgezählt, ich verstehe aber nicht, wieso...
Ich brauche nun DRINGENST Hilfe, da ich das Projekt bald abgeben muss...
Hier sind die Codes:
Serverthread:
Java:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
public class ServerThread extends Thread {
private Socket client1;
private Socket client2;
int indexclient1 = 0;
int indexclient2 = 0;
public ServerThread(Socket client1, Socket client2)
{
this.client1 = client1;
this.client2 = client2;
}
public void run()
{
try{
DataInputStream input1 = new DataInputStream(client1.getInputStream());
DataInputStream input2 = new DataInputStream(client2.getInputStream());
DataOutputStream output1 = new DataOutputStream(client1.getOutputStream());
DataOutputStream output2 = new DataOutputStream(client2.getOutputStream());
do
{
int a = input1.readInt();
System.out.println("Checkpoint 1");
int b = input2.readInt();
System.out.println("Checkpoint 2");
if(a == 1 && b == 1)
{
output1.writeChars("Das Match ist unentschieden !\n");
output2.writeChars("Das Match ist unentschieden !\n");
output1.flush();
output2.flush();
}
else if(a == 1 && b == 2)
{
output1.writeChars("Sie haben das Match verloren !\n");
output2.writeChars("Sie haben das Match gewonnen !\n");
output1.flush();
output2.flush();
indexclient2++;
}
else if(a == 1 && b == 3)
{
output2.writeChars("Sie haben das Match verloren !\n");
output1.writeChars("Sie haben das Match gewonnen !\n");
output1.flush();
output2.flush();
indexclient1++;
}
else if(a == 2 && b == 1)
{
output2.writeChars("Sie haben das Match verloren !\n");
output1.writeChars("Sie haben das Match gewonnen !\n");
output1.flush();
output2.flush();
indexclient1++;
}
else if(a == 2 && b == 2)
{
output1.writeChars("Das Match ist unentschieden !\n");
output2.writeChars("Das Match ist unentschieden !\n");
output1.flush();
output2.flush();
}
else if(a == 2 && b == 3)
{
output1.writeChars("Sie haben das Match verloren !\n");
output2.writeChars("Sie haben das Match gewonnen !\n");
output1.flush();
output2.flush();
indexclient2++;
}
else if(a == 3 && b == 3)
{
output1.writeChars("Das Match ist unentschieden !\n");
output2.writeChars("Das Match ist unentschieden !\n");
output1.flush();
output2.flush();
}
else if(a == 3 && b == 2)
{
output2.writeChars("Sie haben das Match verloren !\n");
output1.writeChars("Sie haben das Match gewonnen !\n");
output1.flush();
output2.flush();
indexclient1++;
}
else if(a == 3 && b == 1)
{
output1.writeChars("Sie haben das Match verloren !\n");
output2.writeChars("Sie haben das Match gewonnen !\n");
output1.flush();
output2.flush();
indexclient2++;
}
if(indexclient1 <= 2 && indexclient2 <= 2 )
{
output1.writeBoolean(false);
output2.writeBoolean(false);
System.out.println("False");
output1.flush();
output2.flush();
}
else
{
output1.writeBoolean(true);
output2.writeBoolean(true);
System.out.println("True");
output1.flush();
output2.flush();
}
System.out.println("Checkpoint 3");
}while(indexclient1 <= 2 && indexclient2 <= 2);
System.out.println("Checkpoint 4");
if(indexclient1 == 2)
{
output1.writeChars("Sie haben das Spiel gewonnen !\n");
output2.writeChars("Sie haben das Spiel verloren !\n");
}
else if(indexclient2 == 2)
{
output2.writeChars("Sie haben das Spiel gewonnen !\n");
output1.writeChars("Sie haben das Spiel verloren !\n");
}
output1.flush();
output2.flush();
System.out.println("Checkpoint 5");
input1.close();
input2.close();
output1.close();
output2.close();
client1.close();
client2.close();
}
catch(IOException e){
System.out.print(e);
e.printStackTrace();
}
}
}
falls noch wichtig hier noch die Client und Server Codes:
Client:
Java:
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.*;
import java.util.Scanner;
public class Client {
private boolean finish = false;
Client(String IP, int port) throws IOException {
Socket server = new Socket(IP, port);
DataInputStream input = new DataInputStream(server.getInputStream());
BufferedReader input1 = new BufferedReader(new InputStreamReader(server.getInputStream()));
DataOutputStream output = new DataOutputStream(server.getOutputStream());
Scanner scanner = new Scanner(System.in);
while(!finish)
{
System.out.println("Bitte waehlen Sie Ihre Waffe:");
System.out.println("[1] Schere"+"\n"+"[2] Stein"+"\n"+"[3] Papier"+"\n");
int a = scanner.nextInt();
output.writeInt(a);
output.flush();
System.out.println("Checkpoint 0 \n");
if(a == 1)
{
System.out.println("Sie haben --Schere-- gewaehlt");
}
else if(a == 2)
{
System.out.println("Sie haben --Stein-- gewaehlt");
}
else
{
System.out.println("Sie haben --Papier-- gewaehlt");
}
String str = input1.readLine();
str = str.replace(str.charAt(0), " ".toCharArray()[0]);
System.out.println(str);
System.out.println("Checkpoint 1");
finish = input.readBoolean();
}
System.out.println("\n" + "\n" + input1.readLine());
server.close();
input.close();
output.close();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
new Client (args[0], new Integer(args[1]));
} catch (IOException e){
System.out.print(e);
}
}
}
Server:
Java:
import java.net.*;
import java.io.*;
public class Server {
static ServerSocket server;
Server() throws IOException {
while (true) {
System.out.println("Wartet auf Spieler 1");
Socket client1 = server.accept();
System.out.println("Wartet auf Spieler 2");
Socket client2 = server.accept();
ServerThread serverTh = new ServerThread(client1, client2);
serverTh.start();
System.out.println("Der Server ist gestartet...");
}
}
public static void main(String[] args) {
if(args.length == 1)
{
try {
server = new ServerSocket(new Integer(args[0]).intValue());
new Server ();
System.out.println("Listen to port: "+ server);
} catch (IOException e){
System.out.print(e);
}
}
}
}
Ich hoffe mir kann jemand helfen... Vielen Dank schonmal im Vorraus!!!