private void resolveConflict(int row, int column, ArrayList<HumanAgent> humans, 
                                 ArrayList<ZombieAgent> zombies) {
        
        final double zombieDefaultWinLoseRatio, zombieWinLoseRatioAgainstArmedHuman, 
                     zombieKillInfectRatio, humanKillEscapeRatio;
        double zombieWinLoseRatio;
        Iterator<ZombieAgent> zombiesIterator;
        ZombieAgent zombie;
        HumanInformation humanInformation;
        ZombieInformation zombieInformation;
        Random randomGenerator;
        boolean humanHasWeapon;
        
        zombieDefaultWinLoseRatio           = this.configuration.getHumanZombieInteraction().getZombieWinLoseRatio();
        zombieWinLoseRatioAgainstArmedHuman = this.configuration.getResources().getWeapon().getZombieWinLoseRatioAgainstArmedHuman();
        zombieKillInfectRatio               = this.configuration.getHumanZombieInteraction().getZombieKillInfectRatio();
        humanKillEscapeRatio                = this.configuration.getHumanZombieInteraction().getHumanKillEscapeRatio();
        randomGenerator                     = new Random();
        zombiesIterator                     = zombies.iterator();
        
        for(HumanAgent human: humans) {
            if(!zombiesIterator.hasNext()) {
                //The current iterator hasn't more elements
                
                if(zombies.isEmpty()) {
                    //All zombies are dead -> exit the loop
                    break;
                }
                else {
                    //Obtain a new iterator of the zombie list
                    zombiesIterator = zombies.iterator();
                }
            }
            
            zombie             = zombiesIterator.next();
            humanInformation   = (HumanInformation)this.population.get(human);
            humanHasWeapon     = humanInformation.getBullets() > 0;
            zombieWinLoseRatio = humanHasWeapon ? zombieWinLoseRatioAgainstArmedHuman : zombieDefaultWinLoseRatio;
          
            if(randomGenerator.nextDouble() < zombieWinLoseRatio) {
                //The zombie win
                if(randomGenerator.nextDouble() < zombieKillInfectRatio) {
                    //The zombie kill the human
                    humanInformation.setLifeStatus(AgentLifeStatus.Dead);
                    this.deadPopulation.add(humanInformation);
                    this.environment[row][column].remove(human);
                    this.healthyCount--;
                    this.population.remove(human);
                }
                else {
                    //The zombie infect the human 
                    if(!humanInformation.isVaccinated()) {
                        humanInformation.setHealthStatus(HumanHealthStatus.Infected);
                        this.infectedHumans.add(human);
                        this.healthyCount--;
                        this.infectedCount++;
                    }
                }
            }
            else {
                //The human win
                if(randomGenerator.nextDouble() < humanKillEscapeRatio) {
                    //The human kill the zombie
                    zombieInformation = (ZombieInformation)this.population.get(zombie);
                    
                    zombiesIterator.remove();
                    zombieInformation.setLifeStatus(AgentLifeStatus.Dead);
                    this.deadPopulation.add(zombieInformation);
                    this.environment[row][column].remove(zombie);
                    this.population.remove(zombie);
                    this.zombifiedCount--;
                    
                    if(humanHasWeapon) {
                        humanInformation.decrementOneBullet();
                    }
                }
            }
        }
    }