1
A
回答
2
可以做的一种方法是使用一些boolean
逻辑和自定义JButton
类和一些自定义绘画。例如在下面的例子中,有一个leftRight
标志。如果有横向的井字脚趾,leftRight
标志将被抬起,导致该线在井字游戏中的每个按钮中都被绘制出来。原谅我的井字游戏编程逻辑,它不是最终的游戏产品。它只是举例说明了O的顶行tic tac脚趾。但我相信你可以找出其他类型的tic tac toe的逻辑。例如,对于一个对角线,你可以有一个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));
}
}
}
0
如果您使用的是JFrame,那很简单。试试这个:
if(shape1==shape2 && shape2==shape3){
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2 = (Graphics2D) g;
Line2D lin = new Line2D.Float(100, 100, 250, 260);
g2.draw(lin);
}
}
当然,坐标取决于你的形状。
相关问题
- 1. 通过类创建按钮
- 2. 通过y = 0创建一条直线的虚线/虚线
- 3. 创建一个按钮,创建按钮
- 4. Android通过标记创建按钮
- 5. 通过abcpdf创建单选按钮
- 6. 如何通过Foreach创建按钮?
- 7. 通过单击按钮创建表格
- 8. 在Excel中通过PhpExcel创建按钮
- 9. 通过点击按钮创建变量
- 10. 通过按钮创建响应文档
- 11. 处理tictactoe检测按钮
- 12. 如何通过按下Titce Appcelerator中的另一个按钮来创建按钮?
- 13. 通过点击一个按钮创建一个div
- 14. 通过一次读取多条线创建马尔可夫链
- 15. Android:如何动态创建一个通过位图的按钮或OVERLAYING按钮?
- 16. 在android中创建线条样式按钮
- 17. 通过按下按钮在MapView上创建位置叠加层
- 18. 通过长按代码创建按钮的弹出式菜单
- 19. 创建一个按钮
- 20. 通过按钮控制线程
- 21. 通过摆动按钮停止线程
- 22. 为GUI和按钮创建线程
- 23. TicTacToe GUI应用程序重置按钮
- 24. 通过按钮
- 25. 创建按钮
- 26. 创建按钮
- 27. 创建按钮
- 28. 通过按钮连线多个按钮然后在Android
- 29. 通过按钮链接一个视图到另一个通过按钮
- 30. 创建一个按钮,在jsp中单击时创建另一个按钮
是的,这是可能的 –
你有没有尝试任何事情,或者你只是想游戏代码? – AloneInTheDark
我只想知道它是否可以完成,以及需要使用哪些类的构建。但是,一个例子更受欢迎。 – Seeker