Hallo,
ich programmiere momentan ein kleines Spiel und habe dort ein Menü, in dem sich verschiedene Einstellungen vornehmen lassen (Feldgröße, Spieldauer, Mischgeschwindigkeit etc.). Die vom Spieler eingetragenen Werte werden mit diesem Code in die Einstellungen übernommen (ignorieren wir dabei mal, dass die Eingaben momentan ungeprüft übernommen werden):
Mit diesem Code bin ich nicht gerade zufrieden, da er zu wenig abstrahiert ist und ich ihn immer wieder händisch anpassen muss, wenn es Änderungen gibt (z.B. neue Einstellmöglichkeiten hinzu, nicht benötigte weg). Ich hätte lieber eine Schleife, mit der zum einen durch die Textfelder und zum anderen (hoffentlich werde ich jetzt nicht geknüppelt) durch die aufzurufenden Methoden iteriert wird.
Reflection mag ich nicht benutzen (falls das in diesem Fall überhaupt helfen würde - wobei… mit dem Holzhammer ist sicher einiges möglich ).
Ansonsten fällt mir nur ein, das ganze über Interfaces zu machen: Dabei würde jede Klasse, die das Interface Settable (oder so) implementiert, eine Einstellung repräsentieren. Dann könnte man deren Instanzen in ein Settable[] tun. Irgendwie scheint mir das aber auch Overkill/Overobjectizing zu sein. Weiteres Problem: Die Einstellungen sind nicht immer nur ints, image_path ist z.B. ein String, also müsste trotz Abstraktion auch auf Sonderfälle Rücksicht genommen werden
Für den Import und Export von Einstellungen verwende ich java.util.Properties, wo ich den ganzen Schmus dann nochmal habe:
… Öhm, ja. Weiß jemand Rat, wie man das schöner machen könnte?
ich programmiere momentan ein kleines Spiel und habe dort ein Menü, in dem sich verschiedene Einstellungen vornehmen lassen (Feldgröße, Spieldauer, Mischgeschwindigkeit etc.). Die vom Spieler eingetragenen Werte werden mit diesem Code in die Einstellungen übernommen (ignorieren wir dabei mal, dass die Eingaben momentan ungeprüft übernommen werden):
Java:
private void applyChanges() {
gameSettings.setGridLength(Integer.parseInt(textFields[0].getText()));
gameSettings.setRemainingTime(Integer.parseInt(textFields[1].getText()));
gameSettings.setShuffleSpeed(Integer.parseInt(textFields[2].getText()));
gameSettings.setButtonSizeX(Integer.parseInt(textFields[3].getText()));
gameSettings.setButtonSizeY(Integer.parseInt(textFields[4].getText()));
gameSettings.setHorizontalGap(Integer.parseInt(textFields[5].getText()));
gameSettings.setVerticalGap(Integer.parseInt(textFields[6].getText()));
}
Mit diesem Code bin ich nicht gerade zufrieden, da er zu wenig abstrahiert ist und ich ihn immer wieder händisch anpassen muss, wenn es Änderungen gibt (z.B. neue Einstellmöglichkeiten hinzu, nicht benötigte weg). Ich hätte lieber eine Schleife, mit der zum einen durch die Textfelder und zum anderen (hoffentlich werde ich jetzt nicht geknüppelt) durch die aufzurufenden Methoden iteriert wird.
Reflection mag ich nicht benutzen (falls das in diesem Fall überhaupt helfen würde - wobei… mit dem Holzhammer ist sicher einiges möglich ).
Ansonsten fällt mir nur ein, das ganze über Interfaces zu machen: Dabei würde jede Klasse, die das Interface Settable (oder so) implementiert, eine Einstellung repräsentieren. Dann könnte man deren Instanzen in ein Settable[] tun. Irgendwie scheint mir das aber auch Overkill/Overobjectizing zu sein. Weiteres Problem: Die Einstellungen sind nicht immer nur ints, image_path ist z.B. ein String, also müsste trotz Abstraktion auch auf Sonderfälle Rücksicht genommen werden
Für den Import und Export von Einstellungen verwende ich java.util.Properties, wo ich den ganzen Schmus dann nochmal habe:
Java:
props.put("game_duration", Integer.toString(remainingTime));
props.put("grid_gap_horizontal", Integer.toString(horizontalGap));
props.put("grid_gap_vertical", Integer.toString(verticalGap));
props.put("grid_length", Integer.toString(gridLength));
props.put("shuffle_speed", Integer.toString(shuffleSpeed));
props.put("vermin_button_size_x", Integer.toString(buttonSizeX));
props.put("vermin_button_size_y", Integer.toString(buttonSizeY));
props.put("image_path", imagePath);
… Öhm, ja. Weiß jemand Rat, wie man das schöner machen könnte?