Logik neu laden lassen



  • Hallo Leute,
    ich habe ein kleines Spiel (Minsweeper) geschrieben. Funktioniert soweit auch ganz gut nur hab ich ein Problem wenn ich das Spiel neu starten will.

    Ich erzeuge eine GUI für die Darstellung und eine Logik für die Spielelogik.
    Die GUI registriere ich bei der Logik und umgekehrt.

    main

    if(args.length > 0)
    {
    	if(args[0].equals("neu"))
    	{
    		logik = null;
    	}
    }
    logik = new Logik();
    gui.getLogik(logik);
    gui.fuehreLogikAus();
    logik.getGui(gui);
    

    damit funktioniert das Spiel auch ganz gut. Mein Problem ist jetzt das ich einen Menupunkt habe über den ich das Spiel gerne neu starten würde.

    Ich habe versucht im ActionListener für den Button die Main aus meiner Hauptklasse nochmal aufzurufen. Allerdings führt das zu einem völlig undefinierbaren verhalten.
    ActionListener

    public class Verwaltung implements ActionListener{
    	public void actionPerformed(ActionEvent arg0) {
    		// TODO Auto-generated method stub
    
    		if(arg0.getActionCommand().equals("Neu"))
    		{
    			String[] uebergabe = new String[1];
    			uebergabe[0] = "neu";
    			Minsweeper.main(uebergabe);
    
    		}
          }	
     }
    

    Kann mir jemand sagen wie ich meine Programmlogik nochmal ausführen kann und alle Felder wieder auf 0 zurückgesetzt werden?

    Hoff das reicht an infos aus??

    Gruß

    eiskalt



  • Eine Spielklasse (meinetwegen auch Logikklasse) erstellen, im Konstruktor alle Initialisierungen vornehmen, bei Neustart neues Objekt konstruieren?



  • Was für einen Sinn macht denn deine if-Abfrage am Anfang? Die Wirkung der Zuweisung wird durch die logik = new Logik; unmittelbar neutralisiert. Und eine Methode zum Setzen/Registrieren von Zuordnungen würde ich nicht getIrgendwas() nennen 😉

    Zu deiner Frage: Java hat einen Garbage Collector. Das heißt, du mußt nur ein neues Logik-Objekt anlegen und die Verknüpfungen darauf umbiegen, dann entsorgt der GC das vorhandene. Oder du spendierst der Logik-Klasse eine reset()-Methode, die alle Felder zurücksetzt und neu verteilt.



  • Erstmal würde ich an der Wurzel des Problems arbeiten

    Die GUI registriere ich bei der Logik und umgekehrt.



  • Hi

    Nexus schrieb:

    Eine Spielklasse (meinetwegen auch Logikklasse) erstellen, im Konstruktor alle Initialisierungen vornehmen, bei Neustart neues Objekt konstruieren?

    genau das habe ich auch versucht. Dann passiert bei mir folgendes:
    1. Es werden alle Felder neu gesetzt
    2. Es werden keine Minen gelegt
    3. Sobald ich mit der Maus über ein Feld fahre wird es markiert(nicht erst beim Anklicken)

    Die if-abfrage war nur n Test eigentlich macht die keinen Sinn hast recht.

    gastantwort schrieb:

    Erstmal würde ich an der Wurzel des Problems arbeiten

    Die GUI registriere ich bei der Logik und umgekehrt.

    Ich dachte mir schon das das kein so guter Ansatz ist. Hab mir jetzt mal n Buch über Design Pattern zugelegt 🙂

    Gruß

    eiskalt


Anmelden zum Antworten