Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [ Java ] Campo Minato Crash

    Salve a tutti, sto provando a creare il gioco del Campo Minato in java ma ho riscontrato dei problemi.
    Ho scritto solo la prima parte del codice. Dando in imput le dimensioni del campo di gioco (nxm) e il numero di mine, il costruttore crea:
    - una matrice di interi (board) che contiene le mine (generate casulamente tramite random)
    - una matrice di stringhe (boardString) che verrà stampata in ogni fase del gioco e che inizialmente viene inizializzata con spazi vuoti.

    Ho fatto una prova per vedere se i metodi iniziali funzionano ma eclipse non da nessun output e va in crash. Ringrazio in anticipo tutti per le risposte.

    codice:
    public class CampoMinato {
        
        private int[][] board;
        private String[][] boardString;
        private int m, n, mine;
        
        public CampoMinato(int m, int n, int mine) {
            this.m = m;
            this.n = n;
            this.mine = mine;
            board = new int[n][m];
            boardString = new String[n][m];
            int k=0;
            while (k<mine) {
                int x = (int)Math.random() * n;
                int y = (int)Math.random() * m;
                if (board[x][y]==0) {
                    board[x][y] = -1;
                    k++;
                }
            }    
            for (int i=0;i<n;i++) {
                for (int j=0;j<m;j++) {
                    boardString[i][j] = " ";
                }
            }
        }
        
        
        
        public String toString() {
            String newString = "";
            for (int i=0;i<n;i++) {
                newString += "|";
                for (int j=0;j<m;j++) {
                    newString += boardString[i][j] + "|";
                }
                newString += "\n";
            }
            return newString;
        }
        
        
        
        public static void main (String[] args) {
            CampoMinato c = new CampoMinato(6, 6, 4);
            System.out.println(c.toString());
            
        }
        
    }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Cosa vuol dire "va in crash"?
    Che Eclipse si chiude di brutto? Dubito...
    Che viene lanciata un'eccezione? Se sì... quale eccezione? Dovresti riportare esattamente l'informazione (stackTrace completo dell'eccezione), altrimenti non ti si può dire nulla.

    Ad ogni modo, devi rivedere la generazione casuale delle posizioni. Quel codice non va bene.

    Math.random() restituisce un numero double compreso fra 0.0 (incluso) e 1.0 (escluso).
    Il tuo scopo è ottenere un valore casuale compreso fra 0 (incluso) e N (escluso). Hai due possibilità:

    1) Facile (uso la classe Random):
    codice:
    Random r = new Random();
    ...
    while(k < mine) {
       int x = r.nextInt( n );   // Ottieni un numero fra 0 e N
       ...
    }

    2) Più "complesso" ( Uso Math.random() ):
    codice:
    while(k < mine) {
       int x = ((int) (Math.random() * 65000)) % n;
       ...
    }

    Non ho guardato il resto del codice, ma secondo me va in "loop infinito" per questo.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Avavi ragione, l'errore era nel random. Grazie mille!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.