public void revealCells(AbstractState state) {
        if (state.getValue() == AbstractState.EMPTY_CELL_VALUE) {
            this.emptyCellRevealedCount++;
        }
        this.gameboard.setFlag(state, AbstractState.VISIBLE_FLAG);

        AbstractState neighbor;
        Flag neighborFlag;
        Temperament neighborTemperament;
        Iterator<AbstractState> i = state.getNeighborhoodIterator();

        boolean revealNeighborhood = true;

        while (i.hasNext() && revealNeighborhood) {
            neighbor = i.next();
            neighborTemperament = neighbor.getValue();
            if (neighborTemperament == AbstractState.MINE_VALUE) {
                revealNeighborhood = false;
            }
        }

        if (revealNeighborhood) {
            i = state.getNeighborhoodIterator();
            while (i.hasNext()) {
                neighbor = i.next();
                neighborFlag = neighbor.getFlag();

                if (neighborFlag != AbstractState.VISIBLE_FLAG) {
                    this.revealCells(neighbor);
                }
            }
        }

    }