Ciao ragazzi, ho un po di problemini nella creazione di un labirinto random.
Tralasciando la logica da usare che ovviamente non ancora completo, il disegno che viene fuori non combacia con la matrice che ottengo. Inoltre talvolta viene lanciata un eccezione, divisione per 0 e non capisco perché. Incollo il codice così magari lo provate
E' la prima volta che uso i metodi di Graphics e mi stanno facendo uscire di testa xD
codice:package jmaze; /** * @author Stefano Loris */ public class Start { public static void main(String[]args) { JFrameMaze maze = new JFrameMaze(); } }codice:package jmaze; import java.util.Random; /** * @author Stefano Loris */ public class JMaze { public int[][] createsMatrix() { //La matrice avrà dimensione random compresa tra 0 e 50. int rc; do { rc = (int) (Math.random()*20); }while((rc % 2) != 0); //Inizializzo la matrice int[][] matrix = new int[rc][rc]; //Creo la matrice Random random = new Random(); for(int i=0; i<matrix.length; i++) { for(int j=0; j<matrix[0].length; j++) { int n = 10; int scelta = random.nextInt(n); if(scelta >= 5) { matrix[i][j] = 1; } else { matrix[i][j] = 0; } } } //Stampo la matrice per fare debug for(int i=0; i<matrix.length; i++) { for(int j=0; j<matrix[0].length; j++) { System.out.print(matrix[i][j] + " "); } System.out.println(""); } return matrix; } }Grazie, per qualsiasi aiuto/consigliocodice:package jmaze; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel; /** * * @author Stefano Loris */ public class JFrameMaze extends JFrame { private JMaze jmaze; private MyJPanel jpanel; private int[][] lab; public JFrameMaze() { super("JMaze"); jmaze = new JMaze(); jpanel = new MyJPanel(); lab = jmaze.createsMatrix(); this.setContentPane(jpanel); this.setDefaultCloseOperation(EXIT_ON_CLOSE); Dimension d = new Dimension(600,600); this.setSize(d); this.toFront(); this.setLocationRelativeTo(null); this.setResizable(false); this.setVisible(true); } private class MyJPanel extends JPanel { @Override public void paintComponent(Graphics g) { super.paintComponent(g); Dimension r = getSize(); int dim = (int)(r.width/lab.length+2); //Dimensione cella g.clearRect(0, 0, dim*(lab.length+2), dim*(lab.length+2)); g.setPaintMode(); g.setColor(Color.RED); //Coloro il labirinto for(int i=0; i<lab.length; i++) { for(int j=0; j<lab[0].length; j++) { if(lab[i][j] == 1) { g.setColor(Color.RED); g.fillRect(i*dim,j*dim,dim,dim); } else { g.setColor(Color.WHITE); g.fillRect(i*dim,j*dim,dim,dim); } } } //Disegno griglia g.setColor(Color.BLACK); for (int i = 0; i <= lab.length + 2; i++) { g.drawLine(i * dim, 0, i * dim, dim * (lab.length + 2)); for (int j = 0; j <= lab[0].length + 2; j++) { g.drawLine(0, j * dim, dim * (lab.length + 2), j * dim); } } } } }
Ps: viene tagliato anche un pezzetto di labirinto sotto..


Rispondi quotando