Noticias:

¿Has Leído las Normas de HispaLUG? LEER AHORA

Menú Principal

Reloj de ajedrez

Iniciado por Jetro, 05 de Abril de 2010, 22:32:12 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Jetro

Después del proyecto de cronómetro de javinxt me dio por pensar qué más se puede hacer con un cronómetro y me surgieron algunas ideas. Una de ellas fue un reloj de ajedrez.

Primero algo de información general. El reloj de ajedrez consta de dos relojes que se ponen en marcha alternativamente para llevar la cuenta del tiempo que cada jugador emplea en sus jugadas.




Lo más curioso del proyecto es que aún no tengo nada construido... solamente estoy con el programa ya que la forma final realmente tiene poca (o ninguna) influencia en el programa.
Para empezar os dejo la primera versión del programa que aún carece de uno de los atributos 'esenciales' del reloj de ajedrez, y es que obligatoriamente tiene que empezar el jugador número 1

Primera imagen:
Antes de iniciar hace falta indicar el tiempo de juego en milisegundos. El programa comienza cuando se pulsa el sensor de contacto 1. Después de eso se entra en el bucle general del programa del que solamente se sale cuando uno de los dos jugadores ha agotado su tiempo.
Lo primero es resetear el teporizador. Los temporizadores nos e pueden pausar así que la siguiente vez que lo ponga en marcha volverá a empezar desde cero. Por eso necesito añadir al valor actual el valor que se alcanzó la vez anterior (aunque la primera vez sea 0) Luego se divide entre 1000 (para que dé segundos) y se coloca en la pantalla

Segunda imagen:
Ahora se comprueba si el tiempo transcurrido es superior al permitido. Si es así se oye una alarma (Game over 1). De lo contrario el bloque condicional no ejecuta nada. El último bloque del bucle comprueba si el sensor de contacto nº2 está pulsado o si el tiempo máximo se ha sobrepasado. Si una de las dos condiciones se cumple se sale del bucle. (si no nos damos otra vuelta). Finalmente se escribe el último valor de tiempo (cronómetro+Timer1, lo mismo que se usó para luego escribir los segundos en la pantalla) en la variable Timer1. Esto es un truco curioso porque muestra que se pueden sacar cables fuera de un bucle y además esa información no sale hasta que termina el bucle. De lo contrario tendría problemas al inicio donde sumo el tiempo del temporizador al valor de Timer1 y eso mostraría el tiempo a doble velocidad.
Finalmente hay un hilo verde que sale de la pantalla. Este también va a un bloque lógico (como el último que hay en el bucle) pero al final del bucle general del programa para que termine si uno de los dos jugadores ha consumido todo su tiempo.

Después de esto empieza el segundo bucle que es prácticamente calcado al primero pero para el otro jugador. Usa el mismo temporizador ya que se calculan los tiempos de manera cumulativa sumando el valor actual del temporizador al de la variable que contiene la última lectura del jugador.

Mañana más...

Blastem

 :D parece que has aprovechado la idea bien. (Bendita curiosidad)
Me hace mucha gracia la programación en NXT, pero hay que reconocer que es intuitiva.

Ahora sólo falta un bonito diseño  ;)

Saludos!
Blog - Colección - Wanted List --- Look down, look down, Don't look 'em in the eye, Look down, look down, You're here until you die

PotaG

#2
Que interesante, me vas a hacer volver al NXT-G.

¿Has pensado que el jugador 1 pulsa el sensor de tacto dos veces seguidas la primera vez?, una para iniciar el tiempo y otra después de su jugada, luego el juego ya va en turnos sucesivos.
En realidad, en los relojes analógicos (son los que conozco), el juego se inicia pulsando el botón del jugador que lleva las negras (o jugador 2), eso pone en marcha el reloj del jugador 1 que es el que saca.

¿Y crear dos vigas, una para cada reloj?, aunque esto último no creo que mejore mucho las cosas.
Probando firma...1...2...probando...

Jetro

Gracias por los comentarios.

Después de echarlo otro vistazo me he dado cuenta de que el reloj ya funciona como sugiere PotaG: el primero en pulsar pone en marcha el reloj del oponente, pero al revés de como quería hacerlo.

El siguiente paso será hacerlo de manera que cualquiera de los dos pueda empezar , pero para ello primero quiero convertir algunas partes en MyBlocks ya que el programase está volviendo demasiado grande para manejarlo con facilidad - otra de las cosas que quería enseñar. De momento os dejo el programa completo tal y como está ahora por si a alguien le ha entrado la curiosidad:

http://www.megaupload.com/?d=IREYYUI5

PotaG

#4
Otra cosa, el juego puede acabar sin que ninguno de los dos agote su tiempo, aunque esto no es un problema gordo, se termina el programa (con el botón cancelar del NXT) y listo.

¿Y como va a ser el MOC?, ¿Digital, dos pulsadores y a correr? o ¿Analógico/Digital, parecido a los originales (analógicos) en la que los dos pulsadores están conectados entre sí de modo que al pulsar uno hacia abajo, el otro sube hacia arriba?
Probando firma...1...2...probando...

Jetro

Para serte sincero, aún no he pensado en la construcción física. Solo estoy evolucionando el programa.

jcaro

ey es una buena idea, a ver como evoluciona ;)

Vi


Holas;

¿Y bien?

  :D :D   :angel:
Salu2 a to2;

Jetro

Tengo un diseño con 2 sensores de contacto y un shock absorber 6.5, pero me pilas a 1500km de casa y no tengo fotos...