Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Laiminator1992

Frischling

  • »Laiminator1992« ist der Autor dieses Themas

Beiträge: 2

Beruf: Systeminformatiker [3.Ausbildungsjahr]

  • Private Nachricht senden

1

24.04.2012, 09:45

Zufallsmap erzeugen [Java]

Guten Tag liebe Forengemeinde,

ich bin momentan dabei eine Zufallsmap zu erzeugen. Die Bilder entnehme ich einem selbst zusammengefügten Bild und lese dann nur den Teil aus der eingesetzt werden soll. Nur momentan zeigt mein JFrame gar nichts mehr an...
Hier die Hauptklasse:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.Date;

import javax.swing.JFrame;
import javax.swing.JPanel;
 
public class Rpg extends JPanel
{
  private Map map;
  private InputController steuerung;
  private Hero hero;
  private double deltaTime;
  
  public static void main(String arg[])
  {
    Rpg rpg = new Rpg();
  }
  
  public Rpg()
  {
    // Wir erstellen ein neues Frame, in dem wir 
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(640,640);
    frame.setTitle("RPG von Lajos, Maurice, Mario und Kai");
    frame.setVisible(true);
    frame.add(this);
    
    setFocusable(true); // Wichtig, damit der Fokus auf unserem Panel liegt und somit unser InputController angesprochen wird
    
    map = new Map("map.jpg");
    steuerung = new InputController();
    addKeyListener(steuerung);
    hero = new Hero(50, 50);
    
    double lastTime = new Date().getTime();
    
    while(true)
    {
        // deltaTime ist lediglich der Zeitunterschied seit jetzt und dem letzten Frame, da getTime die Zeit in Millisekunden holt, teile ich noch durch 1000, dann haben wir Sekunden
        deltaTime = (new Date().getTime() - lastTime) / 1000;
        lastTime = new Date().getTime();
        
        repaint(); // ruft paintComponent-Methode auf auf
        
        try
        {
            Thread.sleep(30);
        } catch (InterruptedException e1) {}
    }
  }
  
  class WindowListener extends WindowAdapter
  {
    public void windowClosing(WindowEvent e)
    {
        System.exit(0);
    }
  }
  
  // Ruft unsere beiden Hauptmethoden auf, wird von der repaint-Methode unseres Panels aufgerufen
  public void paintComponent(Graphics pG){
    update();
    draw(pG);
  }
  
  // Update-Methode, zuständig für die Spielelogik
  public void update()
  {
    hero.moveing = false;
    if(steuerung.Hoch)
    {
        hero.direction = 3;
        // Beispiel für die Anwendung der deltaTime: der Held bewegt sich so um hero.moveSpeed (hab ich mal auf 100 festgelegt) pro Sekunde
        hero.y -= hero.moveSpeed * deltaTime;
        hero.moveing = true;
    }
    if(steuerung.Runter)
    {
        hero.direction = 0;
        hero.y += hero.moveSpeed * deltaTime;
        hero.moveing = true;
    }
    if(steuerung.Links)
    {
        hero.direction = 1;
        hero.x -= hero.moveSpeed * deltaTime;
        hero.moveing = true;
    }
    if(steuerung.Rechts)
    {
        hero.direction = 2;
        hero.x += hero.moveSpeed * deltaTime;
        hero.moveing = true;
    }
  }
  
  // Draw-Methode, zuständig für das darstellen deiner Objekte
  public void draw(Graphics g)
  {
    map.draw(g);
    hero.draw(g);
  }
}

Die Kartenklasse:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import java.awt.*;
import java.awt.event.*;
 
public class Map extends Frame
{
  Image map;
  Image sprite;
  
  private renderMap render;
  
  public int mapSize_x=20;
  public int mapSize_y=20;
  private int x=1;
  private int y=1;
  public int[][] tiles; // Array, das die Nummern der Tiles speichert

  public Map(String Pmap)
  {
    render = new renderMap();
    map = getToolkit().getImage("map.jpg");
    sprite = getToolkit().getImage("Tileset.png");
    tiles = new int[mapSize_x][mapSize_y];
    tiles[mapSize_x][mapSize_y]=(int)(Math.random()*6);
  }

  public void draw(Graphics g)
  {
    g.drawImage(map, 0, 0, this);
    for(int i=0; i<639; i=i+32)
    {
    for(int j=0; j<639; j=j+32)
    {
        g.drawImage(sprite, i, j, i+32, j+32, render.sx1, render.sy1, render.sx2, render.sy2, this);
    }
    }
  }
}

Und noch die Klasse in der ich festlege welches Bild gezeichnet wird:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import java.awt.*;
import java.awt.event.*;

public class renderMap extends Frame
{
  private Map map;
  
  public int sx1=0;
  public int sy1=0;
  public int sx2=32;
  public int sy2=32;

  public void sprite()
  {
    map = new Map("map.jpg");
    switch(map.tiles[map.mapSize_x][map.mapSize_y])
    {
        case 0: // Gras
        sx1=0;
        sy1=0;
        sx2=32;
        sy2=32;
        break;

        case 1: // Zaun
        sx1=0;
        sy1=32;
        sx2=32;
        sy2=64;
        break;

        case 2: // Pfähle
        sx1=0;
        sy1=64;
        sx2=32;
        sy2=96;
        break;

        case 3: // Nadelbaum
        sx1=0;
        sy1=64;
        sx2=32;
        sy2=96;
        break;

        case 4: // Fruchtbaum
        sx1=32;
        sy1=0;
        sx2=64;
        sy2=32;
        break;

        case 5: // Innere Ecke rechts Höhle
        sx1=32;
        sy1=32;
        sx2=64;
        sy2=64;
        break;

        case 6: // Innere Ecke links Höhle
        sx1=32;
        sy1=64;
        sx2=64;
        sy2=96;
        break;

        default:
        sx1=0;
        sy1=0;
        sx2=32;
        sy2=32;
        break;
    }
  }
}


Ich bin dankbar für jede Hilfe.
Gruß,
Laiminator

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Laiminator1992« (24.04.2012, 10:37)


Sp3iky

Treue Seele

Beiträge: 232

Beruf: Entwicklungsingenieur

  • Private Nachricht senden

2

24.04.2012, 11:46

Und wieder mal leider eine Themenbeschreibung "geht nicht" mit hunderten Zeilen Quelltext :S

Damit wir dir helfen können, muss du selbst Vorarbeit leisten. Hast du geschaut, was du als letztes gemacht hast, was die Veränderung hervorgerufen hat? Hast du den Debugger genutzt, um zu schauen, ob die Zustände der Variablen deinem gewünschten Ziel entsprechen und hast du geschaut, ob die relevanten Funktionen überhaupt aufgerufen werden?

Wenn du den Fehler eingrenzen, aber nicht beheben kannst, können wir dir mit einer spezifischen Fehlerbeschreibung samt kleinem Codeausschnitt sehr viel mehr helfen.

Wirago

Alter Hase

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

3

24.04.2012, 11:54

beim schnell drüber gucken sind mir mal 2 sachen aufgefallen:

1) die methode public void sprite() (aus der renderMap Klasse) wird eigentlich nirgends aufgerufen
2) deklarierst du 2 mal private Map map; (einmal in der klasse rpg und einmal in der klasse renderMap). sicher dass du das so willst?

und zufälle gibts in der programmierung nicht ;)

Laiminator1992

Frischling

  • »Laiminator1992« ist der Autor dieses Themas

Beiträge: 2

Beruf: Systeminformatiker [3.Ausbildungsjahr]

  • Private Nachricht senden

4

24.04.2012, 12:19

Also ich habe es schon mit einem festen Wert anstatt der Random-Funktion versucht.
Ebenfalls kein Bild, ich denke mal der Fehler liegt irgendwo dadrin, dass er aus der renderMap-Klasse keine Werte bekommt zum Zeichnen deswegen hatte ich auch schon sx1,sx2,sy1,sy2 feste Werte zugeteilt aber ebenfalls kein Erfolg. Also denk ich mal das irgendwo was beim Zeichnen falsch läuft.

Edit:
Okay habe meinen Fehler denke gefunden, wie du schon sagtest die Sprite-Klasse wird nirgends aufgerufen.
So nun habe ich sagen wir mal so versucht den Fehler zu beheben aber naja da durch sind Compiler-Fehler entstanden.
Ich habe einfach nur geändert public void sprite() in public renderMap mit den Rückgabewerten (sx1,sy1,sx2,sy2).
Hier die Compiler-Fehler:

Zitat

Compiliere G:\Ausbildung\3.Ausbildungsjahr\Schule\LF9-Java\Java Schulprojekt\Map.java mit Java-Compiler
G:\Ausbildung\3.Ausbildungsjahr\Schule\LF9-Java\Java Schulprojekt\Map.java:19:28: error: cannot find symbol
render = new renderMap(sx1, sy1, sx2, sy2);
^
symbol: variable sx1
location: class Map
G:\Ausbildung\3.Ausbildungsjahr\Schule\LF9-Java\Java Schulprojekt\Map.java:19:33: error: cannot find symbol
render = new renderMap(sx1, sy1, sx2, sy2);
^
symbol: variable sy1
location: class Map
G:\Ausbildung\3.Ausbildungsjahr\Schule\LF9-Java\Java Schulprojekt\Map.java:19:38: error: cannot find symbol
render = new renderMap(sx1, sy1, sx2, sy2);
^
symbol: variable sx2
location: class Map
G:\Ausbildung\3.Ausbildungsjahr\Schule\LF9-Java\Java Schulprojekt\Map.java:19:43: error: cannot find symbol
render = new renderMap(sx1, sy1, sx2, sy2);
^
symbol: variable sy2
location: class Map
G:\Ausbildung\3.Ausbildungsjahr\Schule\LF9-Java\Java Schulprojekt\Map.java:33:53: error: cannot find symbol
g.drawImage(sprite, i, j, i+32, j+32, render.sx1, render.sy1, render.sx2, render.sy2, this);
^
symbol: variable sx1
location: variable render of type renderMap
G:\Ausbildung\3.Ausbildungsjahr\Schule\LF9-Java\Java Schulprojekt\Map.java:33:65: error: cannot find symbol
g.drawImage(sprite, i, j, i+32, j+32, render.sx1, render.sy1, render.sx2, render.sy2, this);
^
symbol: variable sy1
location: variable render of type renderMap
G:\Ausbildung\3.Ausbildungsjahr\Schule\LF9-Java\Java Schulprojekt\Map.java:33:77: error: cannot find symbol
g.drawImage(sprite, i, j, i+32, j+32, render.sx1, render.sy1, render.sx2, render.sy2, this);
^
symbol: variable sx2
location: variable render of type renderMap
G:\Ausbildung\3.Ausbildungsjahr\Schule\LF9-Java\Java Schulprojekt\Map.java:33:89: error: cannot find symbol
g.drawImage(sprite, i, j, i+32, j+32, render.sx1, render.sy1, render.sx2, render.sy2, this);
^
symbol: variable sy2
location: variable render of type renderMap
8 errors

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Laiminator1992« (24.04.2012, 12:34)


Werbeanzeige