Membuat labirin menggunakan matriks (JAVA)

Jadi saya mencoba membuat labirin tunggal (Tanpa generator) di Java, dan saya menemui hambatan. kode saat ini yang saya miliki akan membuat labirin, dan membuat jframe, tetapi tidak akan mewarnainya... adakah cara agar pewarnaannya berfungsi??

    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;
         }
       }  
    }
    }
    }

Bantuan apa pun akan berhasil. Terima kasih!


person CSanto98    schedule 10.05.2016    source sumber
comment
Apakah Anda menambahkan persegi panjang Anda ke Bingkai?   -  person YCF_L    schedule 10.05.2016
comment
Program swing harus mengesampingkan paintComponent() dan bukannya mengesampingkan paint().—Melukis sesuai AWT dan Swing: Metode Cat.   -  person trashgod    schedule 10.05.2016
comment
Pertimbangkan juga pendekatan yang diperiksa di sini.   -  person trashgod    schedule 10.05.2016


Jawaban (1)


1-)Jangan membuat Kelas di Switch case, ini bukan praktik yang baik.

2-)Jika Kelas tidak mewarisi JComponent maka Kelas tidak akan dapat mengganti metode paint atau paintComponent karena tidak memilikinya.

3-) Huruf besar pada huruf pertama nama kelas, dan gunakan nama yang bermakna.

4-) Ubah kode Anda seperti berikut:

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;
            }
        }
    }
}
}
person TiyebM    schedule 10.05.2016
comment
Terima kasih! perbaikan yang Anda lakukan sungguh luar biasa! namun, metode setColor hanya mewarnai bagian luarnya, bukan bagian dalamnya, jadi saya akan memperbaikinya... - person CSanto98; 12.05.2016
comment
@ CSanto98 itu karena menggunakan drawRect bukannya fillRect, saya telah memperbaruinya. - person TiyebM; 12.05.2016
comment
Itu bagus! terima kasih atas perbaikannya. Aku jadi gila saat mencoba memikirkan hal ini. - person CSanto98; 16.05.2016