Example #1
0
        /// <summary>
        /// Interès d'aquest home 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 resultat = 0;

            if (!pos.Buida)
            {
                if (((Persona)pos).EsConvidat())
                {
                    if (!((Convidat)pos).EsHome())
                    {
                        resultat += ((Dona)pos).PlusSexe;
                    }

                    if (Simpaties.Keys.Contains(((Persona)pos).Nom))
                    {
                        resultat += Simpaties[((Persona)pos).Nom];
                    }
                }
                else
                {
                    resultat += 1;
                }
            }
            return(resultat);
        }
Example #2
0
        private Posicio CalculaPosicioNova(int fil, int col, Direccio direccio)
        {
            Posicio pos = new Posicio();

            switch (direccio)
            {
            case Direccio.Amunt:
                pos.Fila    = fil - 1;
                pos.Columna = col;
                break;

            case Direccio.Avall:
                pos.Fila    = fil + 1;
                pos.Columna = col;
                break;

            case Direccio.Dreta:
                pos.Fila    = fil;
                pos.Columna = col + 1;
                break;

            case Direccio.Esquerra:
                pos.Fila    = fil;
                pos.Columna = col - 1;
                break;

            default:
                pos.Fila    = fil;
                pos.Columna = col;
                break;
            }

            return(pos);
        }
Example #3
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 (escenari[fil, col] is Persona)
     {
         Persona p = (Persona)escenari[fil, col];
         escenari[fil, col] = new Posicio();
         persones.Eliminar(p.Nom);
     }
 }
Example #4
0
 /// <summary>
 /// Funció que ens emplena l'escenari de posicions buides,
 /// </summary>
 private void  EmplenarEscenari()
 {
     for (int i = 0; i < files; i++)
     {
         for (int j = 0; j < columnes; j++)
         {
             escenari[i, j] = new Posicio(i, j);
         }
     }
 }
Example #5
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;
            double distBase  = 0;
            double distAlt   = 0;

            if (!(pos1.fila == pos2.fila && pos1.columna == pos2.columna))
            {
                distAlt   = Math.Abs(pos2.fila - pos1.fila);
                distBase  = Math.Abs(pos2.columna - pos1.columna);
                distancia = Pitagoras(distAlt, distBase);
            }

            return(distancia);
        }
        private void persona_Drop(object sender, DragEventArgs e)
        {
            StackPanel desti  = (StackPanel)sender;
            StackPanel origen = e.Data.GetData("bloc") as StackPanel;


            if (desti.Children.Count > 0)
            {
                MessageBox.Show("Aquesta posició està ocupada");
            }
            else if (origen.Children.Count > 0)
            {
                // Fem el canvi GRAFIC

                // Obtenim el que necessitem de la posicio antiga
                TextBlock tbOrigen         = (TextBlock)origen.Children[0];
                Brush     backgroundOrigen = (Brush)origen.Background;

                // Afegim el nom i el borrem de l'origen
                origen.Children.RemoveAt(0);
                desti.Children.Add(tbOrigen);

                // Afegim la imatge i l'esborrem de l'origen
                desti.Background  = backgroundOrigen;
                desti.Opacity     = 1;
                origen.Background = new SolidColorBrush(Colors.Red);
                origen.Opacity    = 0;

                // Fem el canvi lògic de posició de la persona

                // Obtenim la persona que hem de modificar
                Persona personaMoguda = esc.Tp[tbOrigen.Text];
                personaMoguda.Fila    = Grid.GetRow(desti);
                personaMoguda.Columna = Grid.GetColumn(desti);

                // Modifiquem l'escenari
                esc.posar(personaMoguda);

                Posicio casellaBuida = new Posicio(Grid.GetRow(origen), Grid.GetColumn(origen));
                esc[Grid.GetRow(origen), Grid.GetColumn(origen)] = casellaBuida;
            }
        }
Example #7
0
        /// <summary>
        /// [DEPRECATED]
        /// Mètode atracció sobre taula de persones. Calcula l'atracció per cada persona decidint la que té més possibilitats d'acostar-se.
        /// </summary>
        /// <param name="fil"></param>
        /// <param name="col"></param>
        /// <param name="tp"></param>
        /// <returns></returns>
        private double Atraccio(int fil, int col, TaulaPersones tp)
        {
            /**************************************
             * DEPRECATED
             */
            double  resultat   = 0;
            double  distancia  = 0;
            Posicio referencia = new Posicio(fil, col);
            int     interes;

            foreach (Persona p in tp)
            {
                if (p != this)
                {
                    distancia = Posicio.Distancia(referencia, p);
                    interes   = Interes(p);
                    resultat += interes / distancia;
                }
            }
            return(resultat);
        }
Example #8
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     resultat = 0;
            Persona p;

            if (!pos.Buida)
            {
                p = (Persona)pos;

                if (p.EsConvidat())
                {
                    resultat = 1;
                }
                else
                {
                    resultat = -1;
                }
            }

            return(resultat);
        }
Example #9
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)
        {
            Posicio aux = this[filDesti, colDesti];

            if (DestiValid(filDesti, colDesti))
            {
                //llença l'esdeveniment amb la posicio anterior i la nova
                Moguda(escenari[filOrig, colOrig], escenari[filDesti, colDesti]);

                int filaAux = escenari[filDesti, colDesti].Fila;
                int colAux  = escenari[filDesti, colDesti].Columna;

                escenari[filDesti, colDesti].Fila    = filOrig;
                escenari[filDesti, colDesti].Columna = colOrig;

                escenari[filOrig, colOrig].Fila    = filaAux;
                escenari[filOrig, colOrig].Columna = colAux;

                escenari[filDesti, colDesti] = escenari[filOrig, colOrig];
                escenari[filOrig, colOrig]   = aux;
            }
        }
Example #10
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);