R
Ratloser
Hi also ich wollte mein geschriebenes TicTacToe nun so erweiter, dass ich es per Netzwerk auf zwei Rechnern spielen kann.
Eigentlich dachte ich mir ich mache das so:
Ich habe 2 Clients und schicke jeweils die Information an den Server welches Feld/Knopf gedrückt wurde von den 9, der Server sendet das dann auch an den zweiten Client, ich synchronisiere quasi das Spielfeld immer und muss dann natürlich auch nach jedem Zug überprüfen lassen ob ein Spieler gewonnen hat.
Ich habe auch schon einen ChatServer für die Konsole programmier gehabt als ich gelernt habe was man alles für die Netzwerkprogrammierung braucht... Aber ich stehe jetzt iwie auf dem Schlauch wie ich das für mein TicTacToe mache..
Hier ist mein TicTacToe: (funktioniert prima, man kann halt gegen sich selber spielen momentan ^^)
Kann mir evtl einer sagen was an meinem Konzept falsch gedacht ist oder ob ich was bei meinem TicTacToe umschreiben muss? Weil ich nicht so ganz weiß was ich zum Server senden soll...
Bei nem Chatserver war es ja einfach nur ein String..
Hoffe mir kann geholfen werden
Eigentlich dachte ich mir ich mache das so:
Ich habe 2 Clients und schicke jeweils die Information an den Server welches Feld/Knopf gedrückt wurde von den 9, der Server sendet das dann auch an den zweiten Client, ich synchronisiere quasi das Spielfeld immer und muss dann natürlich auch nach jedem Zug überprüfen lassen ob ein Spieler gewonnen hat.
Ich habe auch schon einen ChatServer für die Konsole programmier gehabt als ich gelernt habe was man alles für die Netzwerkprogrammierung braucht... Aber ich stehe jetzt iwie auf dem Schlauch wie ich das für mein TicTacToe mache..
Hier ist mein TicTacToe: (funktioniert prima, man kann halt gegen sich selber spielen momentan ^^)
Code:
package ptictactoe;
import java.awt.event.*; // Für den ActionListener.
// Quelle: http://java.sun.com/docs/books/tutorial/uiswing/events/actionlistener.html
import javax.swing.JOptionPane; // Für das PopUp Fenster, bei einem Sieg oder Remis.
// Quelle: http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JOptionPane.html
import basis.*; // Für die Knöpfe und das Fenster.
public class TicTacToe implements ActionListener { // Klasse TicTacToe mit implementierten
// ActionListener, siehe Quelle oben.
// Deklaration
private Fenster mf;
private Knopf mk1, mk2, mk3, mk4, mk5, mk6, mk7, mk8, mk9;
private String spieler;
private int spielzuege;
private boolean sieg;
public TicTacToe() { // Konstruktor der Klasse TicTacToe().
// Konstruktion
mf = new Fenster();
mf.setzeTitel("SPIELER X IST DRAN ");
mf.setzeGroesse(300, 300);
mk1 = new Knopf("", 0, 0, 100, 100);
mk1.setzeHintergrundFarbe(Farbe.WEISS);
mk2 = new Knopf("", 100, 0, 100, 100);
mk2.setzeHintergrundFarbe(Farbe.WEISS);
mk3 = new Knopf("", 200, 0, 100, 100);
mk3.setzeHintergrundFarbe(Farbe.WEISS);
mk4 = new Knopf("", 0, 100, 100, 100);
mk4.setzeHintergrundFarbe(Farbe.WEISS);
mk5 = new Knopf("", 100, 100, 100, 100);
mk5.setzeHintergrundFarbe(Farbe.WEISS);
mk6 = new Knopf("", 200, 100, 100, 100);
mk6.setzeHintergrundFarbe(Farbe.WEISS);
mk7 = new Knopf("", 0, 200, 100, 100);
mk7.setzeHintergrundFarbe(Farbe.WEISS);
mk8 = new Knopf("", 100, 200, 100, 100);
mk8.setzeHintergrundFarbe(Farbe.WEISS);
mk9 = new Knopf("", 200, 200, 100, 100);
mk9.setzeHintergrundFarbe(Farbe.WEISS);
spieler = "X";
spielzuege = 0;
sieg = false;
// ActionListener zu den Knöpfen hinzufügen.
mk1.addActionListener(this);
mk2.addActionListener(this);
mk3.addActionListener(this);
mk4.addActionListener(this);
mk5.addActionListener(this);
mk6.addActionListener(this);
mk7.addActionListener(this);
mk8.addActionListener(this);
mk9.addActionListener(this);
}
private void AktiverSpieler() {
// Für Spieler X, der anfängt.
if (spielzuege == 1 || spielzuege == 3 || spielzuege == 5
|| spielzuege == 7 || spielzuege == 9) {
spieler = "X";
mf.setzeTitel("SPIELER O IST DRAN ");
}
// Für Spieler O, der immer nach Spieler X setzt.
if (spielzuege == 2 || spielzuege == 4 || spielzuege == 6
|| spielzuege == 8 || spielzuege == 10) {
spieler = "O";
mf.setzeTitel("SPIELER X IST DRAN ");
}
}
private void Gewinnmöglichkeiten() {
// horizantal prüfen.
if (mk1.text() == mk2.text() && mk2.text() == mk3.text()) {
sieg = true;
} else if (mk4.text() == mk5.text() && mk5.text() == mk6.text()) {
sieg = true;
} else if (mk7.text() == mk8.text() && mk8.text() == mk9.text()) {
sieg = true;
}
// vertikal prüfen.
if (mk1.text() == mk4.text() && mk4.text() == mk7.text()) {
sieg = true;
} else if (mk2.text() == mk5.text() && mk5.text() == mk8.text()) {
sieg = true;
} else if (mk3.text() == mk6.text() && mk6.text() == mk9.text()) {
sieg = true;
}
// diagonal prüfen.
if (mk1.text() == mk5.text() && mk5.text() == mk9.text()
&& mk1.text() != "") {
sieg = true;
} else if (mk3.text() == mk5.text() && mk5.text() == mk7.text()
&& mk3.text() != "") {
sieg = true;
} else {
sieg = false;
}
}
private void SiegOderRemis() {
// Meldung, wenn ein Spieler gewonnen hat.
if (sieg == true) {
JOptionPane.showMessageDialog(null, spieler + " WINS!");
Hilfe.warte(500);
mf.gibFrei();
}
// Meldung, falls kein Spieler nach 9 Zügen gewonnen hat.
if (spielzuege == 9 && sieg == false) {
JOptionPane.showMessageDialog(null, "Remis! Kein Gewinner.");
Hilfe.warte(500);
mf.gibFrei();
}
}
public void actionPerformed(ActionEvent a) {
spielzuege++; // Die Variable wird jedes mal um 1 erhöht, wenn die
// Methode aufgerufen wird.
this.AktiverSpieler(); // Bestimmung, wer am Zug ist.
// Zeichenzuweisung der Knöpfe. Zeichen jenachdem, welcher Spieler am
// Zug war.
if (a.getSource() == mk1) {
mk1.setzeText(spieler);
mk1.setzeBenutzbar(false);}
if (a.getSource() == mk2) {
mk2.setzeText(spieler);
mk2.setzeBenutzbar(false);}
if (a.getSource() == mk3) {
mk3.setzeText(spieler);
mk3.setzeBenutzbar(false);}
if (a.getSource() == mk4) {
mk4.setzeText(spieler);
mk4.setzeBenutzbar(false);}
if (a.getSource() == mk5) {
mk5.setzeText(spieler);
mk5.setzeBenutzbar(false);}
if (a.getSource() == mk6) {
mk6.setzeText(spieler);
mk6.setzeBenutzbar(false);}
if (a.getSource() == mk7) {
mk7.setzeText(spieler);
mk7.setzeBenutzbar(false);}
if (a.getSource() == mk8) {
mk8.setzeText(spieler);
mk8.setzeBenutzbar(false);}
if (a.getSource() == mk9) {
mk9.setzeText(spieler);
mk9.setzeBenutzbar(false);}
this.Gewinnmöglichkeiten(); // Bestimmung der Gewinnmöglichkeiten.
this.SiegOderRemis(); // Erzeugen eines PopUp Fensters, falls jemand gewonnen hat, oder es
// Unentschieden steht.
}
}
Kann mir evtl einer sagen was an meinem Konzept falsch gedacht ist oder ob ich was bei meinem TicTacToe umschreiben muss? Weil ich nicht so ganz weiß was ich zum Server senden soll...
Bei nem Chatserver war es ja einfach nur ein String..
Hoffe mir kann geholfen werden
