public void reproduction() {
        Stack<Case> casePossible = new Stack<>();
        for (int x = Math.max(0, conteneur.getX() - famille.getSpecs().getPorteSpore()); x < Math.min(conteneur.getX() + famille.getSpecs().getPorteSpore(), conteneur.getContainer().getPlateau().length); x++) {
            for (int y = Math.max(0, conteneur.getY() - (famille.getSpecs().getPorteSpore() - Math.abs(conteneur.getX() - x))); y < Math.min(conteneur.getY() + (famille.getSpecs().getPorteSpore() - Math.abs(conteneur.getX() - x)), conteneur.getContainer().getPlateau()[0].length); y++) {
                if (conteneur.getContainer().getPlateau()[x][y].isTraversable() && conteneur.getContainer().getPlateau()[x][y] != conteneur && conteneur.getContainer().getPlateau()[x][y].getPlante() == null) {
                    casePossible.add(conteneur.getContainer().getPlateau()[x][y]);
                }
            }
        }
        for (Case c : casePossible) {
            if ((int) (Math.random() * 101) <= famille.getSpecs().getProliferation()) {
                if ((int) (Math.random() * 10001) <= famille.getSpecs().getTauxMutationPlante()) {
                    if (this instanceof Herbe) {
                        FamillePlante fp = new FamillePlante(0, c);
                        conteneur.getContainer().getPartie().getFamillesPlante().add(fp);
                    } else {
                        FamillePlante fp = new FamillePlante(1, c);
                        conteneur.getContainer().getPartie().getFamillesPlante().add(fp);
                    }
                } else {
                    c.getGraines().add(new Graine(famille));
                    famille.setCompteurGraines(famille.getCompteurGraines() + 1);
                }
            }
        }
        casePossible.clear();
    }