Example #1
0
        /// <summary>
        /// Retorna la distància entre dues posicions
        /// </summary>
        /// <param name="pos1">Primera posició</param>
        /// <param name="pos2">Segona posició</param>
        /// <returns>Distància entre les dues posicions</returns>
        public static double Distancia(Posicio pos1, Posicio pos2)
        {
            double distancia = 0;

            distancia = Math.Sqrt((Math.Pow((pos1.Fila - pos2.Fila), 2)) + (Math.Pow((pos1.Columna - pos2.Columna), 2)));

            return(distancia);
        }
Example #2
0
 /// <summary>
 /// Mou una persona de (filOrig, colOrig) fins a la posicio adjacent(filDesti,colDesti)
 /// Es suposa que les coordenades són vàlides, que hi ha una persona a l'origen i que el destí està buit.
 /// </summary>
 /// <param name="filOrig">Fila de la coordenada d'origen</param>
 /// <param name="colOrig">Columna de la coordenada d'origen</param>
 /// <param name="filDesti">Fila de la coordenada de destí</param>
 /// <param name="colDesti">Columna de la coordenada de destí</param>
 private void Moure(int filOrig, int colOrig, int filDesti, int colDesti)
 {
     if (DestiValid(filDesti, colDesti) && esc[filDesti, colDesti].Buida)
     {
         esc[filDesti, colDesti]         = esc[filOrig, colOrig];
         esc[filDesti, colDesti].Fila    = filDesti;
         esc[filDesti, colDesti].Columna = colDesti;
         esc[filOrig, colOrig]           = new Posicio(filOrig, colOrig);
     }
 }
Example #3
0
 /// <summary>
 /// Crea un escenari donades unes mides
 /// </summary>
 /// <param name="files">Número de files de l'escenari</param>
 /// <param name="columnes">Número de columnes de l'escenari</param>
 public Escenari(int files, int columnes)
 {
     esc = new Posicio[files, columnes];
     for (int fila = 0; fila < files; fila++)
     {
         for (int columna = 0; columna < columnes; columna++)
         {
             esc[fila, columna] = new Posicio(fila, columna);
         }
     }
     nHomes    = 0;
     nDones    = 0;
     nCambrers = 0;
     tp        = new TaulaPersones();
 }
Example #4
0
        /// <summary>
        /// Interès del cambrer per una posició
        /// </summary>
        /// <param name="pos">posició per la que s'interessa</param>/// <returns>Retorna 0 si no hi ha ningú, 1 si hi ha un convidat i -1 si un cambrer</returns>
        public override int Interes(Posicio pos)
        {
            int interes = 0;

            if (pos is Cambrer)
            {
                interes= -1;
            }
            else if (pos is Convidat)
            {
               interes =  1;
            }

            return interes;
        }
Example #5
0
        /// <summary>
        /// Atraccio de persona sobre una determinada posicio
        /// </summary>
        /// <param name="fil">Fila de la posició</param>
        /// <param name="col">Columan de la posició</param>
        /// <param name="esc">Escenari on estan situats</param>
        /// <returns>Atracció quantificada</returns>
        private double Atraccio(int fil, int col, Escenari esc)
        {
            double atraccio = 0;

            Posicio posicio = new Posicio(fil, col); // Creem la posició a on és possible que vagi la persona

            foreach (Persona p in esc.Tp)
            {
                if (p.Nom != this.Nom) // Controlem que no calculi a la persona que estem tractant
                {
                    atraccio += Interes(p) / Posicio.Distancia(posicio, p);
                }
            }

            return(atraccio);
        }
Example #6
0
 /// <summary>
 /// Elimina una persona de l'escenari i de la taula de persones
 /// </summary>
 /// <param name="fil">Fila on està la persona</param>
 /// <param name="col">Columna on està la persona</param>
 public void buidar(int fil, int col)
 {
     if (esc[fil, col] is Cambrer)
     {
         nCambrers--;
     }
     else
     {
         if (esc[fil, col] is Home)
         {
             nHomes--;
         }
         else
         {
             nDones--;
         }
     }
     tp.Eliminar((Persona)esc[fil, col]);
     esc[fil, col] = new Posicio(fil, col);
 }
Example #7
0
        /// <summary>
        /// Interès d'aquesta dona per una posició
        /// </summary>
        /// <param name="pos">Posició per la qual s'interessa</param>
        /// <returns>Interès quantificat</returns>
        public override int Interes(Posicio pos)
        {
            int interes = 0;

            if (!pos.Buida)
            {
                if (pos is Convidat)
                {
                    if (pos is Home)
                    {
                        interes = base[((Convidat)pos).Nom] + PlusSexe;
                    }
                    else if (pos is Dona)
                    {
                        interes = base[((Convidat)pos).Nom];
                    }
                }
            }
            return(interes);
        }
Example #8
0
 /// <summary>
 /// Interès de la persona sobre una determinada posició
 /// </summary>
 /// <param name="pos">Posició</param>
 /// <returns>Interès quantificat</returns>
 public abstract int Interes(Posicio pos);