2013-12-18 4 views
0

Работа над простой игрой tic-tac-toe в Java.Как манипулировать классом из другого класса?

У меня есть класс с именем TicTacToe, который содержит большую часть программы. И у меня есть класс с именем GameHelpers, который должен содержать методы, которые помогут в игре.

Класс TicTacToe содержит массив (JButton buttons[9]) и переменную int count, в которой хранится количество X и О, которое пользователь уже установил на экран. (Каждый раз, когда пользователь нажимает кнопку, это пустой текст изменяется на X или O, а переменная count идет count ++).

В настоящее время единственным способом, который я планирую написать внутри GameHelpers, является метод с именем resetGame(). Этот метод должен делать две вещи:
1- Установите текст на всех кнопках в buttons пустой.
2- Установить count 0.

Если resetGame() был метод внутри TicTacToe, было бы легко. Это будет выглядеть следующим образом:

resetGame(){ 
    for(int i=0;i<9;i++){ 
      buttons[i].setText(""); 
    } 
    count = 0; 
} 

Но resetGame() должен быть метод внутри другого класса, GameHelpers.

Я предполагаю, что то, что я пытаюсь сделать, является довольно стандартным объектно-ориентированным программированием. Существует класс с большей частью программы, а другой - меньший класс с методами, помогающими большему классу. Программа всегда вращается вокруг большего класса (TicTacToe).

У меня есть два вопроса:

1- Описанная идея выше (примерно один из основных классов, что программа вращается вокруг, и небольшие классы, чтобы помочь), стандартные и общие в объектно-ориентированных программ?

2- Как бы вы закодировали метод resetGame() внутри GameHelpers?

Спасибо

ответ

-1

Лучше всего было бы написать сеттер и добытчик для вашего графа и ваших кнопки следующим образом: (для счета):

public int getCount() { 
return count; 
} 

public void setCount(int count) { 
    this.count = count; 
} 

Тогда вы можете получить доступ к нему в вашем другом класс через:

TicTacToe ttt = new TicTacToe(); 
ttt.setCount(0); 

Поскольку вы не хотите новый экземпляр TicTacToe я полагаю, вы могли бы сделать что-то вроде этого: В GameHelper написать private TicTacToe ttt;, а затем

public GameHelper(TicTacToe ttt) { 
this.ttt = ttt; 
} 

Тогда вам не нужно было создавать новый экземпляр, но передавать экземпляр при создании GameHelper. Таким образом, в TicTacToe при инициализации GameHelper можно было бы написать GameHelper gh = new GameHelper(this);

Здесь я сделал пример для вас:

public class TicTacToe { 

private int count = 0; 

public TicTacToe() { 
count = 3; 
GameHelper gh = new GameHelper(this); 
} 

public void setCount(int count) { 
this.count = count; 
} 

public int getCount() { 
return count; 
} 
public void printCount() { 
System.out.println("Count:"+count); 
} 
} 



    public class GameHelper { 

TicTacToe ttt; 
public GameHelper(TicTacToe ttt) { 
this.ttt = ttt; 
this.ttt.setCount(5); 
this.ttt.printCount(); 
} 

} 

public class Test { 

public static void main(String[] args) { 
TicTacToe ttt = new TicTacToe(); 
} 

} 
1

1.- Этот метод может быть использован, но тем меньше классов программа должна опираться на лучше.Я не вижу проблемы с простое создание метода #resetGame внутри TicTacToe.

2.-

public class GameHelper { 
public static void resetGame() { 
    for(int i=0;i<9;i++){ 
     TicTacToe.buttons[i].setText(""); 
    } 
    TicTacToe.count = 0; 
} 
} 

Затем можно вызвать этот метод из TicTacToe с помощью:

GameHelper.resetGame(); 

В этом случае класс GameHelper является излишним, но я не знаю, полное намерение вашей программы.

+0

Статические переменные не являются хорошей практикой, он должен лучше использовать частные переменные и публичный сеттер/getter – dehlen

+0

Я знаю, что использовать статику нехорошо, но я думаю, что его главным вопросом было просто вызвать статические методы из другого класса. –

+0

Это не работает. Это дает мне ошибку (красная линия) под TicTacToe.buttons и TicTacToe.count. Ошибка говорит: «Невозможно сделать статическую ссылку на нестатические поля TicTacToe.buttons». – AvivC

Смежные вопросы