2015-08-10 3 views
0

Я занимаюсь настольной игрой tic tac toe. У меня уже есть панель в окне, но я не знаю, как использовать метод обработчика для установки значений в кнопках, чтобы игроки могли действительно играть. Это то, что я до сих пор:Как установить свой код, чтобы он позволял использовать значения «X» и «O» в кнопках?

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

public class TicTacToeGame implements java.awt.event.ActionListener { 

    private NscWindow win; 
    private JButton[][] button; 
    private boolean turnX; 
    private JLabel label; 


    public TicTacToeGame() { 
    win = new NscWindow(10,10, 235, 280); 
    win.setTitle("Tic-Tac-Toe"); 

    javax.swing.JButton btn; 
    button = new JButton[3][3]; 

    JButton[] buttons = new JButton[9]; 

    for (int i = 0; i < 3; i++) { 
     for(int j = 0; j < 3; j++) { 

      button[i][j] = new JButton(); 
      button[i][j].setSize(50, 50); 
      button[i][j].setLocation(30 + i*55, 30+ j*55); 
      win.add(button[i][j]); 
      button[i][j].addActionListener(this); 
      win.repaint(); 

    javax.swing.JLabel label; 
    label = new JLabel("X's turn", JLabel.CENTER); 
    label.setSize(160, 20); 
    label.setLocation(30, 200); 
    win.add(label); 
    win.repaint(); 


     } 
    } 
    } 
    //Abstract method 
    public void actionPerformed(java.awt.event.ActionEvent e) { 

    javax.swing.JButton button; 
    button = (javax.swing.JButton)e.getSource(); 
    button.setText(""); 

    //count++; 

    // if(count %2 != 0) { 
    //letter = "X"; 
    //}else{ 
    //letter = "O"; 

    //} 


    } 
    public static void main(String[] args) { 
     new TicTacToeGame(); 
    } 
} 
+0

Вы уже вызываете 'button.setText (" ")', поэтому, по-видимому, вы понимаете, что делает этот метод - так почему бы не сделать очевидное - вызовите метод после установки ссылки на букву, а затем передайте переменную букв в этот метод? Я немного ошеломлен тем, почему вы еще не пробовали это. –

+0

Если я поставил «X» там, он всегда будет помещать «X» в каждую кнопку. Я не знаю, понимаете ли вы мой вопрос. Предполагается, что он будет воспроизводиться. – user5183901

+0

Нет, я не сказал, чтобы поставить «Х» там, я сказал для тебя, но переменную букв там ** после ** ты ее установил. Раскомментируйте код в нижней части обработчика actionPerformed методом, а затем вызовите 'button.setText (letter)' ниже, где вы задаете значение буквы. Опять же, почему это не будет работать? Я не думаю, что вы понимаете мое предложение. Еще лучше, используйте структуру Model-View-Control, чтобы вы установили текст кнопок в зависимости от состояния вашей модели. Это один из способов гарантировать, что кнопка не изменится, если она уже установлена. –

ответ

2

Простой сиюминутные: как отмечено в моих комментариях, просто вызовите setText(...) на выбранной кнопке после установочное значение письмо в. Вы бы сначала проверить текст, чтобы убедиться, что оно не пусто, что-то вроде:

// code not tested. 
public void actionPerformed(java.awt.event.ActionEvent e) { 
    // get the button pressed 
    javax.swing.JButton button = (javax.swing.JButton)e.getSource(); 
    // get the button's text 
    String text = button.getText(); 

    // if the text either holds spaces or is empty 
    if (text.trim().isEmpty()) { 
     count++; 
     String letter = ""; // declare letter outside of the if/else block 

     // find out whose turn, and assign appropriate String to letter 
     if (count % 2 == 0) { 
      letter = "0"; 
     } else { 
      letter = "X"; 
     } 

     // use letter to set button's text 
     button.setText(letter); 
    } 
} 

Чем лучше над-все решение использовать MVC, как структура программы, такие как можно найти в this solution to a similar problem.

+0

Я пробовал это, но count ++ не работает. – user5183901

+0

@ user5183901: если вам по-прежнему нужна помощь, подумайте и покажите нам больше, отредактировав исходное сообщение, оставив исходный код без изменений, но добавив новый код и новые сведения о вашей проблеме в редактировании под исходным кодом и объяснением. Тогда переоденьте меня, и я посмотрю на него. –