Hi leute wir müssen in der Schule ein Spiel programmieren
und das soll zwei user interfaces bekommen mal soll auswählen können ob es in der shell läuft also eine textbasierte ui oder ob die gui gestartet werden soll
Es geht hier dabei darum deine information anzuzeigen, dafür erstellst du einfach zwei verschiedenen Klassen "Gui"(Swing Client) und "Shell"(Konsole). Dabei hat die Ausgabe keinen Einfluss auf die Berechnungen.
Hier mal ein kurzes Beispiel, bei dem sowohl Eingaben über eine GUI als auch über eine Konsole gemacht werden können. (In Deinem Fall könnte man durch Abfrage in der Konsole oder sonst wo oder durch übergabe eines Parameters beim Programmaufruf unterscheiden was als UI "geöffnet" werden soll.
Der Controller bildet hier die zentrale Einheit, der alle "Funktionen" abbildet. Diese können aus den verschiedenen UIs aufgerufen werden. (Ähnlich wie z.B. ein ActionListener, den man an verschiedene Komponenten hängt) Auf ein Model habe ich hier mal verzichtet.
Java:
importjava.awt.BorderLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.util.Scanner;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JTextField;publicclassGuiConsoleDemo{publicstaticvoidmain(String[] s){newGuiConsoleDemo();}publicGuiConsoleDemo(){Controller controller =newController();newGUIView(controller);newConsoleView(controller);}classController{publicvoidsetValue(Object value){System.out.println("Controller received value: "+ value);}}abstractclassView{privateController controller;publicView(Controller controller){this.controller = controller;}publicvoiddoAnAction(Object value){System.out.println(this.getClass().getSimpleName()+" will call a conroller method");
controller.setValue(value);}}classGUIViewextendsView{publicGUIView(Controller controller){super(controller);JFrame frame =newJFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(20,20,100,100);finalJTextField field =newJTextField();JButton button =newJButton("Send");
frame.add(field,BorderLayout.NORTH);
frame.add(button,BorderLayout.SOUTH);
frame.setVisible(true);
button.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvent e){doAnAction(field.getText());}});}}classConsoleViewextendsView{publicConsoleView(Controller controller){super(controller);Scanner scanner =newScanner(System.in);System.out.println("ready for reading from console...");while(scanner.hasNext()){doAnAction(scanner.next());}}}}