Mostrando entradas con la etiqueta c#. Mostrar todas las entradas
Mostrando entradas con la etiqueta c#. Mostrar todas las entradas
on sábado, 3 de mayo de 2014
Que tal buen día.

Hoy vamos a ver como pintar caracteres en la consola de c#.

Básicamente el método mas importante que estaremos utilizando se llama SetCursorPosition() de la clase Console.

Para pintar un carácter utilizamos el método Console.WriteLine(), también se podría utilizar el método Console.Write()

using System;
using System.Threading;

namespace pointsInConsole
{
    class Program
    {
        static void Main(string[] args)
        {
           Random random = new Random(DateTime.Now.Millisecond);

            int x = 0, y = 0;

            while (true)
            {
                x = random.Next(0, 79);
                y = random.Next(0, 23);

                Console.SetCursorPosition(x,y);
                Console.WriteLine((char)random.Next(0,30));
                Thread.Sleep(200);
            }
        }
    }
}

En este ejemplo también usamos a la clase Random que nos permite obtener números de manera aleatoria.

Y a continuación les dejo un video de cómo fue programado este ejemplo.




Gracias.
on domingo, 6 de abril de 2014

Buen día.

Para poder agregar comillas dobles dentro de una cadena, lo único que tenemos que hacer poner las comillas de esta forma: \”



Veamos un ejemplo:

using System;

namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            string myValue = "asi se agregan las \"comillas dobles\"";

            Console.WriteLine(myValue);

            Console.ReadKey();
        }
    }
}


y asi es la salida de nuestro programa.



















gracias!!
on martes, 1 de abril de 2014
Que tal.

Buscando en mis archivos cuando era estudiante, me topé con una serie de proyectos que en su momento me costaron mucho tiempo y no tienen las mejores de las prácticas y sobre todo algunas materias recruzadas.

El día de hoy veremos un proyecto que  me toco realizar en estructura de datos.

Este proyecto se trata del acertijo de las 8 reinas y el acertijo del caballo.

Comencé primero por el acertijo de las reinas, de pronto no podía escribir nada, sentía que diseñar clases basados en el ajedrez, debían de estar bien diseñadas, al menos pretendía hacerlo de una manera más estructurada y con más infraestructura.

Podemos ver a simple vista, que una pieza de ajedrez puede moverse regida por ciertos movimientos con restricción a la pieza que se va a mover.

Los peones avanzan hacia adelante.

Las torres se mueven en línea recta, de manera vertical u horizontal, no pueden saltar piezas.

Los alfiles se mueven de forma diagonal, al igual que las torres no pueden brincar piezas.

Los caballos, se mueven en forma de L, ellos sí que saltan a las piezas.

Reina, se mueve para done quiera menos de forma de L y no puede saltar piezas.

El rey se mueve para cualquier dirección pero solo un movimiento.

Hasta aquí todo sencillo, nada más que las reglas básicas del ajedrez.

Cuando sumamos la complejidad de que un peón puede convertirse en cualquier pieza.

Me recordó bastante al patrón de estrategia.

Podemos notar que un movimiento es un comportamiento y deducimos que una pieza de ajedrez podría moverse a cualquier lado de acuerdo a su movimiento actual y su condición.

Quise intentar diseñar todo este tipo de reglas.

Aquí podrán observar la estructura de clases.



Aquí les dejo la implantación del acertijo de las 8 reinas:

         public void Insertar8Reinas( bool[] prenglones, bool[] pcolumnas,Reina reina,ref             int numeroSoluciones,int nReinas)
        {  
            int renglon = 0, columna = 0;
            bool[] lrenglones = (bool[])prenglones.Clone();
            bool[] lcolumnas = (bool[])pcolumnas.Clone();
            if (comparaBooleanos.ComparaArreglo(prenglones))
            {
                tableros[numeroSoluciones] = new TableroAjedrez();
                numeroSoluciones++;
                return;
                            
            }
            else
            {
                           
                    renglon = comparaBooleanos.TomaCualquierDelArreglo(prenglones);
                    lrenglones[renglon] = true;
                    while (!comparaBooleanos.ComparaArreglo(lcolumnas))
                    {
                       
                        columna = comparaBooleanos.TomaCualquierDelArreglo(lcolumnas);
                        if (columna == -1)
                            return;
                        lcolumnas[columna] = true;
                        reina.X = renglon;
                        reina.Y = columna;
                        if (reina.SePuedeInsertar(reina, this))
                        {
                            tablero[renglon, columna] = reina;
                            Console.SetCursorPosition(renglon, columna);
                            Console.WriteLine("R");
                            Thread.Sleep(500);
                            pcolumnas[columna] = true;
                            this.Insertar8Reinas(lrenglones,pcolumnas,reina,ref                                          numeroSoluciones, ++nReinas);
                            nReinas--;
                            pcolumnas[columna] = false;
                            //prenglones[renglon] = true;
                            tablero[renglon, columna] = null;
                            Console.SetCursorPosition(renglon, columna);
                            Console.WriteLine(" ");
                            Thread.Sleep(500);
                        }                      
                    }
            }
        }
on sábado, 22 de febrero de 2014


Muy buena noche.

El día de hoy vamos a explicar o al menos tratar de explicar la función del patrón de estrategia.

Recordando a dos grandes pilares del paradigma orientado a objetos. El patrón de estrategia usa como base a la herencia y al polimorfismo.

Usando nuevamente el ejemplo de drogadictos, vamos a comenzar a diseñar nuestra clase protagonista.

Drogadicto.

Esta clase pertenece a un sujeto que consume varias sustancias consideradas drogas.
Veamos la codificación:

public class Drogadicto
{
    public string Nombre { get; set; }

    public IDroga Droga { get; set; }

    public void Drogarse()
    {
        Droga.ConsumirDroga();
    }
}

Esta clase puede hacer instancias a objetos con un nombre y una droga y un método de consumo.

Veamos las otras clases.

Nuestra interfaz droga que va a interactuar con el sujeto.

public interface IDroga
{
    void ConsumirDroga();
}


Nuestra clase abstracta Droga:

public abstract class Droga
{
    protected TipoDeDroga tipoDeDroga;

    protected Droga()
    {
       
    }
}

Algunas clases ejemplo de una clase base Droga.

public class Marihuana : Droga, IDroga
{
    public Marihuana()
    {
        tipoDeDroga = TipoDeDroga.Marihuana;
    }

    public void ConsumirDroga()
    {
        Console.WriteLine("fumando hierba");
    }
}

public class Peyote : Droga,IDroga
{
    public Peyote()
    {
        tipoDeDroga = TipoDeDroga.Peyote;
    }

    public void ConsumirDroga()
    {
        Console.WriteLine("consumiendo peyote");
    }
}

La clase peyote y la clase marihuana heredan y Droga e implementan su interfaz IDroga, recuerden que es para que interactue con el sujeto.



Para poder identificar una variedad de sustancias, un enumerado:

public enum TipoDeDroga
{
    Marihuana, Cigarro, Cerveza, Peyote, Lsd
}


Como pueden ver, la acción de ConsumirDroga, es la implementación de la interfaz IDroga.
Ahora veamos el siguiente escenario.




Un sujeto consume marihuana, después de eso consume peyote:
   class Program
    {
        static void Main(string[] args)
        {
            Drogadicto drogadicto1 = new Drogadicto {Droga = new Marihuana()};
            drogadicto1.Drogarse();
            drogadicto1.Droga = new Peyote();
            drogadicto1.Drogarse();
            Console.ReadKey();
        }
    }


Cualquier duda al respecto o alguna observación para mejorar en el código, háganmela saber, se los agradecería.

No sin antes agradecer a Alan Bazán que fue el que me enseño este ejemplo que fue la pauta para seguir aprendiendo sobre los objetos.

Un saludo.

on martes, 21 de enero de 2014


Muy buen día


El día de hoy tocaremos el tema de dos de los pilares fundamentales del paradigma orientado a objetos.

En una ocasión anterior se habló un poco más a detalle de la herencia, en esta ocasión quisiera poder hablar sobre el polimorfismo llevado de la mano con la herencia, pueden ver el articulo desde este enlace: http://www.apuntesbinarios.com/2013/09/herencia.html.

En mi época de estudiante, los profesores solían explicar el tema de polimorfismo con ejemplos clásicos como la clase animal y sus clases derivadas y un método en común Interactuar()
El gato decía “Miau” el perro “guau guau” etc etc.

Ahora me gustaría explicarles este tópico pero con un ejemplo poco común que creo se adapta muy bien al panorama didáctico.

Imaginemos que tenemos que diseñar un videojuego de rol llamado “Drogadictos”
En el juego, tú creas tu avatar y eliges una habilidad, que en este caso será un vicio.
 
En este caso elegiremos tres vicios comunes en la sociedad.

  • Tabaquista
  • Alcoholico
  • Marihuano
Entonces, nosotros como desarrolladores de software encargados de diseñar este juego de rol, comienzas con la polémica del diseño de software, como diseñar tus clases.

Comencemos a implementar una clase base, abstracta, llamada Drogadicto.

    public abstract class Drogadicto
    {
        public Drogadicto(string nombre)
        {
            this.Nombre = nombre;
        }

        public string Nombre { get; set; }

        public abstract void Drogarse();
    }

Para este primer boceto, esperemos que nuestro líder de proyecto no nos regrese nuestro trabajo.
Teniendo nuestra clase Drogadicto. Vamos a comenzar a crear nuestras clases derivadas.
       //la clase deberia llamarse Tabaquista **update
    public class Cigarrero : Drogadicto
    {
        public Cigarrero(string nombre):base(nombre)
        {
           
        }

        public override void Drogarse()
        {
            Console.WriteLine("fumando un cigarro");
        }
    }

    public class Marihuano : Drogadicto
    {
        public Marihuano(string nombre):base(nombre)
        {
           
        }

        public override void Drogarse()
        {
            Console.WriteLine("Welcome to tijuana, tequila sexo y marihuana");
        }
    }

    public class Alcoholico:Drogadicto
    {
        public Alcoholico(string nombre):base(nombre)
        {
           
        }

        public override void Drogarse()
        {
            Console.WriteLine("bebiendo... bebiendo... glu glu glu");
        }
    }

Como pueden notar, todas estas clases tienen algo en común, Comparten el método Drogarse() de la clase base Drogadicto.

 Ahora veamos un ejemplo práctico de polimorfismo.

        static void Main(string[] args)
        {
            Marihuano marihuas = new Marihuano("marihuas");
                     
                     //Tabaquista tabaquista = new Tabaquista("tabaquista");
            Cigarrero cigarrero = new Cigarrero("cigarrero");

            Alcoholico alcoholico = new Alcoholico("alcoholico");

            List<Drogadicto> drogadictos = new List<Drogadicto>();

            drogadictos.Add(marihuas);
            drogadictos.Add(cigarrero);
            drogadictos.Add(alcoholico);

            foreach (var drogadicto in drogadictos)
            {
                Console.WriteLine(drogadicto.Nombre+ " ");
                drogadicto.Drogarse();
                Console.WriteLine("--------------------------");
            }

            Console.ReadKey();
        }

Como ven, tenemos tres drogadictos, cada uno consume su vicio.

y asi se ven en pantalla:



En el foreach, se ve claramente el polimorfismo. Cada drogadicto, ejecutando su acción Drogarse.

Eso es polimorfismo, de multiples formas De múltiples formas.
Espero que este ejemplo haya sido claro y conciso, no pretendía dar un ejemplo de escuela, para eso están las escuelas J lo que pretendía era dar un ejemplo poco común y que explicara de forma clara lo que es la herencia y el polimorfismo trabajando a la par.



El contenido en este artículo es meramente didáctico, no pretende ofender a nadie, cualquier parecido con la realidad es mera coincidencia.