2017-07-19 5 views
0

Ceci est un jeu de tic tac toe et ça marche bien. Mais quand je gagne le jeu et que je clique sur rejouer, le jeu se ferme mais je voulais que ça recommence. J'ai utilisé disposer pour fermer la fenêtre actuelle et démarrer une autre fenêtre. Dans mon autre jeu fonctionne bien mais ce n'est pas ici. J'ai utilisé disposition dans la dernière fonction du message. Si quelqu'un gagne le jeu, j'appelle la fonction de message. Modifier: MY requiremet est qu'en cliquant à nouveau, le jeu en cours devrait se fermer et un nouveau jeu devrait commencer.Pourquoi la mise au rebut ne fonctionne-t-elle pas?

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

Pourquoi disposez-vous la fenêtre? Effacez simplement l'interface graphique et réinitialisez toutes les variables. – QBrute

+0

ou appelez la méthode 'main' à nouveau qui devrait également fonctionner bien – XtremeBaumer

+0

et comment puis-je effacer le gui? @QBrute –

Répondre

0

Pour look Éliminez ici: https://stackoverflow.com/a/13360489/3319324

est tué Votre tictoe variable m juste après avoir créé. Il n'y aura donc pas de nouveau panneau de jeu TicToe.

+0

Mon exigence est qu'il ouvre une autre fenêtre et ferme le précédent comment puis-je faire cela? –

+0

Vous pouvez compléter une fenêtre principale et une seconde fenêtre de jeu. Donc, si vous fermez la fenêtre de jeu, la fenêtre principale est toujours en place et vous pouvez créer une nouvelle fenêtre de jeu à partir de celle-ci. –