# Code seems long and confusing....need to simplify

• 12-26-2011, 05:57 AM
Danieldcc
Code seems long and confusing....need to simplify
Just wrote this code for minesweeper board....seems like there's a much easier way of doing it....need ideas

Code:

```public void startNewGame(int width, int height)     {         int rows = width;         int columns = height;         int[][] newGame = new int[width][height];         Random generator = new Random();         int mines = 10; // should be (width * height) * 0.1; 10% mines         int bomb = 8;         for (int i = 0; i < rows; i++) {           for (int j = 0; j < columns; j++) {               newGame[i][j] = 0;             }}         int count = mines;         while (count > 0)         {             int x = generator.nextInt(rows);             int y = generator.nextInt(columns);                         if(newGame[x][y] != bomb)             {                 newGame[x][y] = bomb;                 count--;                     if(x == 0 && y == 0)                     {                         if(newGame[x + 1][y] != bomb) newGame[x + 1][y]++;                         if(newGame[x][y + 1] != bomb) newGame[x][y + 1]++;                         if(newGame[x + 1][y + 1] != bomb) newGame[x + 1][y + 1]++;                     }                     else if(x == (rows - 1) && y == 0)                     {                         if(newGame[x - 1][y] != bomb) newGame[x - 1][y]++;                         if(newGame[x][y + 1] != bomb) newGame[x][y + 1]++;                         if(newGame[x - 1][y + 1] != bomb) newGame[x - 1][y + 1]++;                     }                     else if(x == 0 && y == (columns - 1))                     {                         if(newGame[x][y - 1] != bomb) newGame[x][y - 1]++;                         if(newGame[x + 1][y] != bomb) newGame[x + 1][y]++;                         if(newGame[x + 1][y - 1] != bomb) newGame[x + 1][y - 1]++;                     }                     else if(x == (rows - 1) && y == (columns - 1))                     {                         if(newGame[x - 1][y] != bomb) newGame[x - 1][y]++;                         if(newGame[x][y - 1] != bomb) newGame[x][y - 1]++;                         if(newGame[x - 1][y - 1] != bomb) newGame[x - 1][y - 1]++;                     }                     else if(x == 0)                     {                         if(newGame[x + 1][y] != bomb) newGame[x + 1][y]++;                         if(newGame[x][y - 1] != bomb) newGame[x][y - 1]++;                         if(newGame[x][y + 1] != bomb) newGame[x][y + 1]++;                         if(newGame[x + 1][y - 1] != bomb) newGame[x + 1][y - 1]++;                         if(newGame[x + 1][y + 1] != bomb) newGame[x + 1][y + 1]++;                                             }                     else if(x == (rows - 1))                     {                         if(newGame[x - 1][y] != bomb) newGame[x - 1][y]++;                         if(newGame[x][y - 1] != bomb) newGame[x][y - 1]++;                         if(newGame[x][y + 1] != bomb) newGame[x][y + 1]++;                         if(newGame[x - 1][y - 1] != bomb) newGame[x - 1][y - 1]++;                         if(newGame[x - 1][y + 1] != bomb) newGame[x - 1][y + 1]++;                     }                     else if(y == 0)                     {                         if(newGame[x][y + 1] != bomb) newGame[x][y + 1]++;                         if(newGame[x - 1][y] != bomb) newGame[x - 1][y]++;                         if(newGame[x + 1][y] != bomb) newGame[x + 1][y]++;                         if(newGame[x - 1][y + 1] != bomb) newGame[x - 1][y + 1]++;                         if(newGame[x + 1][y + 1] != bomb) newGame[x + 1][y + 1]++;                     }                     else if(y == (columns - 1))                     {                         if(newGame[x][y - 1] != bomb) newGame[x][y - 1]++;                         if(newGame[x - 1][y] != bomb) newGame[x - 1][y]++;                         if(newGame[x + 1][y] != bomb) newGame[x + 1][y]++;                         if(newGame[x - 1][y - 1] != bomb) newGame[x - 1][y - 1]++;                         if(newGame[x + 1][y - 1] != bomb) newGame[x + 1][y - 1]++;                     }                     else                     {                         if(newGame[x][y + 1] != bomb) newGame[x][y + 1]++;                         if(newGame[x][y - 1] != bomb) newGame[x][y - 1]++;                         if(newGame[x - 1][y] != bomb) newGame[x - 1][y]++;                         if(newGame[x + 1][y] != bomb) newGame[x + 1][y]++;                         if(newGame[x + 1][y + 1] != bomb) newGame[x + 1][y + 1]++;                         if(newGame[x - 1][y - 1] != bomb) newGame[x - 1][y - 1]++;                         if(newGame[x - 1][y + 1] != bomb) newGame[x - 1][y + 1]++;                         if(newGame[x + 1][y - 1] != bomb) newGame[x + 1][y - 1]++;                     }             }         }```
• 12-26-2011, 02:41 PM
Fubarable
Re: Code seems long and confusing....need to simplify
You are right to suspect that that code is grossly bloated. One solution is to use a simple nested for loop to loop Math.min and Math.max to calculate the appropriate boundaries of the for loops so they won't go below 0 or beyond the maximum columns or rows of your grid. Something like so:

Code:

```       while (count > 0) {         int x = generator.nextInt(rows);         int y = generator.nextInt(columns);         if (newGame[x][y] != bomb) {             newGame[x][y] = bomb;                         // use Math.max and Math.min to make boundaries of for loop             // I'll let you figure out what to put in here.             int rowMin = ....             int colMin = ....             int rowMax = ....             int colMax = ....                         for (int r = rowMin; r <= rowMax; r++) {               for (int c = colMin; c <= colMax; c++) {                   if (newGame[c][r] != bomb && // if bomb already not in place                           !(r == y && c == x)) { // and if not at newly made bomb cell                     newGame[c][r]++;                   }               }             }         }       }```