lunes, 16 de marzo de 2015

Un juego de rompecabezas

Saludos muchachos en esta entrada vamos a trabajar con unos elementos nuevos, estos elementos consisten en el trabajo de la interfaz grafica,  en C# vamos a hacer un juego de rompecabezas este juego consiste en el ordenamiento de unos numeros dados del 1 al 15 y un espacio vacio los cuales se pueden movilizar estos numeros, el objetivo es el ordenamiento del rompecabezas hasta que quede "la imagen correcta".

Todo esto lo podemos hacer a partir del uso del interfaces graficas todo proveido por la plataforma de Microsoft visual estudio, cuando vayamos a empezar un nuevo proyecto escogemos aplicacion de Windows Forms , hay que recordar siempre que se le tiene que dar un nombre nuevo, una ubicacion nueva, Etc.


Nos inicia el programa asi, como si fuese una hoja en blanco.

Uno de los aspectos mas positivos  de esta forma de trabajar la interfaz grafica, es que la plataforma nos provee varios elementos los cuales hacen que el trabajo nos sea mucho mas facil, disponemos principalmente un cuadro de herramientas y una pestaña de propiedades.


En el cuadro de herramientas vemos todos los objetos disponibles los cuales pueden estar conformados una interfaz grafica, estos siendo botones, cajas de texto, cajas de lista, ComboBoxes, etc, simplemente aca podemos escoger los objetos que necesitamos y poenerlo a nuestro form; En la tabla de propiedades, nos hace mostrar las caracteristicas de cada obejto, su identificacion de tamaño, la fuente, su color, su identificacion y demas, podemos desde la tabla de propiedades modificar todas estas caracteristicas respecto a las necesidades de nuestro programa.

Cabe destacar que muy bien que solo a punta de codigo en C# podemos implementar todo estos objetos, pero al trabajar de esta manera nos puede tomar bastante tiempo ya que se tiene que modificar en cuanto alas propiedades de estos elementos ,su ubicacion etc, en realidad la plataforma nos ahorra tiempo en cuanto al trabajo de todo esto,este codigo por lo general se encuentra guardado y lo que nos hace ver la plataforma seria las partes mas importantes.


Un programa  en resumidas palabras esta compuesta en tres "capas" por asi decirse, las cuales son la capa logica, la capa de la interfaz grafica y la parte de persistencia o sencillamente hablando de la capa de guardado, al hacer un doble click desde el objeto que acabamos de poner en nuestro form, la plataforma nos crea un "espacio" o metodo el cual  cuando corremos el programa e interactuemos con este, se haga una opcion, el ejemplo mas basico seria que en un boton pudiésemos cambiar de un texto a otro o que cambia de color, o que empieze a correr un metodo los cuales cambien las propiedades de los otros objetos, realmente son bastantes posibilidades.




Ya explicado toda esa introduccion, vamos a explicar el funcionamiento del juego, se que en la programacion pueden existir varias soluciones de este problema unas mejores que las otras, otras mas complicadas o sencillas que las otras, este fue mi acercamiento en cuanto a la realizacion del juego, en este rompecabezas esta compuesta de varios botones los cuales al oprimirlos se corre un par de metodos , el primer metodo en cuestion compara las propiedades de los otros botones que se encuentran adyacientes de estos, y los cambia de acuerdo a una condicion,  en este caso la condicion es comparar si en el boton oprimido se encuentra adyaciente el boton cuya propiedad sea el que este cubierto de negro ( de una manera mas sencilla el boton cuya propiedad tenga el texto del numero 16. los, la propiedad del color en negro oculta este numero ), si es asi se cambia las propiedades de estos, hay que tener en cuenta que este metodo existen 3 variantes de este, para los botones que se encuentran en el centro, en las paredes y en las esquinas. 

Y otro Metodo que nos verifique el orden o propiedad de todos los botones, si las condiciones cumplen, nos tira el mensaje que nos indica que ganamos.


Existen otros metodos mas que son necesarios para estos dos y al funcionamiento del programa, como un metodo que nos hace mover las propiedades de cada boton, un metodo que hace que se nos reorganize las propiedades de cada boton (digamos para hacer un juego nuevo), y otro metodo que nos compare elementos en una matriz la cual es esencial en el otro metodo de la reorganizacion de propiedades, pueden verificar el resto en el programa el cual les doy link. 


Ya resuelto nuestro problema de realizar nuestro juego, podemos añadirle otras caracteristicas al programa para complementar esa inmersion la que tenemos al jugar un juego, como añadirle un temporizador, poner imagenes o un texto que noscuente cuantos pasos hicimos para solucionar nuestro rompecabezas, Os lo dejo de tarea muchachos!


miércoles, 4 de marzo de 2015

Clases Abstractas: extension del ejercicio poligono

Saludos amigos blogueros en esta entrada vamos a hablar sobre el uso de las clases abstractas para eso vamos a repasar el ejercicio que hice anteriormente, el de poligonos regulares, repasemos otra vez el diagrama que se va a dar a continuacion:


Para poner una clase abstracta simplemente ponemos en donde se declara la clase, abstract, sencillo.


La pregunta es, que cambios se hace? que ventajas conlleva? para empezar cuando se declara una clase abstracta, esta hace que no se pueda crear objetos de ella, podemos crear referencias de la clase a partir de por ejemplo PoligonoRegular poligono sin embargo no se podra instanciar de la manera
PoligonoRegular poligono= New PoligonoRegular.

En el paradigma de la programacion orientada a objetos, una clase abstracta sirve para proporcionar las clases  y metodos derivados de esta pero sin brindar una implementacion.

Al declarar una clase abstract tambien  evita que el usuario cree objetos de cierta clase y tambien son utiles para Cuando hay un conjunto de clases que comparten las mismas operaciones pero difieren en su implementación.


Al heredar o referenciar podemos usar los metodos contenidos en esta.

pueden ver el trabajo hecho en el siguiente link:

https://mega.co.nz/#F!LgYiXZDZ!S6IPhfJ9FDtn8Z0vi58FFQ