Как сократить код Tic Tac Toe, избегая повторения - PullRequest
0 голосов
/ 21 июня 2019

Это мой первый проект JavaFX.

Я создал игру Tic Tac Toe с использованием JavaFx. Игра работает в режиме «игрок против игрока» и идеально подходит, но код, который я использовал, слишком длинный.

Вот некоторые очевидные дубликаты, но они совершенно разные:

Код Tic-Tac-Toe помогает улучшить

Код Гольф: Крестики-нолики

Это мой код для кнопки 1, которую я должен повторить для еще восьми кнопок:

one.setOnAction(new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent actionEvent) {
        System.out.println(1);
        System.out.println("my state is " + state[0]);
        if (state[0] == 0){
            state[0]  = 1 ;
            for (int a: state ) {
            System.out.print(a);}
            if(i%2==0){
                one.setText("X"); i+= 1;
                System.out.println(i+"recorded");
                turn.setText("O turn");
                result[0] = 'x';
                win() ;
            }
            else{
                one.setText("O"); i+= 1 ;
                System.out.println(i+"recorded");
                turn.setText("X turn");
                result[0] = 'o';
                win() ;
            }
        }
    }
});

Скриншот:

enter image description here

Можно ли избежать повторения кода еще для 8 кнопок?

На скриншоте видно, что повторяются и циклы.

Это мой самый первый проект графического интерфейса, но я не собираюсь оставаться новичком.

Редактировать

После того, как я не вижу никакого цикла for в коде. Возможно, вы имели в виду if-заявления? - NiVeR

Да, я имел в виду, если заявления.

1 Ответ

2 голосов
/ 21 июня 2019

Попробуйте сделать это:

void makeMove(Button button, JLabel turn, int cell){
    System.out.println(cell);
    System.out.println("my state is " + state[cell-1]);
    if (state[cell-1] == 0){
        state[cell-1]  = 1 ;
        for (int a: state ) {
        System.out.print(a);}
        if(i%2==0){
            button.setText("X"); i+= 1;
            System.out.println(i+"recorded");
            turn.setText("O turn");
            result[cell-1] = 'x';
            win() ;
        }
        else{
            button.setText("O"); i+= 1 ;
            System.out.println(i+"recorded");
            turn.setText("X turn");
            result[cell-1] = 'o';
            win() ;
        }
    }
}

one.setOnAction(new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent actionEvent) {
        makeMove(one,turn,1);
    }
);

и повторите это для других кнопок, изменив 1 на 2 ... 9

Этот код на самом деле можно еще улучшить, но, поскольку вы сказали, что только начинаете, это хороший способ начать думать о модульном коде.

Я не был уверен, что такое turn, поэтому я сделал это в качестве ярлыка в определении makeMove, изменив его на то, что есть на самом деле.

...