Matrix übergeben

wessi86

Mitglied
Hallo,
ich möchte ein kleines Rollenspiel als Applet programmieren. Dazu habe ich zunächst 3 Klassen
erzeugt. Eine, welches das Applet initialisiert und die Methoden überschreibt, eine, welches das Spielfeld erzeugt(Maze-Methode) und die dritte, welche das Spielfeld zeichnen(Draw-Methode) soll.
Die Maze-Methode erzeugt zunächst eine 2400*1800-Matrix, befüllt sie mit 0en und dann einen Bereich in der Matrix mit 1en. Die 1en sollen einen Raum darstellen. Nun soll die Draw-Methode die Matrix an jeder 20. Stelle überprüfen (die PNG-Dateien haben eine Größe von 20*20px) und bei jeder 0 ein Image zeichnen, die 1en sollen frei bleiben.
Wenn ich das direkt in die Paintmethode des Applets schreibe, klappt es, wenn ich es ind die Draw-Methode auslagern möchte allerdings nicht. Ich vermute, die Matrix wird nicht korrekt übergeben.

Hier mal die wichtigsten Zeilen Code, Paint-Methode nicht ausgelagtert

Applet
Java:
private int[][] createdMaze = new int[2400][1800];
Maze maze = new Maze();

    @Override
    public final void init() {
        setSize(800, 600);
        setBackground(Color.BLACK);
        maze.createMaze();
        [...]
        setMaze();
    }

    public void setMaze() {
        createdMaze = maze.returnMaze();
    }

    @Override
    public final void paint(Graphics g) {       

        g.drawImage(background, -800, -600, this);
        for (int i = 0; i < 2400; i+=20) {
            for (int j = 0; j < 1800; j+=20) {
                if (createdMaze[i][j] == 0) {
                    g.drawImage(wall, i - 800, j - 600, this);
                }
            }
        }
    }

Maze
Java:
    public int[][] maze = new int[2400][1800];

    public void fillMaze() {
        for (int i = 0; i < 2400; i++) {
            for (int j = 0; j < 1800; j++) {
                maze[i][j] = 0;
            }
        }
    }

    public void createRoom(int x1, int x2, int y1, int y2) {
        for (int i = x1; i < x2; i++) {
            for (int j = y1; j < y2; j++) {
                maze[i][j] = 1;
            }
        }
    }

    public void createMaze() {
        fillMaze();
        createRoom(840, 1200, 640, 1000);
    }

    public int[][] returnMaze() {
        return maze;
    }

Und hier der Code, ausgelagert
Applet
Java:
    @Override
    public final void paint(Graphics g) {  
        drawMaze.setMaze();     
        drawMaze.drawMaze(background, wall, bar, g);
    }

Draw
Java:
    Maze maze = new Maze();
    private int[][] createdMaze = new int[2400][1800];
    
    public void setMaze() {
        createdMaze = maze.returnMaze();
    }

    public void drawMaze(Image background, Image wall, Image bar, Graphics g) {

        g.drawImage(background, -800, -600, null);
        for (int i = 0; i < 2400; i+=20) {
            for (int j = 0; j < 1800; j+=20) {
                if (maze.returnMaze()[i][j] == 0) {
                    g.drawImage(wall, i - 800, j - 600, null);
                }
            }
        }
    }

Für Hilfe wäre ich sehr dankbar,
Christian
 

netzBone

Mitglied
hi,

liegt es in der Zeile 13 der draw Methode ?
Teste mal ob er es nimmt wenn du die maze mit protected initialisierst und direkt die maze
aufrufst in der Zeile !

Der Zweck der set Methode ist mir auch bissl unklar, bzw. der Einsatz der Methode...

LG

Tobi
 

T7V

Aktives Mitglied
Java:
private int[][] createdMaze; //Aenderung
    
    public void setMaze() {
        createdMaze = maze.returnMaze();
    }

Versuch es mal so.

Edit:
Du erstellst doch in maze die Matrix, die du dann ahben willst, oder?
createdMaze = maze.returnMaze(); sollte eigentlich nicht funktionieren, wenn createdMaze bereits initialisiert ist.
 
Zuletzt bearbeitet:

wessi86

Mitglied
hi,

liegt es in der Zeile 13 der draw Methode ?
Teste mal ob er es nimmt wenn du die maze mit protected initialisierst und direkt die maze
aufrufst in der Zeile !

Der Zweck der set Methode ist mir auch bissl unklar, bzw. der Einsatz der Methode...

LG

Tobi

Habe mich in der Zeile 13 der Draw-Methode vertan, sollte heißen:
Java:
if (createdMaze[i][j] == 0) {
                    g.drawImage(wall, i - 800, j - 600, null);
                }

Teste mal ob er es nimmt wenn du die maze mit protected initialisierst und direkt die maze
aufrufst in der Zeile !
Das versteh ich nicht so ganz... :(


Java:
private int[][] createdMaze; //Aenderung
    
    public void setMaze() {
        createdMaze = maze.returnMaze();
    }

Versuch es mal so.

Edit:
Du erstellst doch in maze die Matrix, die du dann ahben willst, oder?
createdMaze = maze.returnMaze(); sollte eigentlich nicht funktionieren, wenn createdMaze bereits initialisiert ist.

Der Code oben hat keine Änderung bewirkt.
Also ja, die Maze wird in der Matrix-Methode erzeugt und im init-Prozess von dem Applet aufgerufen.
Dann möchte ich, dass die Draw-Methode diese Matrix übernimmt und anhand derer das Spielfeld zeichnet. Die Methoden der Draw-Klasse werden dann in der Paint-Methode des Applets aufgerufen.
Ich dachte mir das so (Alles in der Applet-Klasse):

1. Matrix erzeugen
Java:
    @Override
    public final void init() {
        [...]
        maze.createMaze();
        [...]
    }

2. Matrix an Draw-Klasse übergeben
Java:
    @Override
    public final void paint(Graphics g) {       
        drawMaze.setMaze();
        ...
3. Spielfeld zeichnen
Java:
        ...
        drawMaze.drawMaze(background, wall, bar, g);
    }

Edit: Also ich verstehe einfach nicht, wieso ich die Matrix an die Applet-Klasse übergeben kann, aber nicht and die Draw-Klasse. Wenn ich das nicht auslagere funktioniert es ja.
Meines Erachtens ist das doch das gleich in grün.
 
Zuletzt bearbeitet:

netzBone

Mitglied
Verstehe dich so das du die paint() Methode von der Klasse Applet in die Maze Klasse auslagern möchtest und halt umbenennst in draw maze.

Wie wärs du erstellst dir in der Maze Klasse eine startGame() Methode, die wiederum
die Initialisierung und den Draw erledigt.

Dann in der Applet Klasse im Kontruktor gleich die Maze übergibst und startGame aufrufst mit init usw.

Kann dir im aktuellen Code grad nicht weiterhelfen...

Aber das Projekt ist ja noch "jung" evtl. hilft dir die Vorgehensweise.
 

wessi86

Mitglied
Verstehe dich so das du die paint() Methode von der Klasse Applet in die Maze Klasse auslagern möchtest und halt umbenennst in draw maze.

Wie wärs du erstellst dir in der Maze Klasse eine startGame() Methode, die wiederum
die Initialisierung und den Draw erledigt.

Dann in der Applet Klasse im Kontruktor gleich die Maze übergibst und startGame aufrufst mit init usw.

Kann dir im aktuellen Code grad nicht weiterhelfen...

Aber das Projekt ist ja noch "jung" evtl. hilft dir die Vorgehensweise.

Ich glaube, du hast mich etwas falsch verstanden oder ich habe mich unklar ausgedrückt. Ich möchte(muss) nach dem Model-View-Controller-Konzept arbeiten.

Bisher sieht das dann so aus:
1. Model: Leer
2. View: Draw-Klasse
3. Controller: Applet, Maze-Klasse
Draw ist also eine eigene Klasse, die eine vom Controller erstellte Matrix auslesen und verarbeiten soll.
1. Das Applet ruft die Maze-Klasse auf, die eine Matrix erzeugt.
2. Das Applet ruft die setMaze-Methode der Draw-Klasse auf, wo dann die eben erzeugte Matrix übergeben werden sollte.
3. Das Applet ruft die drawMaze-Methode der Draw-Klasse auf, die anhand der eben erzeugten Matrix das Spielfeld zeichnen soll. Offensichtlich enthält die Matrix allerdings nur 0en, da das komplette Spielfeld mit den Bildern überschrieben wird.

Ich hoffe, so war es etwas verständlicher.

LG
 

netzBone

Mitglied
Ok MVC ist sehr gut.
Dann kann ich nur noch ne Vermutung abgeben.
Die erstellte Matrix muss in der draw Klasse aufgerufen werden, d.h. eine get Methode auf
die Matrix ist notwendig, ob du das Objekt holst oder ein "int[][]" kannst ja selbst definieren.
Aufjedenfall ist die Matrix gekapselt.
 

wessi86

Mitglied
Ok MVC ist sehr gut.
Dann kann ich nur noch ne Vermutung abgeben.
Die erstellte Matrix muss in der draw Klasse aufgerufen werden, d.h. eine get Methode auf
die Matrix ist notwendig, ob du das Objekt holst oder ein "int[][]" kannst ja selbst definieren.
Aufjedenfall ist die Matrix gekapselt.

Das versuche ich ja. In der Draw-Klasse hab ich die Methode "setMaze".
Code:
public void setMaze() {
        createdMaze = maze.returnMaze();
    }
Und anhalt des "createdMaze" soll dann gezeichnet werden:
Code:
g.drawImage(background, -800, -600, null);
        for (int i = 0; i < 2400; i+=20) {
            for (int j = 0; j < 1800; j+=20) {
                if (createdMaze[i][j] == 0) {
                    g.drawImage(wall, i - 800, j - 600, null);
                }
            }
        }
        g.drawImage(bar, 0, 540, null);
    }
Nur zeichnet der das background-Image komplett über...

LG

Edit: Wenn ich in der for-schleife mit maze.returnMaze()[j] arbeite, funktioniert es ebenfalls nicht.

Edit 2: Ok, hab es jetzt etwas anders gelöst.
Und zwar übergebe ich der drawMaze-Methode der Draw-Klasse von dem Applet aus die Matrix.
Also:
Draw-Klasse (Zeile 1 und 5)
Java:
    public void drawMaze(Image background, Image wall, Image bar, int[][] maze, Graphics g) {
        g.drawImage(background, -800, -600, null);
        for (int i = 0; i < 2400; i+=20) {
            for (int j = 0; j < 1800; j+=20) {
                if (maze[i][j] == 0) {
                    g.drawImage(wall, i - 800, j - 600, null);
                }
            }
        }
        g.drawImage(bar, 0, 540, null);
    }

In der Applet-Klasse sieht das dann dementsprechend so aus:
Java:
    public void setMaze() {
        createdMaze = maze.returnMaze();
    }
    
    @Override
    public final void paint(Graphics g) {       
        setMaze();
        drawMaze.drawMaze(background, wall, bar, createdMaze, g);
    }

Allerdings hätte ich die setMaze-Methode lieber in der Draw-Klasse, also wenn jemand noch eine Idee hat...

LG
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
F matrix werte übergeben Java Basics - Anfänger-Themen 5
I matrix aufgabe Java Basics - Anfänger-Themen 22
L Zweidimensionaler Array; n x m - Matrix überprüfuen Java Basics - Anfänger-Themen 35
C Matrix mit Array ausgeben Java Basics - Anfänger-Themen 6
idontknow707 Matrix nach z.B. Variable durchsuchen Java Basics - Anfänger-Themen 4
F Adjunkte Matrix erstellen Java Basics - Anfänger-Themen 3
M Matrix Java Basics - Anfänger-Themen 3
F Matrix Multiplikation Java Basics - Anfänger-Themen 3
B Dünn besetzte Matrix Java Basics - Anfänger-Themen 7
Al3xand3r01 Matrix, Nachbarelemente Java Basics - Anfänger-Themen 16
E Rückwärtsmultiplikation einer invertierten matrix Java Basics - Anfänger-Themen 2
U Dreiecks-Matrix mit Array Java Basics - Anfänger-Themen 3
Z Matrix Klasse mit Mehrdimensionalen Array (Addition, Multiplikation, to String) Java Basics - Anfänger-Themen 57
E 2D Array - char durch die Matrix "wandern" lassen Java Basics - Anfänger-Themen 7
M Matrix auf 4 Elemente untersuchen mit offenen Enden Java Basics - Anfänger-Themen 8
B Diskrete Faltung (Matrix) Randfälle Java Basics - Anfänger-Themen 8
M Matrix Elemente vergleichen Java Basics - Anfänger-Themen 11
N Quadratische Matrix inkl Summe Java Basics - Anfänger-Themen 8
J Methoden Moving a n integer matrix Java Basics - Anfänger-Themen 3
D Methoden Matrix Multiplikation Java Basics - Anfänger-Themen 27
O Matrix, Vektor Java Basics - Anfänger-Themen 9
H 2D Array, Symmetrische Matrix Java Basics - Anfänger-Themen 12
S Matrix spaltenweise befüllen Java Basics - Anfänger-Themen 1
T Zufällige Matrix in neue Matrix schreiben Java Basics - Anfänger-Themen 6
C Matrix-Werte werden nicht wie erwartet ausgegeben Java Basics - Anfänger-Themen 7
C Matrix erstellen Spaltensumme, Zeilensumme, Diagonale Java Basics - Anfänger-Themen 1
S Methoden Transponierte Matrix Java Basics - Anfänger-Themen 3
N Vererbung Submatrix mit Verweis auf Matrix erstellen Java Basics - Anfänger-Themen 9
J Matrix erstellen Java Java Basics - Anfänger-Themen 7
B Transponiertes Matrix Java Basics - Anfänger-Themen 12
J Überprüfen, ob eine 2D Matrix ein Baum ist Java Basics - Anfänger-Themen 5
C Matrix transponieren - Hilfe Java Basics - Anfänger-Themen 1
D Ausgabe einer Matrix mit System.out.println Java Basics - Anfänger-Themen 6
T Art 4 Felder Matrix Memory Java Basics - Anfänger-Themen 2
U Ist diese Methode zur Matrix Vektor Multiplikation korrekt ? Java Basics - Anfänger-Themen 5
L Matrix(Array) minimieren... Java Basics - Anfänger-Themen 9
E Matrix mit Vektor multiplizieren Java Basics - Anfänger-Themen 7
S eingegebene Matrix anzeigen Java Basics - Anfänger-Themen 4
J Matrix für Schachbrett Java Basics - Anfänger-Themen 6
G tga Datei lesen und in eine matrix umwandeln Java Basics - Anfänger-Themen 1
G Bilddaten in Matrix umwandeln Java Basics - Anfänger-Themen 1
T Eine String Matrix erstellen die eine boolean Funtion verwendet Java Basics - Anfänger-Themen 10
O Matrix Multiplizieren Java Basics - Anfänger-Themen 4
S LWJGL - Matrix vom Matrixstack laden Java Basics - Anfänger-Themen 3
T Matrix auf Symmetrie überprüfen Java Basics - Anfänger-Themen 6
V Matrix Transponieren Java Basics - Anfänger-Themen 3
V Methoden Matrix als 1D Array mit Werten füllen Java Basics - Anfänger-Themen 12
W Zweidimensionale Arrays als Matrix ausgeben Java Basics - Anfänger-Themen 8
R Matrix-Vektor-Multiplikation Java Basics - Anfänger-Themen 13
O Matrix ordnen Java Basics - Anfänger-Themen 4
M Symmetrische Matrix Java Basics - Anfänger-Themen 2
W Methoden Rang von einer Matrix mit Gauss Java Basics - Anfänger-Themen 0
U Matrix Subtrahieren Java Basics - Anfänger-Themen 12
E Input/Output convert string to two dimensional char and output = matrix Java Basics - Anfänger-Themen 2
A daten vom 1d array in 2d matrix speichern Java Basics - Anfänger-Themen 3
I Matrix überprüfen Java Basics - Anfänger-Themen 8
Z Matrix mit Vektor multiplizieren Java Basics - Anfänger-Themen 13
K Methoden Einlesen einer unbegrenzten Matrix über Konsole Java Basics - Anfänger-Themen 6
O Einlesen einer Matrix von der Console Java Basics - Anfänger-Themen 18
N Matrix/Vektoren Java Basics - Anfänger-Themen 3
N Matrix Java Basics - Anfänger-Themen 14
T Methode, die eine 2 dimensionale Matrix kopiert. Java Basics - Anfänger-Themen 16
J Matrix Java Java Basics - Anfänger-Themen 3
D 2 mehrdimensionale Matrix einlesen Java Basics - Anfänger-Themen 2
A N*N Matrix Determinante berechnen Java Basics - Anfänger-Themen 47
K Quadratische Matrix um 90° drehen Java Basics - Anfänger-Themen 5
C Programm zur Berechnung der Spur einer Matrix Java Basics - Anfänger-Themen 4
B Zeilenumbruch (zweidim. Matrix) Java Basics - Anfänger-Themen 2
O Java Matrix mal Matrix über while Schleife... Java Basics - Anfänger-Themen 10
O Transponieren einer Matrix per While-Schleife Java Basics - Anfänger-Themen 3
M Matrix - Probelm Java Basics - Anfänger-Themen 7
O 2D Matrix befüllen mit geraden Zahlen!? Java Basics - Anfänger-Themen 14
J Java Matrix befüllen Java Basics - Anfänger-Themen 5
M Matrix Matrix Multiplikation Java Basics - Anfänger-Themen 6
F Matrix Java Basics - Anfänger-Themen 11
E Array als Matrix Java Basics - Anfänger-Themen 21
G OOP Parameter Matrix Java Basics - Anfänger-Themen 2
N Matrix Klasse Java Basics - Anfänger-Themen 4
B Maske an eine Matrix anpassen Java Basics - Anfänger-Themen 5
T Matrix transponieren Java Basics - Anfänger-Themen 17
W Eine Methode schreiben, ob eine Matrix eine Diagonalmatrix ist.? Java Basics - Anfänger-Themen 3
M String Datei in Float-Matrix umwandeln Java Basics - Anfänger-Themen 8
D Problem: Werte eine Matrix vergleichen! Java Basics - Anfänger-Themen 5
B Matrix Java Basics - Anfänger-Themen 2
Semox Matrix multiplizieren Java Basics - Anfänger-Themen 4
N Matrix an toString Java Basics - Anfänger-Themen 7
C Diagonale in einem NxN Matrix Java Basics - Anfänger-Themen 6
F Einträgen von Matrix zu sotieren Java Basics - Anfänger-Themen 2
D JUnit auf Matrix anwenden Java Basics - Anfänger-Themen 5
J Spezielle Matrix ausgeben ! Java Basics - Anfänger-Themen 8
S Problem bei Matrix Addition Java Basics - Anfänger-Themen 5
M Hauptdiagonale Matrix berechnen Java Basics - Anfänger-Themen 6
M Klassenerstellung für Matrix mit Rechenopperationen Java Basics - Anfänger-Themen 42
D Matrix .bat datei erstellen und öffnen Java Basics - Anfänger-Themen 2
J Matrix ausgeben Java Basics - Anfänger-Themen 9
N Matrix Matrix Produkt Java Basics - Anfänger-Themen 7
N prüfe ob etwas in einer Matrix steht... Java Basics - Anfänger-Themen 14
L rechtecke zeichnen anhand von matrix Java Basics - Anfänger-Themen 27
J Matrix aus Datei einlesen mit StreamTokenizer Java Basics - Anfänger-Themen 3
K Transponiere Matrix Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben