Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

3 Schichten Modell

Empfohlene Antworten

Veröffentlicht

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

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.

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.w3c
  • com.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) {

    ...

}

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.