TheMacuser Geschrieben 11. Juli 2009 Geschrieben 11. Juli 2009 Hallo zusammen, ich beschäfftige mich nun schon seit einer ganzen Weile min Java und versuche mich gerade am 3-Schichten Modell zu üben. Allerdings hab ich noch ein "kleines" Verständnisproblem. Ich hab mir vorgenommen ein kleines Minesweeper-Spiel zu programmieren und versuche derzeit einfach nur die Logik und die GUI von einander zu trennen. Leider bekomme ich beim Aufrufen der Methoden der Logik immer nur die eine Fehlermeldung: "non-static Method connot be referenced from a static context" Schauts euch am besten selber an ich(siehe Anhang). IDE ist Netbeans 6.7 Hoffe ihr könnte mir helfen und schon mal Danke im Voraus.Minesweeper.zip Zitieren
JasonDelife Geschrieben 11. Juli 2009 Geschrieben 11. Juli 2009 1. Bitte poste NUR den relevanten Code! 2. Namenskonventionen einhalten! (Klassen, Interfaces groß; Methoden, Felder, Packages klein) 3. DIE GUI KENNT DIE LOGIK UND DIE LOGIK KENNT DIE GUI NICHT!!! (Tschuldige die Großschreibung, aber das ist essentiell) Wenn beide sich kennen, kann man sich's auch sparen. 5. Das Problem: Logik.Logik.NeuesSpiel("d"); Du musst auf die Controller-Instanz zugreifen: Controller.NeuesSpiel("d"); 6. Du solltest mal ein Java-Buch lesen: GalileoComputing OpenBook: Java ist auch eine Insel Grüße, JasonDelife. Zitieren
Sofus Geschrieben 11. Juli 2009 Geschrieben 11. Juli 2009 Deine Package-Namen enthalten nicht nur Großbuchstaben, sondern sind auch viel zu kurz geraten. Die Java Sprachspezifikation verlangt hier eindeutige Package-Namen, so das rein theoretisch aller jemals in Java geschriebener Code in einem einzigen jar-Archiv zusammen gefasst werden könnte ohne Dopplungen zu haben. Daher die Empfehlung von Sun den umgekehrten Internetdomänennamen als Package-Namen zu verwenden. Beispiele hierfür sind: org.w3ccom.sun Du könntest zum Beispiel, um mit der Eindeutigkeit nicht zu übertreiben, folgend Package-Namen für dein GUI Package verwenden: de.the_macuser.minesweeper.gui Aber das eigentlich nur nebenbei Was dein Problem bei dem Softwareentwurf betrifft, habe ich den Verdacht, dass du das Ganze von der völlig falschen Seite angegangen hast. Versuch doch erstmal eine Klasse (oder mehrere) zu schreiben die das Konzept das Spiels repräsentieren ohne auch nur den Ansatz einer Oberfläche zu verwenden (System.out eingeschlossen). Hier mein Vorschlag für eine Klasse MinesweeperFeld: Der Konstruktor erstellt ein Feld der vorgegebenen Breite und Höhe mit zufällig in dem Feld verteilten Minen gleich der übergebenen Anzahl von Minen. Nicht vergessen auch die für Minesweeper typischen Hilfszahlen zum Lösen in das Feld einzutragen. public MinesweeperFeld(int breite, int höhe, int anzahlMinen) { ... } Hier ein paar sondierende Methoden: public int gibBreite() { ... } public int gibHöhe() { ... } public int gibMinenAnzahl() { ... } Und zu guter letzt eine Methode, mit deren Hilfe man den Inhalt des Feldes für beliebige Oberflächen abfragen kann. Die Rückgabewerte bei int wären dann -1 für eine Mine, 0 für ein freies Feld und 1 bis 8 für die Hilfszahlen. public int gibFeld(int breite, int höhe) { ... } Zitieren
TheMacuser Geschrieben 12. Juli 2009 Autor Geschrieben 12. Juli 2009 Danke für die guten Tipps! Ich werde wohl das Konzept nochmal überdenken müssen! @JasonDelife: Danke für den Tipp mit dem Buch sowas suche ich schon die ganze Zeit! Werde mir wohl erstmal das Buch durchlesen bevor ich weitermache. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.