Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: E2E4 en 25 Mayo 2012, 20:17 pm



Título: Detectar movimientos de piezas en tablero de ajedrez.
Publicado por: E2E4 en 25 Mayo 2012, 20:17 pm
Hola Expertos,

Necesito autodetectar movimientos de piezas en un tablero de ajedrez. Se me ocurre hacer alguna rutina que indicandole las coordenadas del tablero y teniendo un patron de cada pieza para que comparando permita esto. No se como implementarlo os ruego que me deis alguna pista.

Por supuesto que sea en Visual Basic 6.

Seguro que algún experto se le ocurre algo.

Saludos.


Título: Re: Detectar movimientos de piezas en tablero de ajedrez.
Publicado por: Elemental Code en 25 Mayo 2012, 23:07 pm
Hacer una IA que juegue ajedrez lo veo dificil :S

Tenes algo ya escrito?
Mostralo  :-*


Título: Re: Detectar movimientos de piezas en tablero de ajedrez.
Publicado por: E2E4 en 25 Mayo 2012, 23:39 pm
Me refiero a que si tenemos dos tableros de ajedrez, uno en tu ordenador con tu programa preferido motor Houdini, Fritz o el que sea y otro en cualquier sitio de internet donde se puede jugar online. Si hacemos este programa para que detecte los movimientos de los dos tableros automatizamos todo el proceso moviendo piezas en el tablero de internet y el local. Esto se haria como he preguntado en el anterior post pero no se como detectar mediante patron de imagen que piezas se mueven para despues simular el movimiento en mi tablero local con motor Houdini, Fritz o el que sea.

Alguna idea???


Título: Re: Detectar movimientos de piezas en tablero de ajedrez.
Publicado por: E2E4 en 26 Mayo 2012, 19:28 pm
Aqui tienes un ejemplo -> http://youtu.be/rSGk4AtRkcw

Creo que lo detecta por patron de imagenes de piezas, pero como???

Alguna pista en Visual Basic?


Título: Re: Detectar movimientos de piezas en tablero de ajedrez.
Publicado por: MCKSys Argentina en 28 Mayo 2012, 17:50 pm
Quizas este accediendo al texto que muestra las movidas realizadas.

En ese caso seria solo simplemente parsear el moviemiento y calcular la respuesta en base a eso...


Título: Re: Detectar movimientos de piezas en tablero de ajedrez.
Publicado por: E2E4 en 28 Mayo 2012, 20:51 pm
El autor del programa me ha dicho que lo hace por deteccion de movimientos de piezas, que no se baja en las jugadas marcadas por la notacion???

No me da mas pistas.


Título: Re: Detectar movimientos de piezas en tablero de ajedrez.
Publicado por: MCKSys Argentina en 28 Mayo 2012, 21:13 pm
Si esta usando comparacion de imagenes, lo que yo haria seria:

- capturar el tablero completo.
- ir parseando la imagen casilla por casilla y detectar las piezas que hay en ellas. Asi podrias armar tu tablero.
- cada vez que se haga un movimiento, repetir los pasos anteriores y asi poder determinar el movimiento y poder responder en base a ello.

Ahora, esto es MUY dependiente del tablero. Si algo cambia en el mismo (tamaño, colores de fichas, etc) vas a tener problemas...

Es lo que se me ocurre ahora :)


Título: Re: Detectar movimientos de piezas en tablero de ajedrez.
Publicado por: BlackZeroX en 29 Mayo 2012, 06:32 am
mmm obten los pixeles de secciones siempre hay un patron de pixeles para detectarlos usa el api GetPixel...

* Spyke1, LeandroA (Creo) y un Servidor estábamos intentando crear un bot para un juego del facebook, me toco la parte lógica (Movimientos y detección de mejores movimientos) a ellos la parte de detección de colores, aquí dejaron ellos dos, un código de prueba, este contiene errores (si no esta bien centralizado).

http://infrangelux.sytes.net/FileX/?dir=/LeandroA

*Descarga la imagen para que veas.... que onda hay esta el codigo fuente.

Dulces Lunas!¡.


Título: Re: Detectar movimientos de piezas en tablero de ajedrez.
Publicado por: E2E4 en 29 Mayo 2012, 20:31 pm
http://infrangelux.sytes.net/FileX/?dir=/LeandroA
*Descarga la imagen para que veas.... que onda hay esta el codigo fuente.

Le echare un vistazo.

Os agradezco vuestro interes. GRACIAS¡¡¡


Título: Re: Detectar movimientos de piezas en tablero de ajedrez.
Publicado por: Psyke1 en 1 Junio 2012, 20:29 pm
Sí se puede hacer lo que buscas, y sería relativamente sencillo, el problema que tuvimos en el proyecto en el que participé con BlackZeroX y LeandroA fue que lo que queríamos detectar eran 6 colores diferentes, ademas cada casilla estaba animada, había brillos y demás, al final tuvimos que abandonar porque confundía el marrón con el rojo, en fin... un lío.

Pero por lo que veo, en tu caso sólo vas a necesitar detectar cuatro colores planos diferentes, eso son buenas noticias.
Debes hacer una plantilla que la encaje el usuario encima del tablero y que lea los pixeles y determine la figura en cada caso. No te hace falta leer todo los píxels, igual con 15 te vale , por ejemplo.

Según el vídeo que pones yo creo que lo que hace es leer valores del proceso, porque no usa ninguna plantilla. Yo creo que sería lo mejor, o eso, o como dice MCKSys Argentina:
Citar
accediendo al texto que muestra las movidas realizadas

DoEvents! :P


Título: Re: Detectar movimientos de piezas en tablero de ajedrez.
Publicado por: E2E4 en 1 Junio 2012, 22:47 pm
Según el vídeo que pones yo creo que lo que hace es leer valores del proceso, porque no usa ninguna plantilla. Yo creo que sería lo mejor

Como se hace para leer los valores del proceso ya que si es mas facil seria lo conveniente, pero como??

Como se puede determinar de forma automatizada el ancho y alto del tablero. Coordenadas esquias superior e inferior del tablero. Si se consiguen esos valores se podria calcular el ancho y alto de cada casilla y asi determinar valores de colores en posiciones concretas de cada casilla para generar un patron de imagenes.

Alguna pista??


Título: Re: Detectar movimientos de piezas en tablero de ajedrez.
Publicado por: MCKSys Argentina en 2 Junio 2012, 02:15 am
En el caso del video, el juego esta en flash. Osea, debe estar armando una imagen del tablero y despues reconoce los cuadros del tablero 1 a 1.

La data necesaria (X,Y de inicio de lectura del bitmap) se la esta pasando al programa y este debe parsear en ese momento.

Una idea podria ser que para sincronizar el punto 0,0 (y otros) la app diga donde esta el cursor. Cuando se lo coloca en el 0,0, debe capturarse ese punto. Despues usando lo mismo, deberia capturarse el n,n y asi se tendria idea del rectangle a capturar en bitmap.

Despues, el quilombo es parsear los cuadros, pero quizas usando operaciones para pasar la imagen a, por ej, blanco y negro, se puedan parsear sencillamente.

Una vez que esta el rect y los cuadros, es cuestion de capturar 1x1 a fin de determinar las fichas. Lo cual parece complicado pero se podria encarar por el lado de convertir lo capturado a blanco y negro y ver que sale...

En el video, la app en Java es la que parece hacer la magia...


Título: Re: Detectar movimientos de piezas en tablero de ajedrez.
Publicado por: BlackZeroX en 4 Junio 2012, 09:29 am
Sí se puede hacer lo que buscas, y sería relativamente sencillo, el problema que tuvimos en el proyecto en el que participé con BlackZeroX y LeandroA fue que lo que queríamos detectar eran 6 colores diferentes, ademas cada casilla estaba animada, había brillos y demás, al final tuvimos que abandonar porque confundía el marrón con el rojo, en fin... un lío.

Aun tienes mi algoritmo creo que yo ya lo perdí jejeje... envíamelo por el correo o por MP.

Dulces Lunas!¡.