import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CSE141HW5 implements ActionListener
{
public static void main (String[] args)
{
new CSE141HW5();
}
/* Instance Variables */
private JFrame gameWindow = new JFrame ("Tic-Tac-Toe");
private int [][] winningCombinations = new int[][] {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}, {0, 3, 6}, {1, 4, 7}, {2, 5, 8}, {0, 4, 8}, {2, 4, 6}};
private JButton buttons[] = new JButton [9];
private int count = 0;
private String mark = "";
private boolean win = false;
public CSE141HW5()
{
/* Creating gameWindow */
Container con = gameWindow.getContentPane();
con.setBackground(Color.WHITE);
gameWindow.setVisible (true);
gameWindow.setSize (220,220);
gameWindow.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
gameWindow.setLayout (new GridLayout (3, 3));
gameWindow.setLocation (830, 400);
gameWindow.setBackground(Color.WHITE);
/* Adding Buttons */
for (int i = 0; i <= 8; i++)
{
buttons[i] = new JButton ();
gameWindow.add (buttons [i]);
buttons[i].addActionListener (this);
buttons[i].setBackground(Color.WHITE);
}
}
/* When an object clicked... */
public void actionPerformed (ActionEvent click)
{
JButton pressedButton = (JButton)click.getSource();
/* Whose turn? */
if ((count % 2) == 0)
{
mark = "O";
pressedButton.setBackground(Color.CYAN);
}
else
{
mark = "X";
pressedButton.setBackground(Color.yellow);
}
/* Write the letter to the button and deactivate it */
pressedButton.setText (mark);
pressedButton.setEnabled (false);
/* Determining that who won */
for (int i = 0; i <= 7; i++)
{
if (buttons[winningCombinations[i][0]].getText().equals(buttons[winningCombinations[i][1]].getText())
&& buttons[winningCombinations[i][1]].getText().equals(buttons[winningCombinations[i][2]].getText())
&& buttons[winningCombinations[i][0]].getText() != "") win = true;
}
/* Ending Dialog */
if (win == true)
{
byte response = (byte) (JOptionPane.showConfirmDialog(null, mark + " won!\nPlay again?", "Homework 5", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE));
if (response == 0) new CSE141HW5();
else System.exit(0);
}
else if (count == 8 && win == false)
{
byte response = (byte) (JOptionPane.showConfirmDialog(null, "Draw!\nPlay again?", "Homework 5", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE));
if (response == 0) new CSE141HW5();
else System.exit(0);
}
count++;
}
}
我是编程新手,并在java上编写了一个tic-tac-toe游戏。我想改进这个程序,但有些东西是我无法处理的。
我用默认颜色更改了按钮颜色,比如Color.yellow等。我如何使用更详细的颜色?
游戏结束时,程序要求重新播放。如果用户选择是,则会出现新的游戏窗口,但旧窗口仍然存在,我不喜欢。我希望关闭旧窗口,但无法找到如何实现它。
如果您在我的程序中找到任何您认为不必要的代码,或者如果您认为有比我更好的方式,请告诉我。所以我可以学习。
答案 0 :(得分:1)
(255,0,0)
。gameWindow.setVisible (false);
答案 1 :(得分:1)
如果要完全删除窗口,请使用dispose()函数。
答案 2 :(得分:1)
我用默认颜色更改了按钮颜色,比如Color.yellow等。我该如何使用更详细的颜色?
您可以使用自己的按钮,让我们说public class XButton extends JButton
。要更好地自定义按钮,请覆盖方法public void paintComponent(Graphics g)
。然后,您可以使用fillRect
填充按钮的矩形,使用标准颜色或将对象Graphics g
投射到Graphics2D
,然后设置对象{{1填充具有线性颜色渐变的形状。
GradientPaint()
结果如下图所示:
PS:在添加按钮的同时,用Xbutton代替JButton以及所有这些。
游戏结束时,程序要求重新播放。如果用户选择是,则会出现新的游戏窗口,但旧窗口仍然存在,我不喜欢。我希望关闭旧窗口,但无法找到如何实现它。
您只需在JFrame对象public class XButton extends JButton {
public XButton() {
super();
}
public void paintComponent(Graphics g){
Graphics2D g2d = (Graphics2D)g;
GradientPaint gp = new GradientPaint(0, 0, Color.RED, 30, 30, Color.cyan, true);
g2d.setPaint(gp);
g2d.fillRect(0, 0, this.getWidth(), this.getHeight());
}
}
上使用dispose()
方法,因此您的代码中应该放置两个位置:
gameWindow
有关How to programmatically close a JFrame。
的详细信息如果您在我的程序中找到任何您认为不必要的代码,或者如果您认为有比我更好的方式,请告诉我。所以我可以学习。
嗯,你的代码很好。如果你想改进它。 StackOverflow不适合这样做。你最好检查一下:codereview.stackexchange.com
我希望我回答你的问题。