private void moveZombies() {
        // roll a random value
        int value = getDie();

        // Place a Zombie on top of a player if possible
        if (value >= ZOMBIE_PLACE_COST) {
            for (IPlayer player : getPlayers()) {
                IField field = getMap().getField(player.getCoordinates());

                // only place zombies in buildings
                if (field.getType().equals("building")
                        && field.getZombie() == null) {
                    addZombie(new Zombie(player.getCoordinates()));
                    value -= ZOMBIE_PLACE_COST;
                    break;
                }
            }
        }

        // no zombies to move
        if (getZombies().isEmpty()) {
            return;
        }

        // find all possible movements & execute as many as possible
        executeMovements(findMovements(), value);

        // update map
        setChanged();
        notifyObservers(Update.ZombieMoved);
    }