# TCP Tick Tack Toe Multiplayer



## Vehementis (19. Mrz 2012)

Wie die Überschrift schon sagt versuche ich mich zz an meinem ersten Server / Client spiel
hab mir gedacht ich fang erstmal mit einem einfachen Tick Tack Toe an um mich reinzufinden
naja es geht auch "fast" xD
nur irgendwie scheint es mir zwischendurch immermal ein paar zeilen Programmcode zu unterschlagen
das fängt schon an wenn ich den server "starte"
hier sollte eigentlich im jTextPane erscheinen "Warte auf Verbindung"
wenn die Verbindung dann steht erscheint erst bei beiden "Verbindung hergestellt"
dann sollte wiederum beim Client erscheinen "Warte auf Gegnerischen Zug", was es auch nicht macht
naja das wäre ja nicht so schlimm nur vergisst es beim eigenen zug dan den butten den neuen Text zu geben und inaktiv zu setzen wärend es das beim gegnerischen zug jeweils jedoch wunderbar tut
ich denke es liegt daran das es aus dem Button action listener ausgefürt wird aber ich weiß nicht wie ich das umgehen sollte

achso naja wie erwähnt bin ich erst seit kurzem bei Java und ich glaube das "private String AmZug()" z.B. ist so nicht ganz richtig oder?
gibt es vllt etwas wo ich nicht ans ende "return "";" setzten muss... 
weil ich will ja bei den meisten nichts zurück geben
aber einfach "private AmZug()" geht ja auch nicht

als kleine Info: Das Spiel startet wenn man jButton1 klickt

hier erstmal mein code:
OnlineTickTackToe.java

```
package vehementsoftware;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JOptionPane;

public class OnlineTickTackToe extends javax.swing.JFrame {
    
    public static ServerSocket hostServer = null;
    public static Socket socket = null;
    public static BufferedReader in = null;
    public static PrintWriter out = null;  
    
    private String Spieler;
    private String ASpieler;
    private int az;
    private int Feld;
    private TickTackToeClass tttc = new TickTackToeClass();
    private String gw = "";
    private String f1,f2,f3,f4,f5,f6,f7,f8,f9;
    
    private String AmZug()
    {
        try
        {
            if (az == 0)
            {
                jTextPane1.setText("Warte auf Gegnerischen Zug");
                while (!in.ready()){}
                Feld = Integer.parseInt(in.readLine());
                Zug(Feld, ASpieler);
                az = 1;
                gw = tttc.prüfen(f1, f2, f3, f4, f5, f6, f7, f8, f9);
                GW(gw);
            }
            else
                jTextPane1.setText("Sie sind am Zug " + Spieler);
        }
        catch (Exception e) {}
        return "";
    }
    
    private String Zug(int btn, String plyr)
    {
        if(btn == 11)
        {
                jButton2.setText(plyr);
                jButton2.setEnabled(false);
                f1 = plyr;
        }
        else if(btn == 12)
        {
                jButton3.setText(plyr);
                jButton3.setEnabled(false);
                f2 = plyr;
        }
        else if(btn == 13)
        {
                jButton4.setText(plyr);
                jButton4.setEnabled(false);
                f3 = plyr;
        }
        else if(btn == 21)
        {
                jButton5.setText(plyr);
                jButton5.setEnabled(false);
                f4 = plyr;
        }
        else if(btn == 22)
        {
                jButton6.setText(plyr);
                jButton6.setEnabled(false);
                f5 = plyr;
        }
        else if(btn == 23)
        {
                jButton7.setText(plyr);
                jButton7.setEnabled(false);
                f6 = plyr;
        }
        else if(btn == 31)
        {
                jButton8.setText(plyr);
                jButton8.setEnabled(false);
                f7 = plyr;
        }
        else if(btn == 32)
        {
                jButton9.setText(plyr);
                jButton9.setEnabled(false);
                f8 = plyr;
        }
        else if(btn == 33)
        {
                jButton10.setText(plyr);
                jButton10.setEnabled(false);
                f9 = plyr;
        }
        return "";
    }
    
    private String GW (String gw)
    {
        if (!"".equals(gw)||
           (f1 != null && f2 != null && f3 != null && f4 != null && f5 != null && f6 != null && f7 != null && f8 != null && f9 != null))
        {
            if (!"".equals(gw))
                jTextPane1.setText("Spieler " + gw + " hat die Runde Gewonnen!!!");
            else 
                jTextPane1.setText("Unentschieden!!!");
            jButton2.setEnabled(false);
            jButton3.setEnabled(false);
            jButton4.setEnabled(false);
            jButton5.setEnabled(false);
            jButton6.setEnabled(false);
            jButton7.setEnabled(false);
            jButton8.setEnabled(false);
            jButton9.setEnabled(false);
            jButton10.setEnabled(false);
        }
        else
            AmZug();
        return "";
    }
        
    public OnlineTickTackToe() 
    {
        initComponents();
    }
```
[JAVA=355]

    private void jRadioButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                              
    jTextField2.setEnabled(false);
    }                                             

    private void jRadioButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                              
    jTextField2.setEnabled(true);
    }                                             

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        if(false)
        {
            //Später neustart des Spiels um noch eine runde zu spielen
        }
        else
        {
            if(jRadioButton1.isSelected())
            {
                try
                {
                    jTextPane1.setText("Warte auf Verbindung");
                    int port = Integer.parseInt(jTextField1.getText());
                    hostServer = new ServerSocket(port);
                    socket = hostServer.accept();
                    jTextPane1.setText("Verbindung hergestellt");
                    in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    out = new PrintWriter(socket.getOutputStream(), true);
                    jRadioButton1.setEnabled(false);
                    jRadioButton2.setEnabled(false);
                    jTextField1.setEnabled(false);
                    jButton1.setEnabled(false);
                    Spieler = "X";
                    ASpieler = "O";
                    az = 1;
                    AmZug();
                }
                catch (Exception e) 
                {
                    JOptionPane.showMessageDialog(null, e);
                }
            }
            else
            {
                try
                {
                    jTextPane1.setText("Verbindungsaufbau...");
                    int port = Integer.parseInt(jTextField1.getText());
                    String HIP = jTextField2.getText();
                    socket = new Socket(HIP,port);
                    jTextPane1.setText("Verbindung hergestellt");
                    in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    out = new PrintWriter(socket.getOutputStream(), true);
                    jRadioButton1.setEnabled(false);
                    jRadioButton2.setEnabled(false);
                    jTextField1.setEnabled(false);
                    jTextField2.setEnabled(false);
                    jButton1.setEnabled(false);
                    Spieler = "O";
                    ASpieler = "X";
                    az = 0;
                    AmZug();
                }
                catch (Exception e) 
                {
                    JOptionPane.showMessageDialog(null, e);
                }
            }

        }
    }                                        

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        try
        {
            if (az == 1)
            {
                out.println("11");
                Zug(11,Spieler);
                az = 0;
                gw = tttc.prüfen(f1, f2, f3, f4, f5, f6, f7, f8, f9);
                GW(gw);
            }
        }
        catch (Exception e) {}
    }                                        

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
        try
        {
            if (az == 1)
            {
                out.println("12");
                Zug(12,Spieler);
                az = 0;
                gw = tttc.prüfen(f1, f2, f3, f4, f5, f6, f7, f8, f9);
                GW(gw);
            }
        }
        catch (Exception e) {}
    }

    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
        try
        {
            if (az == 1)
            {
                out.println("13");
                Zug(13,Spieler);
                az = 0;
                gw = tttc.prüfen(f1, f2, f3, f4, f5, f6, f7, f8, f9);
                GW(gw);
            }
        }
        catch (Exception e) {}
    }

    private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {
        try
        {
            if (az == 1)
            {
                out.println("21");
                Zug(21,Spieler);
                az = 0;
                gw = tttc.prüfen(f1, f2, f3, f4, f5, f6, f7, f8, f9);
                GW(gw);
            }
        }
        catch (Exception e) {}
    }

    private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {
        try
        {
            if (az == 1)
            {
                out.println("22");
                Zug(22,Spieler);
                az = 0;
                gw = tttc.prüfen(f1, f2, f3, f4, f5, f6, f7, f8, f9);
                GW(gw);
            }
        }
        catch (Exception e) {}
    }

    private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) {
        try
        {
            if (az == 1)
            {
                out.println("23");
                Zug(23,Spieler);
                az = 0;
                gw = tttc.prüfen(f1, f2, f3, f4, f5, f6, f7, f8, f9);
                GW(gw);
            }
        }
        catch (Exception e) {}
    }

    private void jButton8ActionPerformed(java.awt.event.ActionEvent evt) {
        try
        {
            if (az == 1)
            {
                out.println("31");
                Zug(31,Spieler);
                az = 0;
                gw = tttc.prüfen(f1, f2, f3, f4, f5, f6, f7, f8, f9);
                GW(gw);
            }
        }
        catch (Exception e) {}
    }

    private void jButton9ActionPerformed(java.awt.event.ActionEvent evt) {
        try
        {
            if (az == 1)
            {
                out.println("32");
                Zug(32,Spieler);
                az = 0;
                gw = tttc.prüfen(f1, f2, f3, f4, f5, f6, f7, f8, f9);
                GW(gw);
            }
        }
        catch (Exception e) {}
    }

    private void jButton10ActionPerformed(java.awt.event.ActionEvent evt) {
        try
        {
            if (az == 1)
            {
                out.println("33");
                Zug(33,Spieler);
                az = 0;
                gw = tttc.prüfen(f1, f2, f3, f4, f5, f6, f7, f8, f9);
                GW(gw);
            }
        }
        catch (Exception e) {}
    }

    public static void main(String args[]) {
[/code]


TickTackToeClass.java

```
package vehementsoftware;

public class TickTackToeClass 
{
    
    public String Spielerwechsel (String Spieler)
    {
        if ("X".equals(Spieler))
            Spieler = "O";
        else
            Spieler = "X";
        return Spieler;
    }
    
    public String prüfen (String f1, String f2, String f3,String f4,String f5,String f6,String f7,String f8,String f9)
    {
        //System.out.println(f1 + f2 + f3 + f4 + f5 + f6 + f7 + f8 + f9);
        String gw;
        if ("XXX".equals(f1 + f2 + f3)||
            "XXX".equals(f1 + f4 + f7)||
            "XXX".equals(f1 + f5 + f9)||
            "XXX".equals(f2 + f5 + f8)||
            "XXX".equals(f3 + f5 + f7)||
            "XXX".equals(f3 + f6 + f9)||
            "XXX".equals(f4 + f5 + f6)||
            "XXX".equals(f7 + f8 + f9))
        {
            //System.out.println("X hat gewonnen!!!");
            gw = "X";
        }
        else if (
                "OOO".equals(f1 + f2 + f3)||
                "OOO".equals(f1 + f4 + f7)||
                "OOO".equals(f1 + f5 + f9)||
                "OOO".equals(f2 + f5 + f8)||
                "OOO".equals(f3 + f5 + f7)||
                "OOO".equals(f3 + f6 + f9)||
                "OOO".equals(f4 + f5 + f6)||
                "OOO".equals(f7 + f8 + f9))
        {
            //System.out.println("O hat gewonnen!!!");
            gw = "O";
        }
        else 
            gw = "";
        return gw;
    }
}
```

wenn ihr nen link zu meinem Programm wollt damit ihr seht was es genau macht schreibt einfach PM

achso noch eine Frage:
gibt es eine bessere Variante als

```
while (!in.ready()){}
```
für die Wartezeit??


----------



## Xeonkryptos (22. Mrz 2012)

Vehementis hat gesagt.:


> achso naja wie erwähnt bin ich erst seit kurzem bei Java und ich glaube das "private String AmZug()" z.B. ist so nicht ganz richtig oder?
> gibt es vllt etwas wo ich nicht ans ende "return "";" setzten muss...
> weil ich will ja bei den meisten nichts zurück geben
> aber einfach "private AmZug()" geht ja auch nicht



Das gehört zum Grundwissen der Methoden! Wenn du schon hier stockst, empfehle ich dir, dich nochmal tiefer in die Matierie Java einzuarbeiten! Wenn Grundkenntnisse fehlen, sollte man solche Projekte noch nicht angehen!

Bevor ich zur Lösung dieses Problems komme, bitte beachte die Konventionen! Methodennamen werden nach dem LowerCamelCase-Prinzip beschrieben!

Und die Lösung deines ersten Problems:


```
private void amZug()
```
 <-- Hier unter Verwendung der Konvention!


----------



## Vehementis (22. Mrz 2012)

mein NetBeans hatte auch mit void darüber gemeckert das es einen return will deswegen dachte ich das ich vllt doch etwas anderes brauche
naja ich werd das Programm nochmal komplett neu aufsetzten und die hauptsteuerung über threads versuche  zu erledigen damit es zu keinen freeze mehr kommt

naja ich bring mir halt alles selber über tutorials und google bei
überleg mir was ich tun könnte und versuch mich dann daran^^


----------

