Hi
Habe mir ein TicTacToe-Spiel programmier:
Ich finde jedoch, dass man (vorallem die gewonnen()-Methode) auch leichter schreiben könnte undzwar mit Arrays. Jedoch kommt mir einfach nicht in den Sinn wie ich das anstellen soll^^
Hab mir Arrays bestimmt noch zehn mal durchgelesen aber wie ich die einzelnen Abfragen verkürzen soll weiß ich nicht ^-^
Mfg, Zitrus
Habe mir ein TicTacToe-Spiel programmier:
Java:
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.ImageIcon;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.net.URL;
import java.awt.Font;
import java.util.Random;
public class Spiel extends JFrame
{
URL UFenster;
ImageIcon IFenster;
public Spiel()
{
super("TicTacToe");
setSize(300,325);
setResizable(false);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
UFenster = getClass().getResource("TicTacToe.png");
IFenster = new ImageIcon(UFenster);
setIconImage(IFenster.getImage());
MyPanel panel = new MyPanel();
add(panel);
setVisible(true);
}
class MyPanel extends JPanel implements ActionListener {
JButton button1;
JButton button2;
JButton button3;
JButton button4;
JButton button5;
JButton button6;
JButton button7;
JButton button8;
JButton button9;
JOptionPane gewonnen;
String Spieler1;
String Spieler2;
String aktuellerSpieler;
String show;
public MyPanel() {
setSize(300,325);
setLayout(null);
Spieler1 = "Spieler X";
Spieler2 = "Spieler O";
aktuellerSpieler = StartwertFuerAktuellenSpieler();
button1 = new JButton();
button1.setFont(new Font("Verdana",0,72));
button1.addActionListener(this);
button1.setBounds(0,0,100,100);
button2 = new JButton();
button2.setFont(new Font("Verdana",0,72));
button2.setBounds(100,0,100,100);
button2.addActionListener(this);
button3 = new JButton();
button3.setFont(new Font("Verdana",0,72));
button3.setBounds(200,0,100,100);
button3.addActionListener(this);
button4 = new JButton();
button4.setFont(new Font("Verdana",0,72));
button4.setBounds(0,100,100,100);
button4.addActionListener(this);
button5 = new JButton();
button5.setFont(new Font("Verdana",0,72));
button5.setBounds(100,100,100,100);
button5.addActionListener(this);
button6 = new JButton();
button6.setFont(new Font("Verdana",0,72));
button6.setBounds(200,100,100,100);
button6.addActionListener(this);
button7 = new JButton();
button7.setFont(new Font("Verdana",0,72));
button7.setBounds(0,200,100,100);
button7.addActionListener(this);
button8 = new JButton();
button8.setFont(new Font("Verdana",0,72));
button8.setBounds(100,200,100,100);
button8.addActionListener(this);
button9 = new JButton();
button9.setFont(new Font("Verdana",0,72));
button9.setBounds(200,200,100,100);
button9.addActionListener(this);
gewonnen = new JOptionPane();
add(button1);
add(button2);
add(button3);
add(button4);
add(button5);
add(button6);
add(button7);
add(button8);
add(button9);
}
public void actionPerformed(ActionEvent e) {
if(gewonnen() == false) {
if(e.getSource() == button1) {
if(button1.getText().equals("")) {
if(aktuellerSpieler.equals(Spieler1)) {
button1.setText("X");
druckeGewinner();
setzeNeuenSpieler();
}
else {
button1.setText("O");
druckeGewinner();
setzeNeuenSpieler();
}
}
}
else if(e.getSource() == button2) {
if(button2.getText().equals("")) {
if(aktuellerSpieler.equals(Spieler1)) {
button2.setText("X");
druckeGewinner();
setzeNeuenSpieler();
}
else {
button2.setText("O");
druckeGewinner();
setzeNeuenSpieler();
}
}
}
else if(e.getSource() == button3) {
if(button3.getText().equals("")) {
if(aktuellerSpieler.equals(Spieler1)) {
button3.setText("X");
druckeGewinner();
setzeNeuenSpieler();
}
else {
button3.setText("O");
druckeGewinner();
setzeNeuenSpieler();
}
}
}
else if(e.getSource() == button4) {
if(button4.getText().equals("")) {
if(aktuellerSpieler.equals(Spieler1)) {
button4.setText("X");
druckeGewinner();
setzeNeuenSpieler();
}
else {
button4.setText("O");
druckeGewinner();
setzeNeuenSpieler();
}
}
}
else if(e.getSource() == button5) {
if(button5.getText().equals("")) {
if(aktuellerSpieler.equals(Spieler1)) {
button5.setText("X");
druckeGewinner();
setzeNeuenSpieler();
}
else {
button5.setText("O");
druckeGewinner();
setzeNeuenSpieler();
}
}
}
else if(e.getSource() == button6) {
if(button6.getText().equals("")) {
if(aktuellerSpieler.equals(Spieler1)) {
button6.setText("X");
druckeGewinner();
setzeNeuenSpieler();
}
else {
button6.setText("O");
druckeGewinner();
setzeNeuenSpieler();
}
}
}
else if(e.getSource() == button7) {
if(button7.getText().equals("")) {
if(aktuellerSpieler.equals(Spieler1)) {
button7.setText("X");
druckeGewinner();
setzeNeuenSpieler();
}
else {
button7.setText("O");
druckeGewinner();
setzeNeuenSpieler();
}
}
}
else if(e.getSource() == button8) {
if(button8.getText().equals("")) {
if(aktuellerSpieler.equals(Spieler1)) {
button8.setText("X");
druckeGewinner();
setzeNeuenSpieler();
}
else {
button8.setText("O");
druckeGewinner();
setzeNeuenSpieler();
}
}
}
else if(e.getSource() == button9) {
if(button9.getText().equals("")) {
if(aktuellerSpieler.equals(Spieler1)) {
button9.setText("X");
druckeGewinner();
setzeNeuenSpieler();
}
else {
button9.setText("O");
druckeGewinner();
setzeNeuenSpieler();
}
}
}
}
else {
option();
}
}
private void setzeNeuenSpieler() {
if(aktuellerSpieler.equals(Spieler1)) {
aktuellerSpieler = Spieler2;
}
else if(aktuellerSpieler.equals(Spieler2)) {
aktuellerSpieler = Spieler1;
}
}
private String StartwertFuerAktuellenSpieler() {
Random r = new Random();
int zufall = r.nextInt(2) + 1;
String aktuell = "";
if(zufall == 1) {
aktuell = Spieler1;
}
else if(zufall == 2) {
aktuell = Spieler2;
}
return aktuell;
}
private boolean gewonnen() {
if(button1.getText().equals("X") && button2.getText().equals("X") && button3.getText().equals("X")||
button4.getText().equals("X") && button5.getText().equals("X") && button6.getText().equals("X")||
button7.getText().equals("X") && button8.getText().equals("X") && button9.getText().equals("X")||
// Horizontale Abfragen "X"
button1.getText().equals("X") && button4.getText().equals("X") && button7.getText().equals("X")||
button2.getText().equals("X") && button5.getText().equals("X") && button8.getText().equals("X")||
button3.getText().equals("X") && button6.getText().equals("X") && button9.getText().equals("X")||
// Vertikale Abfragen "X"
button1.getText().equals("X") && button5.getText().equals("X") && button9.getText().equals("X")||
button7.getText().equals("X") && button5.getText().equals("X") && button3.getText().equals("X")||
// Diagonale Abfragen "X"
button1.getText().equals("O") && button2.getText().equals("O") && button3.getText().equals("O")||
button4.getText().equals("O") && button5.getText().equals("O") && button6.getText().equals("O")||
button7.getText().equals("O") && button8.getText().equals("O") && button9.getText().equals("O")||
// Horizontale Abfragen "O"
button1.getText().equals("O") && button4.getText().equals("O") && button7.getText().equals("O")||
button2.getText().equals("O") && button5.getText().equals("O") && button8.getText().equals("O")||
button3.getText().equals("O") && button6.getText().equals("O") && button9.getText().equals("O")||
// Vertikale Abfragen "O"
button1.getText().equals("O") && button5.getText().equals("O") && button9.getText().equals("O")||
button7.getText().equals("O") && button5.getText().equals("O") && button3.getText().equals("O")
// Diagonale Abfragen "O"
)
{
return true;
}
else {
return false;
}
}
private boolean unentschieden() {
if(!button1.getText().equals("") && !button2.getText().equals("") &&
!button3.getText().equals("") && !button4.getText().equals("") &&
!button5.getText().equals("") && !button6.getText().equals("") &&
!button7.getText().equals("") && !button8.getText().equals("") &&
!button9.getText().equals("")
)
{
return true;
}
else {
return false;
}
}
private void druckeGewinner() {
if(unentschieden() == true && gewonnen() == false) {
show = "Unentschieden!";
option();
}
if(gewonnen() == true) {
show = aktuellerSpieler + " hat gewonnen!";
option();
}
}
private void option() {
if(gewonnen() || unentschieden()) {
int eingabe = JOptionPane.showConfirmDialog(null,
"Möchtest du nochmal spielen?",
show,
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.PLAIN_MESSAGE);
if(eingabe == 0) {
button1.setText("");
button2.setText("");
button3.setText("");
button4.setText("");
button5.setText("");
button6.setText("");
button7.setText("");
button8.setText("");
button9.setText("");
}
else if(eingabe == 1) {
System.exit(0);
}
else if(eingabe == 2) {
}
}
}
}
}
Ich finde jedoch, dass man (vorallem die gewonnen()-Methode) auch leichter schreiben könnte undzwar mit Arrays. Jedoch kommt mir einfach nicht in den Sinn wie ich das anstellen soll^^
Hab mir Arrays bestimmt noch zehn mal durchgelesen aber wie ich die einzelnen Abfragen verkürzen soll weiß ich nicht ^-^
Mfg, Zitrus