Java/TicTacToe
Aus ZUM-Unterrichten
< Java
[Bild:Tictactoe.jpg]]
Variante mit Konsolenein- und ausgabe
Eine einfache TicTacToe-Variante für BlueJ. Ein und Ausgabe in der Konsole.
<java> import java.io.*; // wird von der Eingabe benötigt
public class Spielfeld {
//Eigenschaften private Kaestchen[][] feld; private static BufferedReader in; // Eingabe //Konstruktor public Spielfeld() { feld = new Kaestchen[3][3]; for (int i=0;i<3;i++){// senkrecht for (int j=0;j<3;j++){// waagerecht feld[j][i]=new Kaestchen(); } } // Vorbereitung für die Eingabe in = new BufferedReader(new InputStreamReader(System.in)); } //Methoden public void setzeSpielstein(int x, int y, String stein){ feld[x][y].setzeStein(stein); } public void gibSpielAus(){ System.out.println("\n 012"); for (int i=0;i<3;i++){ System.out.print(i+" "); for (int j=0;j<3;j++){ System.out.print(feld[j][i].getZeichen()); } System.out.println(); // Zeilenumbruch nach 3 Kaestchen } } public void spieleEineRunde(){ // unguenstig: Starre Anzahl von Zügen, immer 10 Züge int x,y; for (int i=1;i<5;i++){ gibSpielAus(); System.out.print("Spieler X bitte die x-Koordinate (0-2)"); try { x=liesInt(); } catch(IOException e) { x=-1; } System.out.print("Spieler X bitte die y-Koordinate (0-2)"); try { y=liesInt(); } catch(IOException e) { y=-1; } setzeSpielstein(x, y, "X"); gibSpielAus(); System.out.print("Spieler O bitte die x-Koordinate (0-2)"); try { x=liesInt(); } catch(IOException e) { x=-1; } System.out.print("Spieler O bitte die y-Koordinate (0-2)"); try { y=liesInt(); } catch(IOException e) { y=-1; } setzeSpielstein(x, y, "O"); } } // Methode für die Eingabe // Mehr hier: http://www.wifo.uni-mannheim.de/Java/oop/OOPinJava/kapitel11/StandardEingabe_java.html public int liesInt() throws IOException { try { return Integer.parseInt(in.readLine()); } catch(IOException e) { return (-1); } }
} </java>
<java> public class Kaestchen {
String zeichen; public Kaestchen() { zeichen=" "; // Am Anfang leer } public void setzeStein(String pZeichen) { if (!zeichen.equals(" ")) {System.out.println("Besetzt!");} else { if (pZeichen.equals("X") || pZeichen.equals("O")) {zeichen=pZeichen;} else System.out.println("Ungueltige Eingabe, bitte X oder O waehlen!"); } } public String getZeichen(){ return zeichen; }
} </java>
Variante mit GUI
Die folgende Variante wurde mit Netbeans-BlueJ erstellt. Sie soll ein Beispiel für den Umgang mit GUIs sein.
<java> /*
* TicTacGUI.java * * Created on 12. März 2007, 19:15 */
/**
* * @author ugh */
public class TicTacGUI extends javax.swing.JFrame {
private int amZug; /** Creates new form TicTacGUI */ public TicTacGUI() { initComponents(); amZug=0; textField2.setText("0 startet das Spiel."); label1.setText("Tic-Tac-Toe"); button1.setLabel("_"); button2.setLabel("_"); button3.setLabel("_"); button4.setLabel("_"); button5.setLabel("_"); button6.setLabel("_"); button7.setLabel("_"); button8.setLabel("_"); button9.setLabel("_"); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents private void initComponents() { button1 = new java.awt.Button(); button2 = new java.awt.Button(); button3 = new java.awt.Button(); button4 = new java.awt.Button(); button5 = new java.awt.Button(); button6 = new java.awt.Button(); button7 = new java.awt.Button(); button8 = new java.awt.Button(); button9 = new java.awt.Button(); textField1 = new java.awt.TextField(); label1 = new java.awt.Label(); textField2 = new java.awt.TextField();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); button1.setLabel("button1"); button1.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { button1MouseClicked(evt); } });
button2.setLabel("button2"); button2.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { button2MouseClicked(evt); } });
button3.setLabel("button3"); button3.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { button3MouseClicked(evt); } });
button4.setLabel("button4"); button4.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { button4MouseClicked(evt); } });
button5.setLabel("button5"); button5.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { button5MouseClicked(evt); } });
button6.setLabel("button6"); button6.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { button6MouseClicked(evt); } });
button7.setLabel("button7"); button7.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { button7MouseClicked(evt); } });
button8.setLabel("button8"); button8.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { button8MouseClicked(evt); } });
button9.setLabel("button9"); button9.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { button9MouseClicked(evt); } });
textField1.setText("textField1");
label1.setText("label1");
textField2.setText("textField2");
org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .add(25, 25, 25) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .add(textField2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 340, Short.MAX_VALUE) .addContainerGap()) .add(layout.createSequentialGroup() .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(label1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(layout.createSequentialGroup() .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false) .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup() .add(button7, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 20, Short.MAX_VALUE) .add(button8, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup() .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false) .add(button1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(button4, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .add(20, 20, 20) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false) .add(button5, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(button2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))) .add(29, 29, 29) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(button6, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(button9, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(button3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .add(55, 55, 55)) .add(textField1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 275, Short.MAX_VALUE)) .add(75, 75, 75)))) );
layout.linkSize(new java.awt.Component[] {button1, button2, button3, button4, button5, button6, button7, button8, button9}, org.jdesktop.layout.GroupLayout.HORIZONTAL);
layout.setVerticalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup() .addContainerGap() .add(label1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(textField2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(23, 23, 23) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) .add(button2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(button1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(button3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .add(10, 10, 10) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .add(button6, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .add(0, 0, 0)) .add(button5, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .add(org.jdesktop.layout.GroupLayout.TRAILING, button4, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup() .add(button7, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)) .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false) .add(button9, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .add(button8, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(textField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addContainerGap()) );
layout.linkSize(new java.awt.Component[] {button1, button2, button3, button4, button5, button6, button7, button8, button9}, org.jdesktop.layout.GroupLayout.VERTICAL);
pack(); }// </editor-fold>//GEN-END:initComponents
private void button9MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_button9MouseClicked if (button9.getLabel()=="_") { if (amZug==0) button9.setLabel("0"); else button9.setLabel("X"); werteAus(2,2); } else { textField1.setText("Hier ist schon ein Stein!"); } }//GEN-LAST:event_button9MouseClicked
private void button8MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_button8MouseClicked if (button8.getLabel()=="_") { if (amZug==0) button8.setLabel("0"); else button8.setLabel("X"); werteAus(1,2); } else { textField1.setText("Hier ist schon ein Stein!"); } }//GEN-LAST:event_button8MouseClicked
private void button7MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_button7MouseClicked if (button7.getLabel()=="_") { if (amZug==0) button7.setLabel("0"); else button7.setLabel("X"); werteAus(0,2); } else { textField1.setText("Hier ist schon ein Stein!"); } }//GEN-LAST:event_button7MouseClicked
private void button6MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_button6MouseClicked if (button6.getLabel()=="_") { if (amZug==0) button6.setLabel("0"); else button6.setLabel("X"); werteAus(2,1); } else { textField1.setText("Hier ist schon ein Stein!"); } }//GEN-LAST:event_button6MouseClicked
private void button5MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_button5MouseClicked if (button5.getLabel()=="_") { if (amZug==0) button5.setLabel("0"); else button5.setLabel("X"); werteAus(1,1); } else { textField1.setText("Hier ist schon ein Stein!"); } }//GEN-LAST:event_button5MouseClicked
private void button4MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_button4MouseClicked if (button4.getLabel()=="_") { if (amZug==0) button4.setLabel("0"); else button4.setLabel("X"); werteAus(0,1); } else { textField1.setText("Hier ist schon ein Stein!"); } }//GEN-LAST:event_button4MouseClicked
private void button3MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_button3MouseClicked if (button3.getLabel()=="_") { if (amZug==0) button3.setLabel("0"); else button3.setLabel("X"); werteAus(2,0); } else { textField1.setText("Hier ist schon ein Stein!"); } }//GEN-LAST:event_button3MouseClicked
private void button2MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_button2MouseClicked if (button2.getLabel()=="_") { if (amZug==0) button2.setLabel("0"); else button2.setLabel("X"); werteAus(1,0); } else { textField1.setText("Hier ist schon ein Stein!"); } }//GEN-LAST:event_button2MouseClicked
private void button1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_button1MouseClicked if (button1.getLabel()=="_") { if (amZug==0) button1.setLabel("0"); else button1.setLabel("X"); werteAus(0,0); } else { textField1.setText("Hier ist schon ein Stein!"); } }//GEN-LAST:event_button1MouseClicked
private void werteAus(int pX, int pY){ if (amZug==0) { amZug=1; textField2.setText("X setzt nun."); } else { amZug=0; textField2.setText("O ist dran."); } } /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new TicTacGUI().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables private java.awt.Button button1; private java.awt.Button button2; private java.awt.Button button3; private java.awt.Button button4; private java.awt.Button button5; private java.awt.Button button6; private java.awt.Button button7; private java.awt.Button button8; private java.awt.Button button9; private java.awt.Label label1; private java.awt.TextField textField1; private java.awt.TextField textField2; // End of variables declaration//GEN-END:variables
} </java>