Beispiel #1
0
        public override void Iniciar()
        {
            int[][] mapa = CargadorMapas.Mapa;

            //TODO:
            //Quitar de todos el tamaño fijo
            for(int i = 0; i < 20; i++)
            {
                for(int j = 0; j < 20; j++)
                {
                    if(mapa[i][j] == EditorMapas.CASA)
                    {
                        Console.WriteLine("Casa en {0},{1}", i, j);
                        this.casa = sprites[i,j] = new Sprite("Assets/GFX/casini.png");
                        requierePosicionarCasa = false;
                    }
                    else if(mapa[i][j] != 0)
                    {
                        Console.WriteLine("{2} en {0},{1}", i, j, mapa[i][j]);
                        sprites[i,j] = new Sprite("Assets/GFX/"+mapa[i][j]+".png");
                    }

                    if(sprites[i,j] != null)
                    {
                        sprites[i,j].Mover((short)(i * sprites[i,j].Ancho),(short) (j * sprites[i,j].Alto));
                    }
                }
            }

            PosicionarKibus();

            BuscarCasa();
        }
Beispiel #2
0
        public Nivel1()
            : base()
        {
            Random random = new Random(System.DateTime.Now.Millisecond);
            int cantidad = random.Next(40, 160);

            Console.WriteLine(cantidad + "%");
            int x;
            int y;
            int elemento;

            while(cantidad > 0)
            {
                x = random.Next(20);
                y = random.Next(20);
                elemento = random.Next(36,42);
                if(sprites[x,y] == null)
                {
                    sprites[x,y] = new Sprite("Assets/GFX/"+ elemento+".png");
                    sprites[x,y].Mover((short)(x * sprites[x,y].Ancho),(short) (y * sprites[x,y].Alto));
                    cantidad--;
                }

            }
        }
Beispiel #3
0
        protected void PosicionarKibus()
        {
            Sdl.SDL_Event evento;
            Sdl.SDL_Rect rectangulo;
            kibus  = new Personaje();
            bool puesto;

            //if(this.casa == null)
            if(requierePosicionarCasa)
            {
                Sprite casa = new Sprite("Assets/GFX/casini.png");
                puesto = false;
                do
                {
                    while(Sdl.SDL_PollEvent(out evento) > 0)
                    {

                        switch(evento.type)
                        {
                            case Sdl.SDL_MOUSEMOTION:
                                if (evento.motion.x > 0 && evento.motion.y > 0
                                    && evento.motion.x < Hardware.Ancho && evento.motion.y < Hardware.Alto)
                                {
                                    rectangulo.x = /*(short)(evento.motion.x - 16);*/(short)(((int)(20 - (((Hardware.Ancho - evento.motion.x) / (float)Hardware.Ancho)) * 20)) * 32);
                                    rectangulo.y = /*(short)(evento.motion.y - 16);*/(short)(((int)(20 - (((Hardware.Alto- evento.motion.y) / (float)Hardware.Alto)) * 20)) * 32);

                                    try
                                    {
                                        if(sprites[rectangulo.x/32,rectangulo.y/32] == null)
                                        {
                                            casa.Mover(rectangulo);
                                        }
                                    }
                                    catch (IndexOutOfRangeException)
                                    {}

                                }
                                break;

                            case Sdl.SDL_MOUSEBUTTONDOWN:
                                try
                                {
                                    if(sprites[rectangulo.x/32,rectangulo.y/32] == null)
                                    {
                                        sprites[rectangulo.x/32,rectangulo.y/32] = casa;
                                        this.casa = casa;
                                        puesto = true;
                                    }
                                }
                                catch (IndexOutOfRangeException)
                                {}

                                break;
                        }
                    }
                    Hardware.DibujarFondo();
                    DibujarObstaculos();
                    casa.Dibujar();
                    Hardware.RefrescarPantalla();

                }while(!puesto);
            }

            puesto = false;
            do
            {
                while(Sdl.SDL_PollEvent(out evento) > 0)
                {

                    switch(evento.type)
                    {
                        case Sdl.SDL_MOUSEMOTION:
                            if (evento.motion.x > 0 && evento.motion.y > 0
                                && evento.motion.x < Hardware.Ancho && evento.motion.y < Hardware.Alto)
                            {
                                rectangulo.x = /*(short)(evento.motion.x - 16);*/(short)(((int)(20 - (((Hardware.Ancho - evento.motion.x) / (float)Hardware.Ancho)) * 20)) * 32);
                                rectangulo.y = /*(short)(evento.motion.y - 16);*/(short)(((int)(20 - (((Hardware.Alto- evento.motion.y) / (float)Hardware.Alto)) * 20)) * 32);

                                try
                                {
                                    if(sprites[rectangulo.x/32,rectangulo.y/32] == null)
                                    {
                                        kibus.Mover(rectangulo);
                                    }
                                }
                                catch (IndexOutOfRangeException)
                                {}

                            }
                            break;

                        case Sdl.SDL_MOUSEBUTTONDOWN:
                            try
                            {
                                if(sprites[rectangulo.x/32,rectangulo.y/32] == null)
                                {
                                    puesto = true;
                                }
                            }
                            catch (IndexOutOfRangeException)
                            {}

                            break;
                    }
                }

                Hardware.DibujarFondo();
                DibujarObstaculos();
                kibus.Dibujar();
                Hardware.RefrescarPantalla();

            }while(!puesto);
        }
Beispiel #4
0
        public override void Iniciar()
        {
            Sdl.SDL_Event evento;
            Sdl.SDL_Rect rectangulo;
            bool terminado = false;
            bool casaTaim = false;

            Random random = new Random(System.DateTime.Now.Millisecond);
            int elemento;
            elemento = random.Next(36,42);
            Sprite obstaculo = new Sprite("Assets/GFX/"+ elemento+".png");;

            do
            {

                while(Sdl.SDL_PollEvent(out evento) > 0)
                {

                    switch(evento.type)
                    {
                        case Sdl.SDL_MOUSEMOTION:
                            if (evento.motion.x > 0 && evento.motion.y > 0
                                && evento.motion.x < Hardware.Ancho && evento.motion.y < Hardware.Alto)
                            {
                                rectangulo.x = /*(short)(evento.motion.x - 16);*/(short)(((int)(20 - (((Hardware.Ancho - evento.motion.x) / (float)Hardware.Ancho)) * 20)) * 32);
                                rectangulo.y = /*(short)(evento.motion.y - 16);*/(short)(((int)(20 - (((Hardware.Alto- evento.motion.y) / (float)Hardware.Alto)) * 20)) * 32);

                                //try
                                //{
                                    if(sprites[rectangulo.x/32,rectangulo.y/32] == null)
                                    {
                                        obstaculo.Mover(rectangulo);
                                    }
                                /*}
                                catch (IndexOutOfRangeException)
                                {}*/

                            }
                            break;

                        case Sdl.SDL_MOUSEBUTTONDOWN:
                            try
                            {
                                if(sprites[rectangulo.x/32,rectangulo.y/32] == null)
                                {

                                    sprites[rectangulo.x/32,rectangulo.y/32] = obstaculo;

                                    if(casaTaim)
                                    {
                                        matriz[rectangulo.x/32,rectangulo.y/32] = EditorMapas.CASA;
                                        terminado = true;
                                    }
                                    else
                                    {
                                        matriz[rectangulo.x/32,rectangulo.y/32] = elemento;
                                        elemento = random.Next(36,42);
                                        obstaculo = new Sprite("Assets/GFX/"+ elemento+".png");
                                    }
                                }
                            }
                            catch (IndexOutOfRangeException)
                            {}

                            break;

                        case Sdl.SDL_KEYDOWN:
                            if(evento.key.keysym.sym == Sdl.SDLK_SPACE)
                            {
                                obstaculo = new Sprite("Assets/GFX/casini.png");
                                casaTaim = true;
                            }
                            break;
                    }
                }

                Hardware.DibujarFondo();
                DibujarObstaculos();
                obstaculo.Dibujar();
                Hardware.RefrescarPantalla();

            }while(!terminado);

            string nombre  = "";

            terminado = false;

            do
            {
                Hardware.DibujarFondo();
                DibujarObstaculos();
                Hardware.EscribirTexto("Nombre del mapa: ", 200, 300);
                Hardware.EscribirTexto(nombre, 200, 340);
                Hardware.RefrescarPantalla();

                while(Sdl.SDL_PollEvent(out evento) > 0)
                {

                    switch(evento.type)
                    {
                        case Sdl.SDL_KEYDOWN:
                            if(evento.key.keysym.sym == Sdl.SDLK_RETURN)
                            {
                                terminado = true;
                            }
                            else
                            {
                                nombre += Char.ConvertFromUtf32(evento.key.keysym.sym);
                            }
                            break;
                    }
                }

            }while(!terminado);

            List<string> lineasArreglo = new List<string>();
            for(int i = 0; i < 20; i++)
            {
                StringBuilder linea = new StringBuilder();
                for(int j = 0; j < 20; j++)
                {
                    linea.Append(matriz[i, j]);

                    if(j != 19)
                    {
                        linea.Append(",");
                    }
                }
                lineasArreglo.Add(linea.ToString());
            }

            File.WriteAllLines("Mapas/"+nombre+".txt", lineasArreglo.ToArray());
        }
Beispiel #5
0
 public bool ColisionCon(Sprite otro)
 {
     return ((X + Ancho > otro.X)
        		&& (X < otro.X + otro.Ancho)
        		&& (Y + Alto > otro.Y)
             && (Y < otro.Y + otro.Alto));
 }
Beispiel #6
0
        public static void Inicializar(short ancho, short alto, int colores,bool pantalla_completa)
        {
            BarraHerramientas = 200;

            int bpp;
            int flags = Sdl.SDL_HWSURFACE | Sdl.SDL_DOUBLEBUF | Sdl.SDL_ANYFORMAT;

            Console.WriteLine("Inicializando SDL");

            Hardware.Ancho = ancho;
            Hardware.Alto = alto;

            if(pantalla_completa)
            {
                flags |= Sdl.SDL_FULLSCREEN;
            }

            #region video

            if(Sdl.SDL_Init(Sdl.SDL_INIT_VIDEO) < 0)
            {
                Console.WriteLine("No se pudo inicar el sistema de video");
                Console.WriteLine("ERROR: {0}", Sdl.SDL_GetError());
                Environment.Exit(1);

            }

            bpp = Sdl.SDL_VideoModeOK(ancho, alto, colores, flags);

            if(bpp == 0)
            {
                Console.WriteLine("No se pudo establecer el modo de video");
                Console.WriteLine("ERROR: {0}", Sdl.SDL_GetError());
                Environment.Exit(1);
            }

            pantalla = Sdl.SDL_SetVideoMode(ancho, alto, bpp, flags);
            #endregion

            #region Fuentes

            if(SdlTtf.TTF_Init() < 0)
            {
                Console.WriteLine("No se pudo inicar el manejador de fuentes");
                Console.WriteLine("ERROR: {0}", Sdl.SDL_GetError());
                Environment.Exit(1);
            }

            #endregion

            origen = new Sdl.SDL_Rect(0 , 0, ancho, alto);
            //Sdl.SDL_SetClipRect(pantalla, ref origen);

            #region Sonido

            if(Sdl.SDL_InitSubSystem(Sdl.SDL_INIT_AUDIO) < 0)
            {
                Console.WriteLine("No se pudo inicar el sistema de audio");
                Console.WriteLine("ERROR: {0}", Sdl.SDL_GetError());
                SonidoActivo = false;
            }
            else
            {
                SonidoActivo = true;
            }

            if(SonidoActivo)
            {
                if(SdlMixer.Mix_OpenAudio(22050, Sdl.AUDIO_S16, 2, 4096) < 0)
                {
                    Console.WriteLine("No se pudo inicar el mezclador de audio");
                    Console.WriteLine("ERROR: {0}", Sdl.SDL_GetError());
                    SonidoActivo = false;
                }
            }

            AlmacenSonidos.Inicializar();

            #endregion

            Console.WriteLine("SDL inicializado con exito");

            Sprite boton = new Sprite("Assets/Botones/boton.png");

            fuente = new Fuente("Assets/Fuentes/FreeSansBold.ttf", 14);
            CambiarColorTexto(0,0,0);

            boton.Mover(650, 100);
            boton.Dibujar();
            EscribirTexto("Arriba", 685, 115);

            boton.Mover(650, 154);
            boton.Dibujar();
            EscribirTexto("Abajo", 685, 169);

            boton.Mover(650, 207);
            boton.Dibujar();
            EscribirTexto("Izquierda", 685, 222);

            boton.Mover(650, 270);
            boton.Dibujar();
            EscribirTexto("Derecha", 685, 285);

            boton.Mover(650, 324);
            boton.Dibujar();
            EscribirTexto("Buscar", 685, 339);

            fuente = new Fuente("Assets/Fuentes/FreeSansBold.ttf", 20);
        }
Beispiel #7
0
        public static void DibujarSprite(Sprite sprite)
        {
            Sdl.SDL_Rect destino = sprite.GetRectangulo();
            IntPtr imagen = sprite.ApuntadorImagen;

            Sdl.SDL_BlitSurface(imagen, ref origen, pantalla, ref destino);
        }
Beispiel #8
0
        public static void DibujarFondo()
        {
            Sprite pasto = new Sprite("Assets/GFX/pasto.jpg");

            for(int i = 0; i < 20; i++)
            {
                for(int j = 0; j < 20; j++)
                {
                    pasto.Mover(i * pasto.Ancho, j * pasto.Alto);
                    pasto.Dibujar();
                }
            }
        }
Beispiel #9
0
        public override void Iniciar()
        {
            mapa = CargadorMapas.Mapa;

            //TODO:
            //Quitar de todos el tamaño fijo
            for(int i = 0; i < 20; i++)
            {
                for(int j = 0; j < 20; j++)
                {
                    if(mapa[i][j] == EditorMapas.CASA)
                    {
                        requierePosicionarCasa = true;
                        //Console.WriteLine("Casa en {0},{1}", i, j);
                        //this.casa = sprites[i,j] = new Sprite("Assets/GFX/casini.png");
                    }
                    else if(mapa[i][j] != 0)
                    {
                        //Console.WriteLine("{2} en {0},{1}", i, j, mapa[i][j]);
                        sprites[i,j] = new Sprite("Assets/GFX/"+mapa[i][j]+".png");
                        mapa[i][j] = -1;
                    }

                    if(sprites[i,j] != null)
                    {
                        sprites[i,j].Mover((short)(i * sprites[i,j].Ancho),(short) (j * sprites[i,j].Alto));
                    }
                }
            }

            PosicionarKibus();
            requierePosicionarCasa = false;
            //El entrenamiento puesun
            ConfeccionarCamino();

            kibus.Mover(rectanguloOrigen);

            //Algoritmo.Dijkstra(arregloNodosTotal, arregloNodosTotal[kibus.OnToyY + kibus.OnToyX * 20], arregloNodosTotal[casa.OnToyY + casa.OnToyX * 20]);
            do
            {
                try
                {
                    if(arregloNodosTotal[kibus.OnToyY + kibus.OnToyX * 20] != null)
                    {
                        Queue<Direccion> movimientosASeguir = Algoritmo.PrimeroElMejor(arregloNodosTotal[kibus.OnToyY + kibus.OnToyX * 20], arregloNodosTotal[casa.OnToyY + casa.OnToyX * 20]);

                        while(movimientosASeguir.Count != 0)
                        {
                            kibus.Mover(movimientosASeguir.Dequeue());
                            DibujarTodo();
                            Hardware.EscribirTexto("Llendo a Casa", 641, 10);
                            Hardware.RefrescarPantalla();
                            Hardware.Pausar(100);
                        }
                    }
                    else
                    {
                        Hardware.EscribirTexto("No hay informacion suficiente desde este nodo", 2, Hardware.Alto/4);
                    }
                }
                catch(ArgumentOutOfRangeException)
                {
                    Hardware.EscribirTexto("No hay informacion suficiente desde este nodo", 2, Hardware.Alto/4);
                }

                Hardware.EscribirTexto("Presiona enter para poner a kibus en otro lugar, esc para terminar", 2, Hardware.Alto/2);
                Hardware.RefrescarPantalla();
                while(!Hardware.TeclaPulsada(Sdl.SDLK_RETURN) && !Hardware.TeclaPulsada(Sdl.SDLK_ESCAPE))
                {
                    Hardware.Pausar(20);
                }

                if(Hardware.TeclaPulsada(Sdl.SDLK_RETURN))
                {
                    //reiniciar valores de las banderas
                    foreach(Nodo nodini in arregloNodosTotal)
                    {
                        if(nodini != null)
                            nodini.Visitado = false;
                    }

                    PosicionarKibus();
                }
                else if(Hardware.TeclaPulsada(Sdl.SDLK_ESCAPE))
                    break;
            }while(true);

            /*List<Nodo> configuracionDeMapa = new List<Nodo>(arregloNodosTotal);

            #region activar para ver ordenada la configuracion
            for(int i = 0; i < configuracionDeMapa.Count;i++)
            {
                if(configuracionDeMapa[i] == null)
                {
                    configuracionDeMapa[i] = new Nodo();
                    configuracionDeMapa[i].numeroDeNodo = Int32.MaxValue;
                }
            }
            configuracionDeMapa.Sort(comparadorDeNodos);
            #endregion
            */

            foreach(Nodo n in arregloNodosTotal)
            {
                if(n != null)
                    Console.WriteLine(n.ToString());
            }
        }