Meine erste Frage wäre, wie ich es schaffe den "Spielstand", sprich die Kreise und Kreuze zu "resetten"?
Meine zweite Frage wäre, wie ich den Gewinner feststellen kann, dass dann zum Beispiel irgendwo auf dem Panel ein Text/String steht mit dem Gewinner?
Und meine dritte Frage wäre, wie ich ein Menü erstelle mit 2 Buttons (Spielen/Ende) und bei Drücken auf spielen, dann das Feld erscheint?
Bitte um Hilfe, wäre sehr dankbar, wenn mir das jemand erklärt!
Das ist mein Frame:
Das ist mein Panel:
Meine zweite Frage wäre, wie ich den Gewinner feststellen kann, dass dann zum Beispiel irgendwo auf dem Panel ein Text/String steht mit dem Gewinner?
Und meine dritte Frage wäre, wie ich ein Menü erstelle mit 2 Buttons (Spielen/Ende) und bei Drücken auf spielen, dann das Feld erscheint?
Bitte um Hilfe, wäre sehr dankbar, wenn mir das jemand erklärt!
Das ist mein Frame:
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public class DrawFrame extends JFrame {
private JPanel contentPane;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
DrawFrame frame = new DrawFrame();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public DrawFrame() {
setTitle("TicTacToe");
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 450);
contentPane = new DrawPanel();
contentPane.setBorder(new EmptyBorder(0, 0, 0, 0));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
DrawPanel drawPanel = new DrawPanel();
drawPanel.setBackground(Color.BLACK);
drawPanel.setBounds(0, 0, 450, 450);
contentPane.add(drawPanel);
}
}
Das ist mein Panel:
Java:
package Practice_20170927_TicTacToe;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class DrawPanel extends JPanel {
int[][] t3array;
int player = 1;
int clickcount = 0;
/**
* Create the panel.
*/
public DrawPanel() {
setForeground(Color.DARK_GRAY);
t3array = new int[3][3];
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent arg0) {
thisMouseClicked(arg0);
}
});
}
private void paintGrid(Graphics2D g) {
int w = getWidth();
int h = getHeight();
g.setColor(Color.WHITE);
for (int i = 1; i < 3; i++) {
g.drawLine(0, (i * h) / 3, w, (i * h) / 3);
g.drawLine((i * w) / 3, 0, (i * w) / 3, h);
}
}
protected void drawCross(Graphics2D g, int idx, int idy) {
int w = getWidth();
int h = getHeight();
g.setColor(Color.GREEN);
g.setStroke(new BasicStroke(6));
g.drawLine((idx * w / 3) + 20, (idy * h / 3) + 20, ((idx + 1) * w / 3) - 20, ((idy + 1) * h / 3) - 20);
g.drawLine((idx * w / 3) + 20, ((idy + 1) * h / 3) - 20, ((idx + 1) * w / 3) - 20, (idy * h / 3) + 20);
}
protected void drawCircle(Graphics2D g, int idx, int idy) {
int w = getWidth();
int h = getHeight();
g.setColor(Color.RED);
g.setStroke(new BasicStroke(6));
g.drawOval((idx * w / 3) + 20, (idy * h / 3) + 20, w / 3 - 40, h / 3 - 40);
}
protected void winner(Graphics2D g) {
}
@Override
protected void paintComponent(Graphics arg0) {
// TODO Auto-generated method stub
super.paintComponent(arg0);
Graphics2D g;
g = (Graphics2D) arg0;
this.setBackground(Color.BLACK);
int w = getWidth();
int h = getHeight();
if (clickcount > 9) {
clickcount = 0;
g.setStroke(new BasicStroke(1));
paintGrid(g);
}
paintGrid(g);
for (int i = 0; i < t3array.length; i++) {
for (int j = 0; j < t3array.length; j++) {
if (t3array[i][j] == 1) {
drawCross(g, i, j);
}
else if(t3array[i][j] == 2) {
drawCircle(g, i, j);
}
}
}
}
protected void thisMouseClicked(MouseEvent arg0) {
int w = getWidth();
int h = getHeight();
int x = arg0.getX();
int y = arg0.getY();
System.out.format("Click on x = %d / y = %d\n", x, y);
int idx = x / (w / 3);
int idy = y / (h / 3);
System.out.format("Click on Index [%d] [%d]\n", idx, idy);
clickcount++;
if (player == 1) {
player = 2;
}
else if (player == 2){
player = 1;
}
if (clickcount > 9) {
t3array[idx][idy] = 1;
}
t3array[idx][idy] = player;
// TODO HÜ: 1. Überschreiten verhindern
// 2. Sieger feststellen
repaint();
}
}
Zuletzt bearbeitet: