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
[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
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
für die Wartezeit??
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
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();
}
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
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
Java:
while (!in.ready()){}