The Bomberman Game

  • + 0 comments

    C++ solution with comments:

    vector<string> bomberMan(int n, vector<string> grid) {
        auto new_grid = grid;
        int rows = grid.size();
        int cols = grid[0].size();
        
        // the same answers are cycling over, just need to pick the correct one
        if (n > 4) {
            n = n % 4 + 4;
        }
        
        // bomb identifier - switching between 'O' and 'x' to differentiate time of planting
        char b = 'x';
        
        for (int i=2; i<=n; i++) {
            if (i % 2 == 0) {
                // step 3 - filling empty fields with bombs
                for (int r=0; r<rows; r++) {
                    for (int c=0; c<cols; c++) {
                        if (grid[r][c] == '.') {
                            grid[r][c] = b;
                        }
                    }
                }
                
                // flipping bomb type
                if (b == 'x') b = 'O';
                else b = 'x';
            } else {
                // step 4 - exploding bombs planted at time i-3
                new_grid = grid;
                
                for (int r=0; r<rows; r++) {
                    for (int c=0; c<cols; c++) {
                        if (grid[r][c] == b) {
                            if (r > 0) new_grid[r-1][c] = '.';
                            if (r < rows-1) new_grid[r+1][c] = '.';
                            if (c > 0) new_grid[r][c-1] = '.';
                            if (c < cols-1) new_grid[r][c+1] = '.';
                            new_grid[r][c] = '.';
                        }
                    }
                }
                
                swap(new_grid, grid);
            }
        }
        
        // going back to default bomb labeling
        for (int r=0; r<rows; r++) {
            for (int c=0; c<cols; c++) {
                if (grid[r][c] == 'x') grid[r][c] = 'O';
            }
        }
        
        return grid;
    }