COmo lo dice el titulo, pero antes explicare y pondre detalles de nuestra Aportacion.
Nuestra razon de hacerlo Fue por mero pasar una materia, asi k no dudo k lo usarian para lo mismo jajaj pero no hay pex, en este caso quiero probar que tan grande es la ventaja del codigo libre y de la aportacion tambien de terceros a nuestro propio codigo para k la aplicacion Evolucione, sea mas facil , aporten mas ideas, y pues se logre Hacer el objetivo mas grande del codigo libre, MEjorar todo lo k sea Libre en conjunto con todos los k kieran aportar para mejorar, ya que muchos lo malinterpretan pensando k es codigo gratis jajaj LAmmers XD, o de copio y pego, Pero bueno se k no les tomara mas de dos segundo descargarlo pesa menos de un mega.Asi que proseguire.
LA idea de compartirlo es que tambien el Algoritmo que usamos fue gran idea que se nos ocurrio, aunk se que tiene grandes detalles gruesos que se pueden mejorar en la interfaz(optimizacion de interfaz ), PEro bueno aqui la explicacion del Projecto.
Definicion del problema
Encontrar las posibles saltos de un caballo en un tablero sin piezas en una casilla al azar.
Bueno, simple no?
Aqui las restricciones y unas reglas basicas de ajedrez
El tablero es de 8 x 8 De la casilla a1 ...a8,b1..b8,...h1 ...h8 [a1-a8][b1-b8][c1-c8]...[h1-h8]
El caballo Salta en L y tiene estas reglas basicas
*SI es pieza amiga no puede saltar en esa casilla.
Salta cualkier pieza , lo unico k importa es que este libre o sea Enemiga.
*SI al quitar el caballo quedas en JAQUE es movimiento Ilegal.
No puede saltar fuera del Tablero.Obvia jeje, pero para los nuevos en ajedrez ahi esta.NO se ofendan tampoco la maquina lo sabra hasta que se lo programes.
Ok Son las unicas reglas del caballo.
En el proyecto no tomamos en cuenta las Reglas del Asterisco, Uno pork no hay piezas extra, y otra por tiempo solamente. Los comentarios estan abiertos para opiniones y aportes asi como tambien para dudas :)
Propuestas d eSolucion
Hacer una Estructura de Arbol que guarde para cada casilla los posbiles Saltos.BUscar en en ARbol la casilla e imprimir las salidas, y dibuje sus posibles saltos.
Crear un algoritmo que calcule las casillas validas en cada casilla que se le asigne.
Otras propuestas son aceptadas, Claro hay mas estas son las que nos propusimos.Se aceptan mas por supuesto! y bienvenidas.
LA eleccion fue la Segunda. Y esta es la pantalla de nuetra Aplicacion. al iniciarla.
Bueno Ahora les podre unas reglas mas del Tablero y sus Piezas y Notaciones.
Las mas comun en el mundo es el tratamiento de Partidas formato PNG. Y la notacion Algebraica.
Ambas tiene reglas , entre las cuales las unicas que podre son las del caballo y tomando en cuenta que solo juega un judador y una pieza*, Del bando Negro o blanco Da igual debido que no hay demas piezas. Por lo tanto una pieza amiga sera Eso En lugar de PIeza de color* Tal.
LA pieza caballo se escribe o denota como el caracter "C" mayuscula seguido dela ubicacion en el tablero al que se situe. Ejemplo Cc3. SE agrega la casilla en minusculas primero con la columna y seguido de la fila.
* Reglas Ha saber k no se toman en cuenta por la magnitud del mismo programa . Pero que las sepan es importante: Cuando se captura una pieza al situarse en una casilla se agrega "x" entre el "C" y la coordenadas de casilla. Ejemplo Cxc3. Cuando los dos caballos llegan a la misma posicion y aparte capturan Se agrega la coordenada del caballo que se mueve. SI tenemos un Cc3 y un Ce3 Los dos llegan a d5, ubicar Cc3 en d5 sin captura seria Ccd5, si se captura seria Ccxd5. SI es JAque se agrega "+". Ej Cc3+ o Ccd5+ o Ccxd5+, si es Jaque mate Se agrega # como los anteriores.Si hacen alguna aplicacion oficial y no toman en cuenta estos detalles Caen en infracciones de la misma FIDE, ya que es regla tomar las cosas como son o en dado caso no seria oficial tu aplicacion y peor aun si la usa un jugador Pierde la partida y puede ser sancionado por no seguir las reglas de anotacion. Aclaracion para los que vayan para cosas grandes jjeje.
- El algoritmo !! Por fin diran muchos jejej
Facil pero efectivo, situamos un caballo a una casilla X donde pueda verse todos sus movimientos encaso de estar vacio el tablero. El ejmplo seria Cc3, esta casilla tiene a4,b5,d5,e4,e2,d1,b1,a2. Que A la vista salta Casilla1(c1),Casilla2(c2),Casilla3(c3),Casilla4(c4),Casilla5(c5),Casilla6(c6),Casilla7(c7),Casilla8(c8) Respectivamente.
Quitando la C del caballo, tenemos c3, (char)alpha sera = a "c", y (int)beta="3";
casilla1(c1)=COncatenacion( (alpha-2 ),(beta -1) );Y asi contodas las demas, facil no?
Ahora YA estan las 8 calculadas, debemos hacer que Sean validas con nuestras reglas.
[Regla1]Alpha debe caer entre el rango de [a-h] y [Regla2]Beta entre [1-8]
Un IF con regla 1 y Con regla 2 En cada Casilla Valuada nos da por resultado solo las Casillas validas.
Facil de programar no lo pondre aqui jeje.
AHora solo las casillas validas se muestran y como parte del proyecto ya esta terminado. Se muestran las varibles Validas. Ahora enla parte de interfaz.
Esto es un horror segun yo jeje pork Usamos 64 TextField y una funcion de switch que es usada 8 veces por 3 veces en el programa. Da un total de 64 x 8 x3 Veces usados un switch, para pintar de color rojo la casilla del caballo, y color Amarillo las posibles casillas, asi como para limpiarlo para un nuevo salto. LA mejora en la interfaz seria un gran alivio respecto al tiempo de ejecucion, y prospecto a mejorar. Muy aceptadas las opiniones buenas y malas.
EL primer Pintado Inicia todas las casillas con colores blanco o negro segun su ubicacion. Cae aqui una regla la ultima casilla izq inferior h1 es Blanca.Simple no? h2 negra, h3 blanca, g1 negra, f1 blanca asi sucesivamente.Este no usa switch pero si 64 veces repinta, podria mejorarse si se guarda Solo las que fueron pintadas anteriormente(idea para mejorar este metodo, y podria haber mas aceptamos ideas).
El segundo Pintado Coloca la casilla de salida del caballo, Pintarla de color Rojo. Busca en el switch de 64 opciones y pinta.
El Tercero es para las casillas validas, en el peor de los casos estan las 8 casillas(ej Cc3) a pintar en el mejor de los casos solo 2 (Ej Ca1). Osea 8x 64 veces en elpeor de los casos, y 2 x64 en el mejor.
Una mejora que logramos hacer es extraer la coordenada columna y filtrar la busqueda solo en la coordena.
Ejemplo si es Cc3, extraemos la columna "c" y entra a un switch de 8 Obviamente(1-8). Por lo que en el peor de los casos es 8 X 8 Busquedas realizadas, y en el mejor 8x2 busquedas. AUn asi es gran perdida de tiempo sabemos k se puede mejorar con algun metodo mas facil como en lugar de usar TextField usar otros formas de dibujar. Pero bueno esta forma es valida si el objetivo es ser funcional para estudio solamente.
Y listo Tenemos ya el Programa realizado.
Se agrego un boton de Agregar piezzas el cual podemos agregar una pieza "amiga" y si es una de las casillas donde salto el caballo la quita del JEditorPane. (Texto) Pero en el pintado no lo agregamos aun seguira visualizandoce.Esta es otra de las cosas que aun quedaron pendientes de ver.
Listamos las posibles mejoras
Mejorar el Pintado. Encontrar nuevos metodos de pintar.
SI se queda el actual metodo .
mejorar el boton agregar pieza amiga, que si elimine del tablero la casilla de la pieza amiga.No solo del JeditorPane(texto).
EN la casilla del Caballo Agregar C"alpha""beta" osea ej. Cc3 . Si se agrega Pieza tambien poner su notacion. Las notaciones son las siguientes. D=Dama, R=Rey,A=Alfil,C=Caballo,T=Torre, LOs peones no se escriben enla notacion pero si Debe colorearse diferente para diferenciar la casilla k no sea valida para el salto del caballo.
En lo Personal lo unica verdadera aportacion es el algoritmo del movimiento del caballo. Idea para mejorar es encontrar los algoritmos de las demas piezas, es igual de facil que este. Tomando sus Reglas de cada pieza.
Un arbol que tenga todas las casillas posibles es posible, pork tendra limite , pero es muy complicado pork cada casilla del tablero es relacionada con otra 8 veces En elpeor de los casos o 2 en el caso de las esquinas. Pero Un arbol Inteligente que guarde el ultimo movimiento del caballo mas el que donde inicio Suena bastante interesante .Se crearia un boton de Retroceso y avance hasta la ultima casilla del caballo y su inicio. Y si se puede pork no de otra pieza tambien.
SI te intereso el tema y quieres chekar el codigo y Aprender mas de ajedrez te recomiendo poner tu duda. O usar Mr. google o preferidos buscadores para encontrar mas info.
SI alguien gusta compartir este Post en cualkier otro puede hacerlo pero le pido que ponga un enlace a este blog y su respectiva referencia .
COnclusion
SI eres un alumno, No te cobramos por el programa, pero si pedimos sus opiniones serviran mucho para seguir con el proyecto, como kien dice no te pondremos virus en la descarga ni Troyanos nimalware, ni nada de eso jaja, ni Spam, bueno tendran k kitar algunos titulos jajaj Pero como los pondriamos jejej no en esta ocasion.
SI eres Profesor que entro a este blog de desgracia pidio este soft de tarea jajaj , ps En lugar de ponerse furioso puede entregarlo y pedir las mejoras sugeridas o proponerles mejoras o hasta hacer lo mismo pero con otras piezas , yo se que somos novatos en esto de programacion ajja pero podria haber miles de ideas para mejorarlo no tengo duda.
Conclusion personal.
EL algoritmo es el unico Verdadero Legitimo, fue dise~ado por nosotros, pero estamos seguros que era facil de notarse, por lo que no dudo que otro lo haya echo antes , solo que chekando en Mr Google no estaba .EL algoritmo que si hemos visto es el que fue creado desde hace tiempo por pascal * y demas , y que hay muchos applets que recorren el el tablero de tal forma que " el caballo, no repita una casilla en su transcurso y abarque todas las casillas".
*PUse "demas", porque buscando se daran cuenta que el problema fue planteado desde antes que el.
Bueno sin mas el Programa.
Datos Tecnicos
Testeado en Seven 64 bits, Vista x32, XP x32, Funcionando 100% con JRE 1.6 update 17
Linuxo o Unix o Todo lo k no sea Windows Con OpenJDK Java 6 runtiem (el k viene por default)si Encuentra casillas pero no pinta, Se requiere Descargar el JDK mas nuevo de la pagina principal del SUN.
en MAC si la tienes actualizada funciona XD.
Servidor Megaupload
Desarrollado En Netbeans 6.8beta y JDK 1.6 update 17
ChessPJ.rar