on martes, 25 de octubre de 2011

Que tal, ahora vamos a ver la forma de como graficar cuadros en c sharp.


  • Lo primero que necesitas es crear un nuevo proyecto de tipo windows form

  • Una vez que tenemos creado nuestro proyecto, agregamos un menuStrip en nuestra forma y agregamos un elemento llamado Generar cuadro.

menuStrip
  • Ahora vamos a ver como crear un cuadro en c#.
lo primero que necestamos saber, es que en c-sharp tenemos la clase Graphics, la cual nos permite hacer una instancia en base a una instancia de la clase Form.

 Graphics grafics = this.CreateGraphics();

Aquí estamos creando una instancia de la clase Graphics, notese que no se usa la palabra reservada new para hacer la instancia, si no que la forma o cualquier clase que herede de Form tiene un metodo llamado CreateGraphics(); que nos permite generar una instancia de un objeto Graphics.

Una vez teniendo nuestro objeto Graphics, es necesario saber como dibujuar un cuadro. Para eso es necesario un método llamado GraficarCuadro(int x, int y, int width, int height, Color color), y lo agregamos al archivo .cs de nuestra forma.

        private void GraficarCuadro(int x, int y, int width, int height, Color color)
        {
            Graphics grafics = this.CreateGraphics();
            Rectangle rectangulo = new Rectangle(x, y, width, height);
            SolidBrush brush = new SolidBrush(color);
            Pen pluma = new Pen(brush);
            grafics.FillRectangle(brush, rectangulo);
        }

Con este método podemos graficar cuadros y rectángulos de un determinado tamaño y color. pero lo que nos interesa a nosotros es como generar una cantidad aleatoria de cuadros en la pantalla, para esto, es necesario introducir el siguiente código en nuestro evento onclick de nuestro elemento del menuStrip, en mi caso, el nombre del item del menuStrip se llama generarCuadrosALoEstupido.

        private void generarCuadrosALoEstupidoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Random random = new Random(DateTime.Now.Millisecond);

            for (int i = 0; i < 50; i++) // nota1
            {
                GraficarCuadro(random.Next(10, this.Width), random.Next(10, this.Height), 
                random.Next(1, 200), random.Next(1, 200),
                Color.FromArgb(random.Next(0, 256),random.Next(0, 256),random.Next(0, 256)));
                Thread.Sleep(300);
            }
        }

nota1: notese que la cantidad de cuadros que se graficaran sera de 50, aqui se le puede cambiar de manera que el usuario indique cuantos cuadros se necesitan graficar.


  • El programa en tiempo de ejecución:

generarCuadrosAloEsutpido
on sábado, 15 de octubre de 2011
Que tal, en esta ocasión vamos a crear una clase llamada Matriz, la cual va a ser una plantilla para cualquier tipo de dato en c-sharp.

Dicha clase va a tener un arreglo bidimensional de registros, el numero de renglones y de columnas.

Aquí les dejo el código:

//--------------------------------------------------------------------------------------

using System;
using System.Collections.Generic;
using System.Text;

public class Matriz<T>
{
    private T[,] registros;

    private int numeroRenglones;

    public int NumeroRenglones
    {
        get { return numeroRenglones; }
        set { numeroRenglones = value; }
    }

    private int numeroColumnas;

    public int NumeroColumnas
    {
        get { return numeroColumnas; }
        set { numeroColumnas = value; }
    }

    public Matriz(int renglones, int columnas)
    {
        NumeroRenglones = renglones;
        NumeroColumnas = columnas;
        this.registros = new T[renglones, columnas];

    }

    public T this[int renglon, int columna]
    {
        get
        {
            return registros[renglon, columna];
        }
        set
        {
            registros[renglon, columna] = value;
        }
    }
}
//-----------------------------------------------------------------------------------------

Lo interesante de esta clase es la forma de asignación al objeto Matriz, para asignar directamente al objeto un registro, se hace uso del método "public T this[int renglon, int columna]", veamos un ejemplo de como usar esta clase:

Matriz<bool> tableroBooleano = new Matriz<bool>(8, 8);
tableroBooleano[0,0] = false;

Un Saludo...

Buena Vibraaaa!!!!
on miércoles, 12 de octubre de 2011
Que tal, en esta ocasión vamos a trabajar en la graficacion de un simple tablero de ajedrez en c sharp.

1.- Primero que nada necesitamos crear un nuevo proyecto de tipo windows form


2.- Ahora en nuestra forma, agregamos un MenuStrip


3.- Implementación del código necesario para graficar un tablero de ajedrez.


        public void DibujarTableroDeAjedrez(Form forma)
        {
            bool blanco = true;
            int anchoCuadricula = 30;
            int x = 40, y = 40;
            for (int i = 0; i < 8; i++)
            {
                for (int j = 0; j < 8; j++)
                {
                    if (blanco)
                    {
                        FxTools.GraficarCuadro(forma, Color.FromArgb(0, 255, 0), x, y, anchoCuadricula);
                        blanco = false;
                    }
                    else
                    {
                        FxTools.GraficarCuadro(forma, Color.FromArgb(0, 0, 0), x, y, anchoCuadricula);
                        blanco = true;
                    }
                    x +=31;
                }
                if (blanco)
                    blanco = false;
                else
                    blanco = true;
                x = 40;
                y += 31;
            }
        }

//-----------------------------------------------------------------------------------------------------------
este es el código necesario para graficar un tablero de ajedrez, como ven, tenemos de una bandera que nos servirá cuando pintar un cuadro de color blanco y cuando no, tenemos un ancho de cuadricula, que por defecto es 30 (por fines didácticos se estableció hardcode los valores de "anchoCuadricula", "x" y de "y".

Contamos con dos bucles que nos servirán para recorrer la cuadricula, la dimensión de un tablero de ajedrez es de 8 x 8, que nos da un total de 64 casillas.

en cada casilla se establecerá un color, ya sea blanco o negro, todo esto va a depender de la bandera "blanco", para obtener el color blanco, lo podemos obtener de varias formas, en esta ocasión se obtiene por medio del método estático  FromArgb de la clase Color


En el caso de graficar el color, para el color blanco se opta poner el color verde (0,255,0) y en el caso de las casillas oscuras, el color negro (0,0,0)


4.- creando la clase FxTools e implementando el metodo GraficarCuadro



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Windows.Forms;


namespace EjemploBlog
{
    class FxTools
    {
        public static void GraficarCuadro(Form forma, Color color, int x, int y, int ancho)
        {


            SolidBrush solidBrush = new SolidBrush(color);
            Graphics g = forma.CreateGraphics();
            g.FillRectangle(solidBrush, x, y, ancho, ancho);
        }
    }
}


5.- accesando al metodo DibujarTableroDeAjedrez(Form forma)


Ya para terminar con este ejemplo, vamos a mandarlo llamar de nuestro MenuStrip:



        private void tableroDeAjedrezToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DibujarTableroDeAjedrez(this);
        }



6.- el programa en tiempo de ejecución 



tableroDeAjedrez
on lunes, 3 de octubre de 2011

Actitud proactiva.
la primer cualidad que todos debemos de tener, en lo personal, el exito de nuestro proyecto depende de tener buena actitud. Afrontar las adverisdades de una manera efectiva, no dejarnos consumir por la presión abrumadora. Tener siempre una sonrisa en el rostro, al final de cuentas estamos haciendo lo que mas nos gusta... “Software”.

Estandarización de nombres de variables, métodos y clases.
supongamos que tenemos que revisar el código de algún colega de trabajo, con lo cual tenemos que revisar sobre lo que ha estado trabajando. analizando el código llegamos a la cuenta de que no sabemos lo que se hace, ya que solo encontramos nombres de variables mal definida,por ejemplo: valor1, valor2, valor3, cantidad1, cantidad2, cantidad3, resultado2, col1, col2, col3. Estoy de acuerdo de que nuestro colega encuentra una manera clara de ver el significado al nombre de sus variables, pero ese código debe de ser completamente legible por otros desarrolladores. Es por lo cual se tiene que hacer una estandarización de nombres de variables, métodos y clases. sin olvidar seguir la estandarización de cada lenguaje de programacion. en el caso de java, los métodos siempre comienzan con minúscula. en c# .net  los métodos comienzan siempre con mayúscula.
En cuanto a los métodos, es recomendable que se asigne un nombre significativo y completamente claro. por ejemplo:

“GenerarFacturaElectronica(Factura factura); “
al leer este método, nos queda claro de que se va a generar una factura electronica que recibe como argumento a un objeto de la clase Factura; Ademas que no hace falta poner comentarios de lo que hace dicho metodo.

Adoptar el paradigma Orientado a Objetos.
con el paradigma orientado a objetos tenemos la ventaja de reutilizar codigo, todo esto con el fin de aprovechar al máximo los pilares de la programación orientada a objetos
  • Abstracción
  • Encapsulacion
  • Herencia
  • Polimorfismo
  • Introspección
  • Reflexión  
Diseñar e implementar patrones de diseño en todos los proyectos que lo ameriten.
los patrones de diseño nos pemiten la venteja de resolver problemas complejos de programacion que tienen una cierta conducta, en base a esta peculiaridad podemos concretar en un mejor diseño, abstrayendo la escénica en un patron.

Identar el código.
Es muy importante tener identado nuestro código. Con esto se cumple un estándar entre
los programadores de software. Asi cuando alguien vea tu código, este se familiarizara           mucho mas fácil con el código. Ademas de aportar belleza en la estructura del codigo.

Versionar
Versionar nuestro software con herramientas de servidor de versiones como tortoise.
Con estas herramientas nos olvidamos de la preocupación de los respaldos, haciendo esto mas ágil el proceso de desarrollo.

Generar herramientas
Es muy buena practica ir armando nuestra colección de clases que nos permitan hacer el trabajo de una manera mas rápida y eficiente.
Mientras nos encontremos en un proceso de generación de herramientas, debemos adquirir la buena practica de ir acomodando nuestras clases en librerías (dll). Esto con el fin de poder exportar nuestras herramientas de un determinado lenguaje a otro.

Imaginacion.
Desarrollar software, tocar guitarra, pintar al oleo, escribir un libro, escribir poesia, entre muchas cosas mas. Sin la imaginacion no se llegara muy lejos en nuestra vocacion.


fuentes:
Experiencia personal y experiencia de otros desarrolladores que me han ayudado en adoptar buenas                      tecnicas de programacion