В данный момент я переписываю текстовую программу, чтобы иметь GUI. Одна из проблем, с которыми я сталкиваюсь, заключается в том, что я хочу, чтобы программа ожидала выполнения определенного условия. Это условие может быть выполнено, если пользователь нажимает кнопку «Прогулка» до тех пор, пока атрибут player.walked не будет = 5. При использовании текстового интерфейса это довольно просто, используйте команду while l oop, и внутри есть функция ввода.
while (player.getWalked() < 5) {
//wait for user input via terminal through the scanner.
}
Однако при использовании GUI и желании следовать подходу Model-View Controller (т.е. разделить игровую механику и пользовательский интерфейс отдельно) это становится довольно сложным. После попытки реализовать GUI моя программа продолжает зависать, пока l oop пусто. Я попытаюсь доказать это ниже, но это довольно запутанно. Прошу прощения, если это непрофессионально.
World Class:
public static void play(Player player) throws FileNotFoundException, IOException, ClassNotFoundException{ // play method is the centralised place for all in-game simulation and user interaction.
welcome(player);
while (player.getWalked() <5) {
}
GUI Class:
Button walk_button = new Button("Walk");
walk_button.setBounds(195, 395, 100,100);
add(walk_button);
walk_button.addActionListener((new ActionListener(){
public void actionPerformed(ActionEvent evt) {
try{
label1.setVisible(false);
label.setText(player.interaction("W"));
label.setBounds(200,50,400,100);
}
catch (FileNotFoundException e) {System.out.println(e.getMessage());} catch (IOException e) {System.out.println(e.getMessage());} catch (ClassNotFoundException e) {System.out.println(e.getMessage());}
}
}));
Класс игрока, состоящий из метода interaction
:
public String interaction(String input) throws FileNotFoundException, IOException, ClassNotFoundException{
//String input = World.input("You have walked "+getWalked()+" miles so far.\nOnly "+(END_POINT - walked)+" miles until you reach the end of the town.\nPress 'w' to walk.\nPress 'c' to change weapon equipped.\nPress 's' to save and exit.");
if (input.equals("W")) {
return walk(World.dice(4,1));
}
Если кто-нибудь сможет найти решение этой проблемы, я был бы очень признателен. Конечная цель заключается в том, чтобы программа продолжала работать (позволить игроку продолжать нажимать кнопку «Ходить») до тех пор, пока l oop не сломается.
Большое спасибо и извинения, если это довольно долго , запутанный и непрофессиональный.