2017-01-21 25 views
-1

我是一名AP计算机科学专业的学生,​​我需要帮助完成课程。我的任务是使用Eclipse创建一个简单的GUI或游戏。我做了一个简单的玩家与玩家的tic-tac-toe游戏,但我不知道如何为我的GUI创建一个“重置”按钮。我尝试过多次,但无法使用它或在我的GUI中显示。我会很感激一些关于如何实现功能重置按钮的指针,所以我不会多次退出GUI以重新开始播放。这是我迄今为止编写的代码。如何为我的GUI实现重置按钮?

package gui; 

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class TicTacToeGUI implements ActionListener 
{ 
    JFrame window = new JFrame("Tic-Tac-Toe"); 
    JButton[] button; 
    JButton reset = new JButton("Reset"); 
    String letter = ""; 
    public int count = 0; 
    public boolean win = false; 

    public TicTacToeGUI() 
    { 
     button = new JButton[9]; 
     window.setSize(300,300); 
     window.setLayout(new GridLayout(3,3)); 
     JButton dummy = new JButton(""); 
     Font font = dummy.getFont(); 
     Font bigFont = font.deriveFont(font.getSize2D() * 5.0f); 
     JButton reset = new JButton("Reset"); 
     for(int i = 0; i < 9; i++) 
     { 
      button[i] = new JButton(""); 
      button[i].setFont(bigFont); 
      button[i].addActionListener(this); 
      window.add(button[i]); 
     } 
     window.setVisible(true); 
    } 

    public void actionPerformed(ActionEvent a) 
    { 
     count++; 

     if(count % 2 == 1) 
     { 
      letter = "X"; 
     } 
     else 
     { 
      letter = "O"; 
     } 

     Object but = a.getSource(); 

     for(int i = 0; i < 9; i++) 
     { 
      if(but == button[i]) 
      { 
       button[i].setText(letter); 
       button[i].setEnabled(false); 
       break; 
      } 
     } 

     if(button[0].getText() == button[1].getText() && button[1].getText() == button[2].getText() && button[0].getText() != "") 
     { 
      win = true; 
     } 
     else if(button[3].getText() == button[4].getText() && button[4].getText() == button[5].getText() && button[3].getText() != "") 
     { 
      win = true; 
     } 
     else if(button[6].getText() == button[7].getText() && button[7].getText() == button[8].getText() && button[6].getText() != "") 
     { 
      win = true; 
     } 
     else if(button[0].getText() == button[3].getText() && button[3].getText() == button[6].getText() && button[0].getText() != "") 
     { 
      win = true; 
     } 
     else if(button[1].getText() == button[4].getText() && button[4].getText() == button[7].getText() && button[1].getText() != "") 
     { 
      win = true; 
     } 
     else if(button[2].getText() == button[5].getText() && button[5].getText() == button[8].getText() && button[2].getText() != "") 
     { 
      win = true; 
     } 
     else if(button[0].getText() == button[4].getText() && button[4].getText() == button[8].getText() && button[0].getText() != "") 
     { 
      win = true; 
     } 
     else if(button[2].getText() == button[4].getText() && button[4].getText() == button[6].getText() && button[2].getText() != "") 
     { 
      win = true; 
     } 
     else 
     { 
      win = false; 
     } 

     if(win == true) 
     { 
      JOptionPane.showMessageDialog(null, letter + " WINS!"); 
     } 
     else if(count == 9 && win == false) 
     { 
      JOptionPane.showMessageDialog(null, "Tie Game!"); 
     } 
    } 

    public static void main(String[] args) 
    { 
     new TicTacToeGUI(); 
    } 
} 

回答

0

你可能想试试这个:

window.setLayout(new BorderLayout()); 
    JPanel panel = new JPanel(new GridLayout(3, 3)); 
    window.add(panel, BorderLayout.CENTER); // add panel to window center 
    window.add(reset, BorderLayout.SOUTH); // add reset button to window bottom 

当然,你将有你的9个按钮添加到panel现在,不要window

但是,为什么不在用户在游戏结束时确认对话框后自动重置?

0

在平局或胜利后重置棋盘。示例重置方法。否则,你将不得不在你的框架上腾出空间来按住按钮来做到这一点。

private void ResetBoard() { 
    for(int i = 0; i < 9; i++) { 
    button[i].setText(""); 
    button[i].setEnabled(true); 
    count = 0; 
    } 
} 

然后使用此方法时进行检查,看是否有玩家赢或比赛以平局如下结束:

if(win == true) 
{ 
    JOptionPane.showMessageDialog(null, letter + " WINS!"); 
    ResetBoard(); 
} 
else if(count == 9 && win == false) 
{ 
    JOptionPane.showMessageDialog(null, "Tie Game!"); 
    ResetBoard(); 
} 
相关问题