コード例 #1
0
ファイル: clsFichaPlayer.cs プロジェクト: pelad0/juego
 public bool Equals(clsFicha f)
 {
     if (this.Ubicacion.X == f.ubicacion.X && this.ubicacion.Y == f.ubicacion.Y && this.tipo == f.tipo)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
コード例 #2
0
 public auxMov(clsFicha pc, clsFicha pl, double distancia)
 {
     this.pc        = pc;
     this.pl        = pl;
     this.distancia = distancia;
 }
コード例 #3
0
ファイル: clsFichaPlayer.cs プロジェクト: pelad0/juego
 public bool Equals(clsFicha f)
 {
     if (this.Ubicacion.X == f.ubicacion.X && this.ubicacion.Y == f.ubicacion.Y && this.tipo == f.tipo)
         return true;
     else
         return false;
 }
コード例 #4
0
ファイル: auxMov.cs プロジェクト: pelad0/juego
 public auxMov(clsFicha pc, clsFicha pl, double distancia)
 {
     this.pc = pc;
     this.pl = pl;
     this.distancia = distancia;
 }
コード例 #5
0
ファイル: Form1.cs プロジェクト: pelad0/juego
 /// <summary>
 /// valida el movimiento de la ficha hacia la IZQUIERDA
 /// contemplando la movilidad de la ficha y el rango del enemigo
 /// de ser posible realiza el movimiento y retorna true
 /// </summary>
 /// <param name="fichaPC"></param>
 /// <param name="cercana"></param>
 /// <returns></returns>
 private bool IAIzquierda(clsFicha fichaPC, clsFicha cercana)
 {
     for (int i = fichaPC.RangoMovimiento; i >= 1; i--)
     {
         Point destino = new Point(fichaPC.Ubicacion.X - (unidad * i), fichaPC.Ubicacion.Y);
         //si destino no es ni ostaculo, ni ficha, ni entra en rango enemigo
         if (!IAEnRangoPlayer(destino, cercana) && !obstaculos.Contains(destino) && !playerPoint.Contains(destino) && !pcPoint.Contains(destino) && destino.X > 0)
         {
             if (i == 1)
             {
                 IAMoverFicha(fichaPC, destino);
                 return true;
             }
             else if (i == 2)
             {
                 Point intermedio = new Point(fichaPC.Ubicacion.X, destino.Y - unidad);
                 if (!obstaculos.Contains(intermedio) && !playerPoint.Contains(intermedio) && !pcPoint.Contains(intermedio))
                 {
                     if (cercana.Ubicacion.Y == intermedio.Y && !IAEnRangoPlayer(intermedio, cercana))
                     {
                         IAMoverFicha(fichaPC, intermedio);
                         return true;
                     }
                     else
                     {
                         IAMoverFicha(fichaPC, destino);
                         return true;
                     }
                 }
             }
             else if (i == 3)
             {
                 Point intermedio1 = new Point(fichaPC.Ubicacion.X, destino.Y - unidad);
                 Point intermedio2 = new Point(fichaPC.Ubicacion.X, destino.Y - (unidad * 2));
                 if (!obstaculos.Contains(intermedio1) && !playerPoint.Contains(intermedio1) && !pcPoint.Contains(intermedio1) && !obstaculos.Contains(intermedio2) && !playerPoint.Contains(intermedio2) && !pcPoint.Contains(intermedio2))
                 {
                     if (cercana.Ubicacion.Y == intermedio1.Y && !IAEnRangoPlayer(intermedio1, cercana))
                     {
                         IAMoverFicha(fichaPC, intermedio1);
                         return true;
                     }
                     else if (cercana.Ubicacion.Y == intermedio2.Y && !IAEnRangoPlayer(intermedio2, cercana))
                     {
                         IAMoverFicha(fichaPC, intermedio2);
                         return true;
                     }
                     else
                     {
                         IAMoverFicha(fichaPC, destino);
                         return true;
                     }
                 }
             }
         }
     }
     return false;
 }
コード例 #6
0
ファイル: Form1.cs プロジェクト: pelad0/juego
        /// <summary>
        /// si alguna fichaPC tiene una fichaPLayer al alcance la elimina
        /// </summary>
        private bool IAmato()
        {
            if (sonido)
                soundFight();

            foreach (clsFicha f in fichasPc)//si alguna ficha enemiga tiene un player al alcance lo mata
            {
                IAhayObjetivo(f);
                if (IATarget.Count > 0)
                {
                    bool mato = false;
                    clsFicha exPlayer = new clsFicha();
                    foreach (clsFicha fi in fichasPlayer)
                    {
                        if (IATarget.Contains(fi.Ubicacion))
                        {
                            exPlayer = fi;
                            IAObjetivo = fi.Ubicacion;
                            gBase.DrawImage(Resources.blanco, f.Ubicacion.X, f.Ubicacion.Y, 48, 48);
                            gBase.DrawImage(f.ImagenMovimiento, f.Ubicacion.X, f.Ubicacion.Y, 48, 48);

                            gBase.DrawImage(exPlayer.ImagenObjetivo, IAObjetivo.X, IAObjetivo.Y, 48, 48);
                            System.Threading.Thread.Sleep(1000);
                            Explosion(IAObjetivo);
                            gBase.DrawImage(Resources.blanco, f.Ubicacion.X, f.Ubicacion.Y, 48, 48);
                            gBase.DrawImage(f.ImagenQuieto, f.Ubicacion.X, f.Ubicacion.Y, 48, 48);
                            mato = true;
                            break;
                        }
                    }

                    if (mato)
                    {
                        fichasPlayer.Remove(exPlayer);
                        playerPoint.Remove(exPlayer.Ubicacion);
                        if (puntaje - 150 >= 0)
                            puntaje = puntaje - 150;
                        else
                            puntaje = 0;

                        lblPuntos.Text = puntaje.ToString();

                        return true;
                    }
                }
            }
            return false;
        }
コード例 #7
0
ファイル: Form1.cs プロジェクト: pelad0/juego
        /// <summary>
        /// evalua si el posible movimiento de PCesta en el rango de Player
        /// </summary>
        /// <param name="posiblePc"></param>
        /// <param name="cercana"></param>
        /// <returns></returns>
        private bool IAEnRangoPlayer(Point posiblePc, clsFicha cercana)
        {
            int plX = cercana.Ubicacion.X;
            int plY = cercana.Ubicacion.Y;

            List<Point> rangoPlayer = new List<Point>();
            for (int i = 1; i <= cercana.RangoTiro; i++)
            {
                Point a = new Point((plX + (i * unidad)), plY);
                Point b = new Point((plX - (i * unidad)), plY);
                Point c = new Point(plX, (plY + (i * unidad)));
                Point d = new Point(plX, (plY - (i * unidad)));
                rangoPlayer.Add(a);
                rangoPlayer.Add(b);
                rangoPlayer.Add(c);
                rangoPlayer.Add(d);
            }
            if (rangoPlayer.Contains(posiblePc))
            {
                return true;
            }
            return false;
        }
コード例 #8
0
ファイル: Form1.cs プロジェクト: pelad0/juego
        /// <summary>
        /// IA-carga los posible blancos de la pc, en opcionesPlayer las posibles fichas, 
        /// y en opcionesPc los posibles bloques
        /// y cambia la imagen del enemigo en accion
        /// </summary>
        /// <param name="f"></param>
        private void IAhayObjetivo(clsFicha f)
        {
            IATarget.Clear();
            //gBase.DrawImage(Resources.blanco, f.Ubicacion.X, f.Ubicacion.Y, 48, 48);
            //gBase.DrawImage(f.ImagenMovimiento, f.Ubicacion.X, f.Ubicacion.Y, 48, 48);
            //System.Threading.Thread.Sleep(1000);
            bool ar = true;
            bool ab = true;
            bool de = true;
            bool iz = true;

            for (int i = 1; i <= f.RangoTiro; i++)
            {
                int arriba = f.Ubicacion.Y - (unidad * i);
                int abajo = f.Ubicacion.Y + (unidad * i);
                int derecha = f.Ubicacion.X + (unidad * i);
                int izquierda = f.Ubicacion.X - (unidad * i);

                if (arriba >= 0 && ar)
                {
                    Point arr = new Point(f.Ubicacion.X, arriba);
                    if ((obstaculos.Contains(arr) || playerPoint.Contains(arr)))
                    {
                        IATarget.Add(arr);
                        ar = false;
                    }
                }
                if (abajo < pnlBase.Height && ab)
                {
                    Point aba = new Point(f.Ubicacion.X, abajo);
                    if ((obstaculos.Contains(aba) || playerPoint.Contains(aba)))
                    {
                        IATarget.Add(aba);
                        ab = false;
                    }
                }
                if (derecha < pnlBase.Width && de)
                {
                    Point der = new Point(derecha, f.Ubicacion.Y);
                    if ((obstaculos.Contains(der) || playerPoint.Contains(der)))
                    {
                        IATarget.Add(der);
                        de = false;
                    }
                }
                if (izquierda >= 0 && iz)
                {
                    Point izq = new Point(izquierda, f.Ubicacion.Y);
                    if ((obstaculos.Contains(izq) || playerPoint.Contains(izq)))
                    {
                        posiblesPc.Add(izq);
                        iz = false;
                    }
                }
            }
        }
コード例 #9
0
ファイル: Form1.cs プロジェクト: pelad0/juego
 /// <summary>
 /// elimina el objetivo clickeado y grafica una explosión
 /// </summary>
 /// <param name="p"></param>
 private void disparar()
 {
     clsFicha fi = new clsFicha();
     if (obstaculos.Contains(objetivo))
     {
         obstaculos.Remove(objetivo);
         puntaje += 50;
     }
     if (pcPoint.Contains(objetivo))
     {
         foreach (clsFicha f in fichasPc)
         {
             if (f.Ubicacion == objetivo)
             {
                 fi = f;
                 break;
             }
         }
         pcPoint.Remove(objetivo);
         fichasPc.Remove(fi);
         puntaje += 100;
     }
     Explosion(objetivo);
     lblPuntos.Text = puntaje.ToString();
 }
コード例 #10
0
ファイル: Form1.cs プロジェクト: pelad0/juego
 /// <summary>
 /// DEFINE el jugador seleccionado y guarda su posicion en "actual"
 /// </summary>
 /// <param name="pos"></param>
 private bool defActual(Point pos)
 {
     if (playerPoint.Contains(pos))
     {
         foreach (clsFicha f in fichasPlayer)
         {
             if (f.Ubicacion == objetivo)
             {
                 if (!actual.isNull())
                 {
                     gBase.DrawImage(Resources.blanco, actual.Ubicacion.X, actual.Ubicacion.Y, 48, 48);
                     gBase.DrawImage(actual.ImagenQuieto, actual.Ubicacion.X, actual.Ubicacion.Y, 48, 48);
                 }
                 actual = f;//defino jugador actual
                 posiblesPlayer.Clear();//lista de posiciones posibles
                 posiblesPc.Clear();//lista de enemigos al alcance
                 limpiarSomYObj();
                 return true;
             }
         }
     }
     return false;
 }
コード例 #11
0
ファイル: Form1.cs プロジェクト: pelad0/juego
        private bool IAPosSupIzqPc(clsFicha fichaPC, clsFicha cercana)
        {
            //si pc esta arriba y a la izquierda
            if (fichaPC.Ubicacion.Y < cercana.Ubicacion.Y && fichaPC.Ubicacion.X <= cercana.Ubicacion.X)
            {
                //si esta mas "centrado" por Y que por X
                if (Math.Abs(fichaPC.Ubicacion.Y - cercana.Ubicacion.Y) <= Math.Abs(fichaPC.Ubicacion.X - cercana.Ubicacion.X))
                {
                    if (!IADerecha(fichaPC, cercana))
                    {
                        if (!IAAbajo(fichaPC, cercana))
                        {
                            if (!IAIzquierda(fichaPC, cercana))
                            {
                                IAArriba(fichaPC, cercana);
                            }
                        }
                    }
                }

                else
                {
                    if (!IAAbajo(fichaPC, cercana))
                    {
                        if (!IADerecha(fichaPC, cercana))
                        {
                            if (!IAIzquierda(fichaPC, cercana))
                            {
                                IAArriba(fichaPC, cercana);
                            }
                        }
                    }

                }
                return true;
            }
            else
                return false;
        }
コード例 #12
0
ファイル: Form1.cs プロジェクト: pelad0/juego
        /// <summary>
        /// realiza el movimiento de una fichaPc randomeada
        /// </summary>
        private void IAmovimiento()
        {
            if (fichasPlayer.Count > 0)
            {
                clsFicha fichaPC = fichasPc[r.Next(0, fichasPc.Count)];//randomeo una fichaPC
                double distancia = pnlBase.Width;

                List<auxMov> distancias = new List<auxMov>();

                foreach (clsFicha fpc in fichasPc)
                {
                    clsFicha cercana = new clsFicha();

                    foreach (clsFicha f in fichasPlayer)//establezco la fichaPlayer mas cercana a la fichaPC randomeada
                    {
                        if (IADistancia(fpc.Ubicacion, f.Ubicacion) < distancia)
                        {
                            cercana = f;
                        }
                    }
                    distancias.Add(new auxMov(fpc, cercana, IADistancia(fpc.Ubicacion, cercana.Ubicacion)));

                }
                distancia = pnlBase.Width;
                auxMov am = new auxMov();

                foreach (auxMov a in distancias)
                {
                    if (a.Distancia < distancia)
                        am = a;
                }
                distancias.Clear();

                if (!IAPosSupIzqPc(am.Pc, am.Pl))
                {
                    if (!IAPosSupDerPc(am.Pc, am.Pl))
                    {
                        if (!IAPosInfIzqPc(am.Pc, am.Pl))
                        {
                            IAPosInfDerPc(am.Pc, am.Pl);
                        }
                    }
                }

                //foreach (clsFicha f in fichasPlayer)//establezco la fichaPlayer mas cercana a la fichaPC randomeada
                //{
                //    if (IADistancia(fichaPC.Ubicacion,f.Ubicacion)<distancia)
                //    {
                //        cercana = f;
                //    }
                //}
                //if(!IAPosSupIzqPc(fichaPC, cercana))
                //{
                //    if (!IAPosSupDerPc(fichaPC, cercana))
                //    {
                //        if (!IAPosInfIzqPc(fichaPC, cercana))
                //        {
                //            IAPosInfDerPc(fichaPC, cercana);
                //        }
                //    }
                //}
            }
        }
コード例 #13
0
ファイル: Form1.cs プロジェクト: pelad0/juego
        /// <summary>
        /// grafica el movimiento de una ficha dada al lugar especificado en destino
        /// </summary>
        /// <param name="fichaPC"></param>
        /// <param name="destino"></param>
        private void IAMoverFicha(clsFicha fichaPC, Point destino)
        {
            gBase.DrawImage(fichaPC.ImagenSombra, destino.X, destino.Y, 48, 48);
            System.Threading.Thread.Sleep(500);
            gBase.DrawImage(Resources.blanco, fichaPC.Ubicacion.X, fichaPC.Ubicacion.Y, 48, 48);

            gBase.DrawImage(fichaPC.ImagenQuieto, destino.X, destino.Y, 48, 48);
            gBase.DrawImage(Resources.blanco, destino.X, destino.Y, 48, 48);
            gBase.DrawImage(fichaPC.ImagenQuieto, destino.X, destino.Y, 48, 48);

            pcPoint.Remove(fichaPC.Ubicacion);
            fichaPC.Ubicacion = destino;
            pcPoint.Add(destino);
        }