2017-07-19 17 views
0

これはチックタックのつま先のゲームであり、正常に動作します。 しかし、私がゲームに勝つと再びプレイをクリックすると、ゲームは終了しますが、私はそれが再び始まることを心がけました。 私は現在のウィンドウを閉じて別のウィンドウを開始するためにdisposeを使いました。 私の他のゲームでは、処理はうまく処理されますが、それはここではありません。 私はlast in message関数でdisposeを使用しました。 誰かがゲームに勝った場合、私はメッセージ機能を呼び出します。 編集:私の必要条件は、もう一度クリックすると現在のゲームが終了し、新しいゲームが開始されるはずです。処分については処理が機能しないのはなぜですか?

package games; 

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 



public class tictoe extends JFrame implements MouseListener 
{ 
private static final Color COLOR_UNCLICKED = Color.white; 
private static final Color COLOR_HITT= Color.CYAN; 
private static final Color COLOR_HIT = Color.red; 
private static final int UNCLICKED = 5; 
private static final int HIT = 7; 
private static final int HIT1 = 6; 
private JLabel title; 
private JPanel titlePanel; 
private JButton[][] gridButton; 
private JPanel gridPanel; 
private final int ROWS = 3; 
private final int COLS = 3; 
private int[][] board; 
int count=0; 
GridListener gridListener = new GridListener(); 

Dimension boardSize = new Dimension(340, 400); 
public tictoe() 
{ 
    title = new JLabel("TIC TAC TOE"); 
    titlePanel = new JPanel(); 
    titlePanel.add(title); 
    gridButton = new JButton[ROWS][COLS]; 
    board= new int [ROWS][COLS]; 
    gridPanel = new JPanel(); 
    gridPanel.setPreferredSize(boardSize); 
    gridPanel.setLayout(new GridLayout(3, 3)); 
    for (int r = 0; r < gridButton.length; r++) 
     for (int c = 0; c < gridButton[r].length; c++) 
     { 
     gridButton[r][c] = new JButton(); 
     //gridButton[r][c].setBackground(COLOR_UNCLICKED); 
     gridButton[r][c].setEnabled(true); 
     gridButton[r][c].addActionListener(gridListener); 
     gridPanel.add(gridButton[r][c]); 
     } 
    for (int r = 0; r < board.length; r++) 
     for (int c = 0; c < board.length; c++) 
     { 
     board[r][c] = UNCLICKED; 
     gridButton[r][c].setEnabled(true); 
     gridButton[r][c].setBackground(COLOR_UNCLICKED); 
     } 
    this.setLayout(new BorderLayout()); 
    this.add(titlePanel, "North"); 
    this.add(gridPanel, BorderLayout.CENTER); 
    this.setPreferredSize(new Dimension(400, 400)); 
} 

public static void main(String[] args) { 
    tictoe n= new tictoe(); 
    n.pack(); 
    n.setVisible(true); 
    n.setResizable(false); 

} 

@Override 
public void mouseClicked(MouseEvent e) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void mouseEntered(MouseEvent e) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void mouseExited(MouseEvent e) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void mousePressed(MouseEvent e) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void mouseReleased(MouseEvent e) { 
    // TODO Auto-generated method stub 

} 

class GridListener implements ActionListener 
{ 



public void actionPerformed(ActionEvent evt) { 


     //System.out.println(count); 

for (int r = 0; r < gridButton.length; r++) 
for(int c = 0; c < gridButton[r].length; c++) 
{ 

if (evt.getSource() != gridButton[r][c]) 
continue; 
handleGridButton(r,c); 
gridButton[r][c].setEnabled(false); 
check(); 
return; 
} 
    } 
} 
public void handleGridButton(int r, int c) 
{ 
if (board[r][c] == UNCLICKED) 
{ 
    if(count%2==0) 
    { 
     board[r][c] = HIT; 
     gridButton[r][c].setBackground(COLOR_HIT); 
     gridButton[r][c].setEnabled(false); 
     //((JButton)e.getSource()).setText("x"); 
    } 

else 
{ 

    board[r][c] = HIT1; 
    gridButton[r][c].setBackground(COLOR_HITT); 
    gridButton[r][c].setEnabled(false); 
} 
++count; 
} 
} 
public void check() 
{ 
    if(board[0][0]==HIT && board[0][1]==HIT && board[0][2]==HIT) 
     message(); 
    else if (board[0][0]==HIT1 && board[0][1]==HIT1 && board[0][2]==HIT1) 
     message(); 
    else if (board[1][0]==HIT && board[1][1]==HIT && board[1][2]==HIT) 
     message(); 
    else if (board[1][0]==HIT1 && board[1][1]==HIT1 && board[1][2]==HIT1) 
     message(); 
    else if (board[2][0]==HIT && board[2][1]==HIT && board[2][2]==HIT) 
     message(); 
    else if (board[2][0]==HIT1 && board[2][1]==HIT1 && board[2][2]==HIT1) 
     message(); 
    else if(board[0][0]==HIT && board[1][0]==HIT && board[2][0]==HIT) 
     message(); 
    else if(board[0][0]==HIT1 && board[1][0]==HIT1 && board[2][0]==HIT1) 
     message(); 
    else if(board[0][1]==HIT && board[1][1]==HIT && board[2][1]==HIT) 
     message(); 
    else if(board[0][1]==HIT1 && board[1][1]==HIT1 && board[2][1]==HIT1) 
     message(); 
    else if(board[0][2]==HIT && board[1][2]==HIT && board[2][2]==HIT) 
     message(); 
    else if(board[0][2]==HIT1 && board[1][2]==HIT1 && board[2][2]==HIT1) 
     message(); 
    else if(board[0][0]==HIT && board[1][1]==HIT && board[2][2]==HIT) 
     message(); 
    else if(board[0][0]==HIT1 && board[1][1]==HIT1 && board[2][2]==HIT1) 
     message(); 
    else if(board[0][2]==HIT && board[1][1]==HIT && board[2][0]==HIT) 
     message(); 
    else if(board[0][2]==HIT1 && board[1][1]==HIT1 && board[2][0]==HIT1) 
     message(); 



} 
public void message() 
{ 
    if(count%2==1) 
    { Object[] options = { "Exit", "Play Again" }; 
    int choice = JOptionPane.showOptionDialog(null, 
     "Player 1 wins", 
     "Quit?", 
     JOptionPane.YES_NO_OPTION, 
     JOptionPane.QUESTION_MESSAGE, 
     null, 
     options, 
     options[0]); 

    // interpret the user's choice 
    if (choice == JOptionPane.YES_OPTION) 
    { 
     System.exit(0); 
    } 
    if (choice == JOptionPane.NO_OPTION) 
    { 
     dispose(); 
     tictoe m= new tictoe(); 

    } 
    } 
    else 
    { 
     Object[] options = { "Exit", "Play Again" }; 
     int choice = JOptionPane.showOptionDialog(null, 
      "Player 2 wins", 
      "Quit?", 
      JOptionPane.YES_NO_OPTION, 
      JOptionPane.QUESTION_MESSAGE, 
      null, 
      options, 
      options[0]); 

     // interpret the user's choice 
     if (choice == JOptionPane.YES_OPTION) 
     { 
      System.exit(0); 
     } 
     if (choice == JOptionPane.NO_OPTION) 
     { 
      dispose(); 
      tictoe m= new tictoe(); 

     } 
    } 
} 
} 
+0

なぜあなたは窓を破棄しますか? GUIをクリアしてすべての変数をリセットするだけです。 – QBrute

+0

または再度 'main'メソッドを呼び出してください。これはまた、うまく動作するはずです – XtremeBaumer

+0

と私はどのようにGUIをクリアするのですか? @QBrute –

答えて

0

ここを見て: https://stackoverflow.com/a/13360489/3319324

をごtictoe、変数mは、あなたがそれを作成した直後に殺されます。だから新しいTicToeのゲームパネルはないだろう。

+0

私の要件は、別のウィンドウを開き、前のウィンドウを閉じます。どうすればいいですか? –

+0

メインウィンドウと2番目のゲームウィンドウを組み合わせることができます。したがって、ゲームウィンドウを閉じると、メインウィンドウはそのまま残り、そこから新しいゲームウィンドウを作成することができます。 –

関連する問題