2016-05-10 11 views
1

Also versuche ich ein Single-Labyrinth (keine Generatoren) In Java, und ich habe eine Straßensperre getroffen. der aktuelle code, den ich habe, wird ein Labyrinth bilden und ein Jframe machen, aber es wird es nicht färben ... gibt es einen Weg, um die Färbung arbeiten zu lassen?Erstellen eines Labyrinths mit Matrizen (JAVA)

import java.awt.*; 
    import javax.swing.*; 
    import java.lang.*; 

    public class ayy{ 

    public static void main(String [] args){ 

    JFrame frame = new JFrame("Maze"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.pack(); 
    frame.setSize(1000,1000); 
    frame.setVisible(true); 

    int width = 1; 
    int height = 1; 

    int [][] map= { 
      {0,0,0,0,0,0,0,0,0,0,}, 
      {0,0,0,0,0,0,0,0,0,0,}, 
      {2,1,1,1,0,0,0,0,0,0,}, 
      {0,0,0,1,0,0,0,1,1,2,}, 
      {0,0,0,1,0,0,0,1,0,0,}, 
      {0,0,0,1,0,0,0,1,0,0,}, 
      {0,0,0,1,1,1,1,1,0,0,}, 
      {0,0,0,0,0,0,0,0,0,0,}, 
      {0,0,0,0,0,0,0,0,0,0,}, 
      {0,0,0,0,0,0,0,0,0,0,} 
      }; 

    for(int i=0;i<map.length;i++){ 
     for(int j=0;j<map.length;j++){ 
     switch(map[i][j]){ 
      case 0: 
      class rectangle{ 

     public void paint(Graphics g){ 
     g.drawRect(1,1,1,1); 
     g.setColor(Color.red); 
    } 
    } 
    break; 
    case 1: 
    class rectangle2{ 

     public void paint(Graphics g){ 
     g.drawRect(1,1,1,1); 
     g.setColor(Color.yellow); 
    } 
    }  break; 
    case 2: 
class rectangle3{ 

     public void paint(Graphics g){ 
     g.drawRect(1,1,1,1); 
     g.setColor(Color.blue); 
    } 
    }  break; 
     } 
     } 
    } 
    } 
    } 

Jede Hilfe wird tun Danke!

+0

Haben Sie Ihre Rechtecke an den Rahmen hinzufügen? –

+1

"Swing-Programme sollten' paintComponent() 'überschreiben, anstatt' paint() '' zu überschreiben. "- [* Malen in AWT und Swing: Die Malmethoden *] (http://www.oracle.com/technetwork/java/ painting-140037.html # Rückrufe). – trashgod

+0

Betrachten Sie auch den hier untersuchten Ansatz (http://stackoverflow.com/q/11553461/230513). – trashgod

Antwort

1

1-) Erstellen Sie keine Klassen in Switch-Fällen, es ist keine gute Übung.

2-) Wenn die Klasse JComponent nicht erbt, kann sie die Methoden paint und paintComponent nicht überschreiben, da sie nicht über sie verfügt.

3-) Geben Sie den ersten Buchstaben der Klassennamen ein und verwenden Sie aussagekräftige Namen.

4-) Ändern Sie den Code wie folgt aus:

public class MazeApp extends JFrame { 

public static void main(String[] args) { 

    JFrame frame = new JFrame("Maze"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.pack(); 
    frame.setSize(1000, 1000); 
    Maze brd = new Maze(); 
    frame.add(brd); 
    frame.setVisible(true); 
} 
} 


class Maze extends JPanel { 

public Maze() { 
} 

protected void paintComponent(Graphics g) { 
    int width = 1; 
    int height = 1; 

    int[][] map = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, 
      { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, 
      { 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, }, 
      { 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, }, 
      { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, }, 
      { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, }, 
      { 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, }, 
      { 0, 0, 2, 0, 0, 2, 0, 0, 2, 0, }, 
      { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, }, 
      { 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, } }; 

    for (int i = 0; i < map.length; i++) { 
     for (int j = 0; j < map.length; j++) { 
      int factori = i * 50; 
      int factorj = j * 50; 
      switch (map[i][j]) { 
      case 0: { 
       g.setColor(Color.red); 
       g.fillRect(factori, factorj, 2, 2); 

      } 
       break; 
      case 1: { 
       g.setColor(Color.yellow); 
       g.fillRect(factori, factorj, 2, 2); 

      } 
       break; 
      case 2: { 
       g.setColor(Color.blue); 
       g.fillRect(factori, factorj, 2, 2); 

      } 
       break; 
      } 
     } 
    } 
} 
} 
+0

Danke! Die Korrekturen, die du gemacht hast, sind fantastisch! die setColor-Methode färbt jedoch nur das Äußere, nicht das Innere, also werde ich das beheben ... – CSanto98

+0

@ CSanto98, das wegen der Verwendung von 'drawRect' anstelle von' fillRect' verwendet wurde, habe ich entsprechend aktualisiert. – TiMr

+0

Es ist großartig! Danke für die Lösung. Ich wurde verrückt, um das herauszufinden. – CSanto98