getFlor() public method

public getFlor ( int id ) : Flor
id int
return Flor
コード例 #1
0
        public bool quitarFlor(Nodo n, Usuario u)
        {
            bool ret = false;
            Flor f   = u.getFlor(n.id);

            if (f == null)
            {
                throw new Exception("El usuario no tiene esa flor para quitar");
            }

            //libero la flor al usuario
            n.flores -= 1;
            f.id      = 0;
            f.born    = DateTime.Now;

            //borro la parte de la rama que no tenga flores
            ret = verifyNodoSinFlores(n.id);

            //actualizo negados
            actualizarNegados();

            //veo si algun nodo alcanza el consenso
            //comprobarConsenso(); se comprueba al crear el arbolpersonal

            return(ret);
        }
コード例 #2
0
        public void simDiscrepar(Grupo g, Usuario u, Nodo tema)
        {
            //creo hermano o hijo
            List <Nodo> nodes = g.arbol.toList2(tema, new List <Nodo>());
            //si tengo flor en este tema entonces nada
            bool hayFlor = false;

            foreach (Nodo n2 in nodes)
            {
                if (u.getFlor(n2.id) != null)
                {
                    hayFlor = true;
                }
            }
            if (!hayFlor)
            {
                //seleccion nodo al azar dentro del subarbol de n
                Nodo selected = g.arbol.rndElement(nodes);
                if (!selected.consensoAlcanzado)
                {
                    int generacion = int.Parse(selected.nombre);
                    if (u.floresDisponibles().Count > 0)
                    {
                        if (simRND.NextDouble() <= 0.3)
                        {
                            //hijo
                            if (selected.nivel < 5)
                            {
                                simAgregarNodo(g, u, selected, generacion + 1);
                            }
                            else if (selected != tema)
                            {
                                //hermano
                                List <Nodo> path = g.arbol.getPath(selected.id);
                                if (path.Count > 2)
                                {
                                    Nodo padre = path[1];
                                    simAgregarNodo(g, u, padre, generacion + 1);
                                }
                                else if (selected.nivel < 5)
                                {
                                    //hijo
                                    simAgregarNodo(g, u, selected, generacion + 1);
                                }
                            }
                        }
                    }
                }
            }
        }
コード例 #3
0
        public void asignarflor(Usuario u, Nodo n)
        {
            //si tiene una flor en nivel anterior la subo, si no uso una de las disponibles
            //si hay flor en pathn entonces la subo
            bool subida = false;

            if (n.consensoAlcanzado)
            {
                throw new appException("Este debate ya ha alcanzado el consenso");
            }

            foreach (Nodo padre in getPath(n.id))
            {
                Flor usada = u.getFlor(padre.id);
                if (usada != null && padre != n)
                {
                    //hay flor en un nodo anterior la subo
                    padre.flores -= 1;
                    usada.id      = n.id;
                    usada.born    = DateTime.Now;
                    n.flores     += 1;
                    subida        = true;

                    break;
                }
            }
            if (!subida)
            {
                //uso una flor disponible
                List <Flor> disponibles = u.floresDisponibles();
                if (disponibles.Count > 0)
                {
                    disponibles[0].id   = n.id;
                    disponibles[0].born = DateTime.Now;
                    n.flores           += 1;
                }
                else
                {
                    throw new appException("No tienes flores disponibles");
                }
            }
            //compruebo consenso alcanzado
            //comprobarConsenso(); se comprueba al crear el arbolpersonal

            //actualizo negados
            actualizarNegados();
        }
コード例 #4
0
        public void simConsentir(Grupo g, Usuario u, Nodo tema)
        {
            //muevo una flor a un nodo con generacion mayor
            List <Nodo> nodes = g.arbol.toList2(tema, new List <Nodo>());
            //si tengo flor en este tema la quito
            int  generacion = 1;
            Nodo nViejo     = null;

            foreach (Nodo n2 in nodes)
            {
                if (u.getFlor(n2.id) != null)
                {
                    generacion = int.Parse(n2.nombre);
                    nViejo     = n2;
                    break;
                }
            }

            //busco nodo para apoyar
            Nodo nNuevo = null;
            int  nivel  = 1;

            foreach (Nodo n2 in nodes)
            {
                //if (int.Parse(n2.nombre) > generacion && n2.nivel > 1 && !n2.consensoAlcanzado)
                if (n2.nivel > nivel && !n2.consensoAlcanzado)
                {
                    //generacion = int.Parse(n2.nombre);
                    nivel  = n2.nivel;
                    nNuevo = n2;
                }
            }
            if (nNuevo != null)
            {
                if (nViejo != null)
                {
                    g.arbol.quitarFlor(nViejo, u);  //quito la flor solo si hay nuevo candidato
                }
                if (u.floresDisponibles().Count != 0)
                {
                    g.arbol.asignarflor(u, nNuevo);
                }
            }
        }
コード例 #5
0
        string doToggleFlor(string email, int id, float x, string grupo)
        {
            string ret = "";
            Grupo  g   = app.getGrupo(grupo);

            lock (g)
            {
                //verifico que el usuario tiene una flor en ese nodo
                Arbol a = g.arbol;
                g.ts = DateTime.Now;
                Usuario     u     = g.getUsuarioHabilitado(email);
                Flor        f     = u.getFlor(id);
                List <Nodo> pathn = a.getPath(id);
                if (pathn == null)
                {
                    throw new appException(Tools.tr("Seleccione un nodo", g.idioma));
                }
                else
                {
                    Nodo n = pathn[0];

                    if (f == null)
                    {
                        n.x = x;

                        //no tiene flor en el nodo, la agrego
                        a.asignarflor(u, n);

                        //devuelvo el arbolPersonal
                        ret = Tools.toJson(a.getArbolPersonal(email));
                    }
                    else
                    {
                        //tiene flor, la quito
                        a.quitarFlor(n, u);

                        //devuelvo el arbolPersonal
                        ret = Tools.toJson(a.getArbolPersonal(email));
                    }
                }
            }
            return(ret);
        }
コード例 #6
0
ファイル: Arbol.cs プロジェクト: sabtvg/nabu
        public bool quitarFlor(Nodo n, Usuario u)
        {
            bool ret = false;
            Flor f = u.getFlor(n.id);

            if (f == null)
                throw new Exception("El usuario no tiene esa flor para quitar");

            //libero la flor al usuario
            n.flores -= 1;
            f.id = 0;
            f.born = DateTime.Now;

            //borro la parte de la rama que no tenga flores
            ret = verifyNodoSinFlores(n.id);

            //actualizo negados
            actualizarNegados();

            //veo si algun nodo alcanza el consenso
            comprobarConsenso();

            return ret;
        }
コード例 #7
0
ファイル: Arbol.cs プロジェクト: sabtvg/nabu
        public void asignarflor(Usuario u, Nodo n)
        {
            //si tiene una flor en nivel anterior la subo, si no uso una de las disponibles
            //si hay flor en pathn entonces la subo
            bool subida = false;

            if (n.consensoAlcanzado)
                throw new appException("Este debate ya ha alcanzado el consenso");

            foreach (Nodo padre in getPath(n.id))
            {
                Flor usada = u.getFlor(padre.id);
                if (usada != null)
                {
                    //hay flor en un nodo anterior la subo
                    padre.flores -= 1;
                    usada.id = n.id;
                    usada.born = DateTime.Now;
                    n.flores += 1;
                    subida = true;

                    break;
                }
            }
            if (!subida)
            {
                //uso una flor disponible
                List<Flor> disponibles = u.floresDisponibles();
                if (disponibles.Count > 0)
                {
                    disponibles[0].id = n.id;
                    disponibles[0].born = DateTime.Now;
                    n.flores += 1;
                }
                else
                    throw new appException("No tienes flores disponibles");
            }
            //compruebo consenso alcanzado
            comprobarConsenso(n);

            //actualizo negados
            actualizarNegados();
        }