[VB] Recoger evento MouseDown en variable

TeKaNeO

Hola a todos:

Tengo un problemilla con el evento Mousedown en Visual Basic, a ver si alguien me puede echar una manilla.

Estoy haciendo el juego 4 en raya, pues bien, como se supone que el juego va por turnos pues digamos que cuando el jugador pincha en el tablero, se produce el evento MouseDown que hace que se rellene la ficha correspondiente a la columna que deseo. Eso lo hace bien.

El problema viene en el cambio de turno. Cuando se supone que yo pulso en el tablero, le toca al ordenador pero ... ¿ Cómo recojo ese evento en una variable por ejemplo Booleana para indicar que ahora le toca el turno al ordenador ?

He probado con:

Dim X as boolean

X = Form_Mousedown(Button as Integer, Shift as Integer, X As Single, Y As Single)

Peeero, el error que me da es:

"Expected: List separator or )" o bien "Syntax Error"

¿Qué hago mal? Digamos que estoy empezando en VB asi que no seais mu duros conmigo si es un error tonto xD

Saludos y gracias a quien pueda ayudarme ^^

B

nunca he usado vb, pero mirando la documentacion,

Form_Mousedown(Button as Integer, Shift as Integer, X As Single, Y As Single)

es un evento, es decir, cada vez q haces click con el raton se llama a esa funcion.button indica el boton q es, shift si se esta pulsando la tecla shift, x e y la posicion del raton. crea una variable booleana publica y en esa funcion la cambias para q cada vez q se llame vaya valiendo 0-1-0-1 sucesivamente.como es publica, podras acceder a ella desde otros sitios y ya lo tienes hecho.

pd: t iria mejor empezando a programar x pascal o c

r2d2rigo

No he tocado VB en mi vida, pero por lo que veo podrias definir X como variable global, darle cuerpo a Form_MouseDown y cambiar dentro de esa funcion el valor de X.

TeKaNeO

Ok he hecho lo de la variable booleana como publica, en mi caso global. Ahora tengo el siguiente problema. Pongo el trozo del bucle:

While gana = 0 Or TCompleta = 0


    If turno = True Then ' Juega jugador
    MsgBox ("TURNO DE JUGADOR")
    
   '¿AQUÍ Como hago la espera hasta que pinche el jugador y posteriormente
   ' llame al evento para luego cambiar el turno al ordenador?
       
    Else ' Juega ordenador
        If turno = False Then
           pos = Int(Rnd * 5896)
           juega_ordenador (pos)
           turno = True
        End If
    End If
Wend

end if

En esa posición debo hacer una especie de "pausa" hasta que el jugador pulse y el evento mousedown coloque la ficha en la columna que quiera. ¿Cómo hago esa pausa y espero el click?

kas

Bueno a ver por donde empezamos:

Un evento NO SE RECOJE, se MANEJA. Esto quiere decir qu e no se guarda en una variable porque no DEVUELVE nada.

Es decir, no puede asignar el resultado, si no que "lo que quieras hacer cuando pase eso" es lo que deves escribir DENTRO de la funcion que recoje el evento ó llamar a una funcioon que tu hayas hecho (mas abajo explciare eso).

Como cazar un click en un objeto de un Formulario (label, textbox, button, etc..)

Puedes hacerlo de varias maneras, la mas facil:

Con el editor de codigo abres el codigo del formulario. El editor, en su parte superior tiene 2 combos. En el de la izquierda tienes todas las variables que has declarado (incluidos los controles). Selecciona el control sonbre el que vas a hacer click para el cambio de turno. Ahora en el combo de la derecha, selecciona el evento Click (indicado por un rayo amarillo).

Ahora veras que el propio editor de codigo te ha puesto la cabezera de la funcion que maneja el click de esa variable, algo como esto:

Private sub Control1_Click(byval Sender as Object, byval e as System.EventArgs) handles Control1.Click

End Sub

Dentro de esta funcion es donde deveras escribir el codio para el cambio de turno o, en el caso de que tengas una funcion para controlar el cambio, pues haces la llamada aqui dentro.

Como has visto, el vento no se puede "esperar", ya que no es un bucle ni nada por el estilo. De manera que eso de "esperar" al evento lo puedes hacer usando una variable booleana que cuando se lanza el evento la Private Sub la pone a true y en el codigo de espera este bucle:

While Not MiVarDeEspera
Application.DoEvents
End While

Esto no hara nada realmente, pero es un poco feo.

Y ademas, ahora que lo miro, tienes un MsgBox. Un Msgbox es una funcion que lanza un Formulario en modo ShowDialog, lo que quiere decir que tu codigo se parara al lanzar e msgbox Y NO CONTINUARA hasta que esta funcion devuelva algo (un MsgboxResult), es decir, eso del click ya te lo hace ella sola.

Acostumbrate a recojer el valor de un MsgBox, ya que si especificas un YESNO o un OKCancel deveras comprovar el resultado para saber si quieren continuar o salir.

PD: perdon por el tocho :)

TeKaNeO

Muchisimas gracias por la explicación Kas, ya lo tengo tal y como quiero, tan solo me queda validar quien gana y quien pierde buscando 4 en linea tanto en vertical, horizontal y laterales :D a ver si me sale del tiron y no tengo que recurrir a más ayuda xD

Un saludo a todos y nuevamente gracias a los que me han ayudado :)

kas

No te ridimas, la ayuda esta para usarla :)

Yo creo que lo del 4 en ralla estaria muy wapo verlo en Recursiva ;)

Usuarios habituales