- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当井字棋中存在三个具有相同符号的 Button
时,是否可以通过 Button
形成一条线,例如
如果可以,该怎么办?
最佳答案
实现此目的的一种方法是使用一些 boolean
逻辑和自定义JButton
类以及一些自定义绘画。例如,在下面的示例中,有一个 leftRight
标志。如果有水平井字游戏,leftRight
标志将被提升,导致在井字游戏中的每个按钮中绘制线条
请原谅我的井字游戏编程逻辑,这不是最终的游戏产品。它仅给出了顶行 O 井字游戏的示例。但我相信您可以弄清楚其他类型井字游戏的逻辑。例如,对于对角线,您可以有一个 leftDiag
标志,如果升起,它将绘制 drawLine(0, 0, getWidth(), getHeight())
玩玩它。享受吧!
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/
如何迭代(一行)分割函数给我的每个类? 我试过这个: 编辑(抱歉) $("p").attr("class").split(' ').each (function (i,n){alert(n)}
我有一条垂直线和一条水平线,当我动态调整我的 Canvas 父级时,我想调整它们的大小。 (地标) 我希望水平线始终距 Canvas 的左右边界 25 处,距底部边界 13 处。 垂直线也是如此,距上
我有一个 y 变量,我试图在图形的顶部和底部针对两个相关的 x 轴绘制它(例如 y="立方体中的事物数",x1="立方体的边长", x2="立方体的体积")。我在 numpy 数组中有 y、x1、x2
我想画一条简单的水平线,并在这条线 flex 的地方制作动画。我有这个动画的视频。你能给我一些建议如何开始以及我必须使用哪个 js/css 吗? 都是关于矩形底部的线: http://www.stop
我是一名优秀的程序员,十分优秀!