Hallo Zusammen,
seit 2 Woche versuche ich Java zu lernen und daher habe ich mir vorgenommen ein einfaches TicTacToe-Game mit Windowbuilder ohne KI zu programmieren. (ist noch unvollständig)
Ich habe leider ein Problem wo ich nicht weiter komme. Ich habe mehrere labels mit MouseEvent erstellt. In dem der Benutzer auf label bestätigt, wird der labeltext auf "X" gesetzt und anschließend wird die Methode play() aufgerufen der diese in array speichert. Anschließend wird die Methode ComputerPlay() aufgerufen, wo der Computer zufällig auf ein freies Feld spielt und diese zurück gibt. Hier fängt mein Problem an !! Die rückgabewert
new onStart().ComputerPlay() kann ich zwar innerhalb MouseEvent benutzen (damit ich die label0.setText("O") setzen kann)muss aber bei jedes Event eine Abfrage (Switch oder If) erstellen. Wie kann ich ich diese Rückgabewert an einer anderen Methode übergeben, damit ich auch die Objekte von private void initialize() (also die Labels) benutzen kann. So kann ich nur eine Abfrage erstellen vielen Dank
public class TicTacToeGame {
private JFrame frame;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TicTacToeGame window = new TicTacToeGame();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public TicTacToeGame() {
initialize();
}
private void initialize() {
Border border = LineBorder.createGrayLineBorder();
frame = new JFrame();
frame.setBounds(100, 100, 576, 523);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JLabel label0 = new JLabel("");
label0.setToolTipText("");
label0.setHorizontalAlignment(SwingConstants.CENTER);
label0.setForeground(Color.RED);
label0.setBackground(Color.ORANGE);
label0.setBounds(37, 32, 100, 100);
label0.setBorder(border);
frame.getContentPane().add(label0);
label0.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if(label0.getText().equals(""))
{
String var = "label0";
label0.setText("X");
new onStart().play(label0.getText(), var);
String changeVar = new onStart().ComputerPlay();
}
else
{
JOptionPane.showMessageDialog(null, "Feld wurde bereits gespieltS", "Warnung", JOptionPane.OK_CANCEL_OPTION);
}
}
});
///////////////////// onStart.java
import java.util.Random;
import javax.swing.*;
public class onStart extends TicTacToeGame {
public static String[] result = new String[8];
public static int checkWin = 0;
Random zufall = new Random();
public void play(String labelname, String var)
{
if(var.equals("label0"))
{
if(result[0] == null)
{
result[0]= labelname;
//hier kommt winCheck() - methode
}
}
public String ComputerPlay()
{
while(true)
{
int zahlfeld = zufall.nextInt(8);
if(result[zahlfeld] == null)
{
result[zahlfeld] = "O";
return "label"+zahlfeld;
}
}
}
seit 2 Woche versuche ich Java zu lernen und daher habe ich mir vorgenommen ein einfaches TicTacToe-Game mit Windowbuilder ohne KI zu programmieren. (ist noch unvollständig)
Ich habe leider ein Problem wo ich nicht weiter komme. Ich habe mehrere labels mit MouseEvent erstellt. In dem der Benutzer auf label bestätigt, wird der labeltext auf "X" gesetzt und anschließend wird die Methode play() aufgerufen der diese in array speichert. Anschließend wird die Methode ComputerPlay() aufgerufen, wo der Computer zufällig auf ein freies Feld spielt und diese zurück gibt. Hier fängt mein Problem an !! Die rückgabewert
new onStart().ComputerPlay() kann ich zwar innerhalb MouseEvent benutzen (damit ich die label0.setText("O") setzen kann)muss aber bei jedes Event eine Abfrage (Switch oder If) erstellen. Wie kann ich ich diese Rückgabewert an einer anderen Methode übergeben, damit ich auch die Objekte von private void initialize() (also die Labels) benutzen kann. So kann ich nur eine Abfrage erstellen vielen Dank
public class TicTacToeGame {
private JFrame frame;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TicTacToeGame window = new TicTacToeGame();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public TicTacToeGame() {
initialize();
}
private void initialize() {
Border border = LineBorder.createGrayLineBorder();
frame = new JFrame();
frame.setBounds(100, 100, 576, 523);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JLabel label0 = new JLabel("");
label0.setToolTipText("");
label0.setHorizontalAlignment(SwingConstants.CENTER);
label0.setForeground(Color.RED);
label0.setBackground(Color.ORANGE);
label0.setBounds(37, 32, 100, 100);
label0.setBorder(border);
frame.getContentPane().add(label0);
label0.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if(label0.getText().equals(""))
{
String var = "label0";
label0.setText("X");
new onStart().play(label0.getText(), var);
String changeVar = new onStart().ComputerPlay();
}
else
{
JOptionPane.showMessageDialog(null, "Feld wurde bereits gespieltS", "Warnung", JOptionPane.OK_CANCEL_OPTION);
}
}
});
///////////////////// onStart.java
import java.util.Random;
import javax.swing.*;
public class onStart extends TicTacToeGame {
public static String[] result = new String[8];
public static int checkWin = 0;
Random zufall = new Random();
public void play(String labelname, String var)
{
if(var.equals("label0"))
{
if(result[0] == null)
{
result[0]= labelname;
//hier kommt winCheck() - methode
}
}
public String ComputerPlay()
{
while(true)
{
int zahlfeld = zufall.nextInt(8);
if(result[zahlfeld] == null)
{
result[zahlfeld] = "O";
return "label"+zahlfeld;
}
}
}