gpt4 book ai didi

java - 通过 TicTacToe 按钮创建一条线

转载 作者:行者123 更新时间:2023-11-30 03:59:13 26 4
gpt4 key购买 nike

当井字棋中存在三个具有相同符号的 Button 时,是否可以通过 Button 形成一条线,例如

picture of TicTacToe board

enter image description here

enter image description here

如果可以,该怎么办?

最佳答案

实现此目的的一种方法是使用一些 boolean 逻辑和自定义JButton类以及一些自定义绘画。例如,在下面的示例中,有一个 leftRight 标志。如果有水平井字游戏,leftRight 标志将被提升,导致在井字游戏中的每个按钮中绘制线条

请原谅我的井字游戏编程逻辑,这不是最终的游戏产品。它仅给出了顶行 O 井字游戏的示例。但我相信您可以弄清楚其他类型井字游戏的逻辑。例如,对于对角线,您可以有一个 leftDiag 标志,如果升起,它将绘制 drawLine(0, 0, getWidth(), getHeight())

玩玩它。享受吧!

enter image description here

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.border.LineBorder;

public class TTTButtons {

ImageIcon oooIcon;
MyButton[][] buttons = new MyButton[3][3];
JPanel gamePanel;

public TTTButtons() {
oooIcon = new ImageIcon(getClass().getResource("/resources/ooooo.png"));
gamePanel = createGamePanel();

JFrame frame = new JFrame("TicTacToe");
frame.add(gamePanel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);

}

private JPanel createGamePanel() {
JPanel panel = new JPanel(new GridLayout(3, 3));
for (int i = 0; i < buttons.length; i++) {
for (int j = 0; j < buttons[i].length; j++) {
buttons[i][j] = new MyButton(oooIcon);
panel.add(buttons[i][j]);
}
}
return panel;
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new TTTButtons();
}
});
}

public class MyButton extends JButton {

Image oooImage;
boolean leftRight = false;
boolean clicked = false;
boolean ooo = false;

boolean tictactoe = false;

public MyButton(ImageIcon oooImage) {
this.oooImage = oooImage.getImage();
addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
clicked = true;
ooo = true;
if (buttons[0][0].clicked && buttons[0][1].clicked && buttons[0][2].clicked) {
for (int i = 0; i < 3; i++) {
buttons[0][i].leftRight = true;
buttons[0][i].tictactoe = true;
buttons[0][i].repaint();
}
return;
}
repaint();
}
});
setBorder(new LineBorder(Color.BLACK, 1));
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (clicked) {
if (ooo) {
g.drawImage(oooImage, 0, 0, getWidth(), getHeight(), this);
}
} else {
g.setColor(Color.GRAY);
g.fillRect(0, 0, getWidth(), getHeight());
}
if (tictactoe) {
if (leftRight) {
g.drawLine(0, (int) (getHeight() / 2), getWidth(), (int) (getHeight() / 2));
}
}
}

@Override
public Dimension getPreferredSize() {
return oooImage == null ? new Dimension(100, 100)
: new Dimension(oooImage.getWidth(this), oooImage.getHeight(this));
}
}
}

关于java - 通过 TicTacToe 按钮创建一条线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22353814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com