jueves, 10 de mayo de 2012

Usando Skins en C#

Una forma de cambiar los tipos clásicos de ventanas de windows, que pueden resultar tediosos, es usar Skins.

Tiene problemas de compatibilidad con windows 7 pero si trabajan en XP sale de maravilla.

http://todonet.wordpress.com/2008/09/09/usando-skin-en-net/

En esta pagina hay buena información ademas de skins y un archivo para crear el objeto skin en el entorno de .NET

Espero que les guste : )

martes, 8 de mayo de 2012

Problemas al momento de la conexión de la base de datos a la aplicación

Al momento de la conexión de la base de datos tuvimos diferentes problemas que se detallarán a continuación.

- Uno de ellos fue tener la version Express del SQL Server 2008 ya que en los laboratorios de la universidad ocupamos el SQL Server 2008 R2, esta fue una de las cosas que nos ocurrió a nosotros.

- Otro problema que no fue solucionado fue cuando queríamos ocupar el Data Grid View para presentar en el mismo la consulta del nombre del participante, cuantas veces ganó. La cual se la presenta implementada la consulta en SQL Server 2008 y es la siguente:
Select Nombre, COUNT (Nombre) as 'Numero Veces Ganado'
from Estadisticas
where Gana = 'True'
 group by Nombre



- Otro gran problema enfrentado fue al momento de tener los labels del TableLayoutPanel esta información ir ingresando a la base de datos.


domingo, 6 de mayo de 2012

Conexión de la aplicación a la base de datos implementada en SQL Server 2008

Para conectar a la base de datos es parte del evento click Guardar del form estadísticas como mencionamos anteriormente este form fue creado con el propósito de hacer de una manera sencilla la conexión a la base de datos.

Aqui la muestra del botón Guardar la parte implementada del código:


 SqlConnection conexionSql = new SqlConnection();

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            try
            {

                conexionSql.ConnectionString = @"Data Source=USER-PC\SQLEXPRESS;Initial Catalog=CarreraCaballos;Integrated Security=True";

                conexionSql.Open();

                SqlCommand query = new SqlCommand("INSERT INTO Estadisticas(Nombre, idCaballo, Apuesta,Gana,Disponible ) VALUES(@Nombre, @idCaballo, @Apuesta, @Gana,@Disponible)", conexionSql);

                query.Parameters.AddWithValue("@Nombre", lblN1.Text);

                query.Parameters.AddWithValue("@idCaballo", lblC1.Text);

                query.Parameters.AddWithValue("@Apuesta", lblA1.Text);

                query.Parameters.AddWithValue("@Gana", lblG1.Text);

                query.Parameters.AddWithValue("@Disponible", lblD1.Text);

                query.ExecuteNonQuery();


                //
                query = new SqlCommand("INSERT INTO Estadisticas(Nombre, idCaballo, Apuesta,Gana,Disponible ) VALUES(@Nombre, @idCaballo, @Apuesta, @Gana, @Disponible)", conexionSql);

                query.Parameters.AddWithValue("@Nombre", lblN2.Text);

                query.Parameters.AddWithValue("@idCaballo", lblC2.Text);

                query.Parameters.AddWithValue("@Apuesta", lblA2.Text);

                query.Parameters.AddWithValue("@Gana", lblG2.Text);

                query.Parameters.AddWithValue("@Disponible", lblD2.Text);


                query.ExecuteNonQuery();

                //
                query = new SqlCommand("INSERT INTO Estadisticas(Nombre, idCaballo, Apuesta,Gana,Disponible ) VALUES(@Nombre, @idCaballo, @Apuesta, @Gana, @Disponible)", conexionSql);

                query.Parameters.AddWithValue("@Nombre", lblN3.Text);

                query.Parameters.AddWithValue("@idCaballo", lblC3.Text);

                query.Parameters.AddWithValue("@Apuesta", lblA3.Text);

                query.Parameters.AddWithValue("@Gana", lblG3.Text);

                query.Parameters.AddWithValue("@Disponible", lblD3.Text);


                query.ExecuteNonQuery();

                MessageBox.Show("Los datos se han actualizado", "Actualizacion", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
            }

            catch (Exception ex)
            {
                MessageBox.Show(" No se pudo actualizar los datos", ex.ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
                             
        }




sábado, 5 de mayo de 2012

Visualizar el final de cada carrera en el form Estadísticas

Una vez finalizada la carrera en el form principal al momento de hacer click en el botón estadísticas me aparece un informe de la carrera.





jueves, 3 de mayo de 2012

Creación del Form Estadísticas

La creación de este form se lo realizó para observar y tener una estadística o información una vez terminada la carrera de caballos. Este form de cierta forma fue de gran ayuda para luego guardar la información en la base de datos.
En este form se colocó un TableLayoutPanel.


miércoles, 2 de mayo de 2012

Creación de la Base de Datos Implementada en SQL Server 2008

La base de datos CarreraDeCaballos fue creada en SQL Server 2008 con sus campos Nombre, IdCaballo, Apuesta, Gana, Disponible.

Estos campos van a ser llenados mediante el código implementado en nuestra aplicación.


domingo, 22 de abril de 2012

Para el uso de Hilos en C#

Se adjunta un link para el trabajo con hilos que fue de fundamental importancia para el moviemiento aleatorio de los caballitos.

Unos links de los cuales nos ayudaron:
- http://www.canalvisualbasic.net/manual-net/c-sharp/#Threading
- http://www.arcanus.com.ar/2008/03/16/hilos-y-multitarea-en-c/
- http://www.eslomas.com/2006/01/creacion-hilos-con-parametros-csharp/

Creación de la clase Apuesta

La implementación de esta clase se la realizó para el manejo de las apuestas a cada uno de los caballos.

Cabe recalcar algo importante en esta clase usamos lo visto en clase, cuyo tema es el de enumeración.


Creación de la clase Jugador

Esta clase Jugador fue implementada para controlar a los jugadores cabe recalcar que esta clase va a tener relación con la clase apuesta, la cual también manejará algunos controles en el form principal.

Dentro de las variables para esta clase están:
- nombre
- apuesta
- bolsa
- miRadioButton
- miLabel

Los métodos que va a tener esta clase va a estar los siguientes:


sábado, 21 de abril de 2012

Creación del Método IrAlinicio

Esté método fue creado para poder reiniciar la carrera.


Problemas al momento de implementar el método correr para la clase Caballo

Al momento de implementar el método correr de la clase Caballo tuvimos grandes inconvenientes, ya que tuvimos que conocer acerca del random para la aleatoriedad del movimiento de los caballos.
Al principio tratamos de implementar este método con la ayuda de un Timer.
Pero en busca de ayudas a este problema conocimos y recordamos el uso de hilos que nos ayudarían en esto, por esta razón se tomó la iniciativa de implementar este método con la ayuda de hilos.

A continuación el código implementado en el form Principal para el movimiento aleatorio de los caballos.


private void btnIniciar_Click(object sender, EventArgs e)
        {
            Habilitar();

                                             
            while (picCaballos.Location.X <= picMeta.Location.X)
            {
                for ( ; ; )
                {

                    Thread.Sleep(30);
                    foreach (Caballo caballo in caballosCompetidores)
                    {
                        Thread.Sleep(30);
                        if (caballo.Correr() == true)
                        {
                            if (picCaballo1.Location.X >= picMeta.Location.X-picCaballo1.Width)
                            {
                                haGanado = 1;
                               
                                MessageBox.Show("El caballo ganador es el caballo 1", "Caballo Ganador",
                                    MessageBoxButtons.OK,MessageBoxIcon.Information);
                               
                             
                               
                            }
                            if (picCaballo2.Location.X >= picMeta.Location.X - picCaballo2.Width)
                            {
                                haGanado = 2;
                                MessageBox.Show("El caballo ganador es el caballo 2", "Caballo Ganador",
                                    MessageBoxButtons.OK, MessageBoxIcon.Information);
                               
                            }
                            if (picCaballo3.Location.X >= picMeta.Location.X - picCaballo3.Width)
                            {
                                haGanado = 3;
                                MessageBox.Show("El caballo ganador es el caballo 3", "Caballo Ganador",
                                    MessageBoxButtons.OK, MessageBoxIcon.Information);
                               
                            }
                            if (picCaballo4.Location.X >= picMeta.Location.X - picCaballo4.Width)
                            {
                                haGanado = 4;
                                MessageBox.Show("El caballo ganador es el caballo 4", "Caballo Ganador",
                                    MessageBoxButtons.OK, MessageBoxIcon.Information);
                               
                            }
                            Resta();
                            return ;
                        }
                    }
                 
                }

            } 
           
        }



jueves, 19 de abril de 2012

Control de los diferentes controles en el form Principal

Para el manejo de cada control se lo implementó en cada una de las clases y dentro del código del form del load.

Para el control de estos mismos controles se los hizo con lazos de comprobación, con la ayuda de la enumeración.


domingo, 15 de abril de 2012

Problemas al momento de definir el tamaño de los picture box de cada caballo

Otro problema enfrentado fue el del picture box de la pista es decir el picture box más grande y cada uno de los picture box de cada caballo. Se debía considerar que el tamaño tanto del form grande como del de cada uno de los caballos y esté en múltiplo de 4 el tamaño de cada uno de los mensionados.

Hay que notar que en nuestro proyecto colocamos un picture box de la meta el cual también está considerado con sus dimensiones correctas. Esto fue algo importante ya que nuestro randomico iba de 1 a 4. Además esto de la meta había que detectar cuando el caballo llega a la meta.


sábado, 14 de abril de 2012

Creación de la clase Caballo

Al momento de implementar la clase caballo como variables tenemos:
- posiciónInicial
- longitudCarrera
- imagen
- ubicación
- movimiento
Como métodos para esta clase tendremos los siguientes:
- Correr( )
- IrAlInicio( )


Creación Del Form Principal del HIPÓDROMO

Creación del form principal que será manipulado por las clases a implementarse. El form principal tendrá un picture box de la pista de caballos, 4 picturebox para cada uno de los caballos corredores.
Además se presentará en un groupBox los radiobuttons y demás controles que serán manejados por las clases antes mencionadas.


lunes, 9 de abril de 2012

Lluvia de ideas para la cración del proyecto,

En clases se dió el esqueleto de las clases que se realizarán para el proyecto en C# cuya aplicación es HIPÓDROMO.
Las clases a implementarse son Caballo, Jugador, Apuesta que serán las encargadas de controlar al form principal.