'Encontrar el numerador y el denominador
del "numero2".
Dim longitudcadena2
As Integer = Len(numero2.Text)
'Variable para almacenar la longitud de la
cadena que hay en el Textbox "numero2".
Dim
caracterevaluado2 As
String 'Para
evaluar caracter por caracter con el Mid().
Dim posicionpleca2
As Integer 'Para determinar
el número de la posición en la que se encuentra la
pleca dentro de la cadena.
Dim numerador2
As String 'Almacena el
numerador del Textbox que se está evaluando.
Dim denominador2
As String 'Almacena el
denominador del Textbox que se está evaluando.
Dim banderapleca2
As Integer 'Bandera o
marcador que devolverá 1 si se encontró una pleca
en la cadena, y 0 en el caso que no se haya
encontrado.
For ciclo
As Integer = 1 To longitudcadena2 'Para evaluar caracter por caracter hasta encontrar una
"/".
caracterevaluado2 = Mid(numero2.Text, ciclo,
1)
If caracterevaluado2
= "/" Then
posicionpleca2 = ciclo
banderapleca2 = 1
End If
Next
If banderapleca2 = 1
Then 'En el
caso que se haya encontrado una pleca en la cadena, lo que indica
que el usuario introdujo un número
fraccionario.
numerador2 = Mid(numero2.Text, 1, posicionpleca2 –
1) 'El numerador será desde
el primer caracter hasta el que está antes de que se
digitara la pleca.
denominador2 = Mid(numero2.Text, posicionpleca2 + 1,
longitudcadena2 – posicionpleca2) 'El denominador será desde un caracter
después de la pleca, hasta el último caracter de la
cadena.
Else 'En el
caso que no se haya encontrado una pleca en la cadena, lo que
indica que el usiario introdujo un número entero. Debido a
que no se pueden meter puntos ni espacios ni caracteres
especiales debido a la programación del KeyPress, el no encontrar
una pleca garantiza que se introdujo un entero.
numerador2 = Mid(numero2.Text, 1,
longitudcadena2)
denominador2 = 1
End If
'Convertir los valores de
los TextBox a objetos "Fraccion", mediante la clase.
Dim fraccion_numero1
As New
Fraccion(numerador1, denominador1)
'Convertir los valores de los
TextBox a objetos "Fraccion", mediante la clase.
Dim fraccion_numero2
As New
Fraccion(numerador2, denominador2)
Dim
fraccion_respuesta As
Fraccion 'Variable que
almacenará la respuesta.
fraccion_respuesta = fraccion_numero1 *
fraccion_numero2
TextBoxoculto.Text = fraccion_respuesta.ToString
'La respuesta es de tipo "Fraccion" (la
clase creada) y se transforma a tipo "String" para poder
imprimirla en un TextBox.
'Condición para quitar el
denominador de 1.
If
Strings.Right(TextBoxoculto.Text, 2) = "/1" Then
'Si el número tiene como divisor
1.
TextBoxoculto.Text = Strings.Left(TextBoxoculto.Text,
Strings.Len(TextBoxoculto.Text) – 2) 'Con esto se quita el "/1", por ejemplo si fuera "34/1"
quedará solamente "34".
End If
While Mid(respuesta.Text,
1, 2) = "00" Or Mid(respuesta.Text, 1, 2) =
"01" Or
Mid(respuesta.Text, 1, 2) = "02" Or
Mid(respuesta.Text, 1, 2) = "03" Or
Mid(respuesta.Text, 1, 2) = "04" Or
Mid(respuesta.Text, 1, 2) = "05" Or
Mid(respuesta.Text, 1, 2) = "06" Or
Mid(respuesta.Text, 1, 2) = "07" Or
Mid(respuesta.Text, 1, 2) = "08" Or
Mid(respuesta.Text, 1, 2) = "09" 'Para que los ceros a
la izquierda se borren.
respuesta.Text = Mid(respuesta.Text, 2,
Len(respuesta.Text) – 1)
End While
Dim plecaubicacion
As Integer 'Para saber en
qué parte de la cadena se encuentra la pleca.
For ciclo
As Integer = 1 To Len(respuesta.Text)
caracterevaluado1 = Mid(respuesta.Text, ciclo, 1)
'Toma el caracter correspondiente,
dependiendo de la iteración en la que vaya el ciclo
For.
If caracterevaluado1
= "/" Then
plecaubicacion = ciclo
End If
Next
While Mid(respuesta.Text,
plecaubicacion + 1, 2) = "00"
Or Mid(respuesta.Text,
plecaubicacion + 1, 2) = "01"
Or Mid(respuesta.Text,
plecaubicacion + 1, 2) = "02"
Or Mid(respuesta.Text,
plecaubicacion + 1, 2) = "03"
Or Mid(respuesta.Text,
plecaubicacion + 1, 2) = "04"
Or Mid(respuesta.Text,
plecaubicacion + 1, 2) = "05"
Or Mid(respuesta.Text,
plecaubicacion + 1, 2) = "06"
Or Mid(respuesta.Text,
plecaubicacion + 1, 2) = "07"
Or Mid(respuesta.Text,
plecaubicacion + 1, 2) = "08"
Or Mid(respuesta.Text,
plecaubicacion + 1, 2) = "09"
'Para quitar los ceros del
denominador.
respuesta.Text = Mid(respuesta.Text, 1, plecaubicacion –
1) + "/" +
Mid(respuesta.Text, plecaubicacion + 2,
Len(respuesta.Text)) 'Para que si el
usuario escribe "433/0000432", cambiará a
"443/432".
End While
If (respuesta.Text =
TextBoxoculto.Text) Then
'Si la respuesta introducida por el usuario
es igual a la respuesta correcta.
Dim mensaje
As String
mensaje = MsgBox("¡Felicidades, su respuesta es
correcta!", MsgBoxStyle.OkOnly, "Juego de
Operaciones
Matemáticas para
Bachilleres")
If mensaje = 1
Then 'Si el
botón presionado es el "Ok" (que es el único que se
le va a presentar entonces ese se tiene que
presionar).
'Generación de números
aleatorios.
numero1.Text = obtenernumerorandom(1, 99) +
"/" + obtenernumerorandom(1,
99) 'Imprime un número random
entre 1 y 99 contatenado con "+" concatenado con un número
random entre 1 y 99, para obtener algo como "34/42", y eso se
imprime en el TextBox "numero1".
numero2.Text = obtenernumerorandom(1, 99) +
"/" + obtenernumerorandom(1,
99) 'Imprime un número random
entre 1 y 99 contatenado con "+" concatenado con un número
random entre 1 y 99, para obtener algo como "34/42", y eso se
imprime en el TextBox "numero2".
respuesta.Text = ""
'Para borrar la respuesta anterior y que el
usuario escriba una nueva respuesta.
respuesta.Focus() 'Para que
el cursor esté listo y que el usuario escriba su
próxima respuesta.
End If
respuestaaciertos += 1 'Suma un acierto.
aciertos.Text = respuestaaciertos 'Imprime el número de aciertos en el
TextBox.
If respuestaaciertos +
respuestadesaciertos = 20 Then
resultado1.aciertos1.Text = aciertos.Text
'El número de aciertos se manda a
imprimir al TextBox "aciertos1" que está en el formulario
"resultado1".
resultado1.desaciertos1.Text = desaciertos.Text
'El número de desaciertos se manda a
imprimir al TextBox "desaciertos1" que está en el
formulario "resultado1".
resultado1.notafinal1.Text = 10 / 20 *
Val(aciertos.Text)
resultado1.Show() 'Mandar a
llamar al formulario de resultados. El juego ha
terminado.
End If
Else 'Si la
respuesta introducida por el usuario es diferente de la respuesta
correcta.
Dim mensaje
As String
mensaje = MsgBox("¡Incorrecto! La respuesta es: " +
TextBoxoculto.Text + ".", MsgBoxStyle.OkOnly,
"Juego de Operaciones Matemáticas
para Bachilleres")
If mensaje = 1
Then 'Si el
botón presionado es el "Ok" (que es el único que se
le va a presentar entonces ese se tiene que
presionar).
'Generación de números
aleatorios.
numero1.Text = obtenernumerorandom(1, 99) +
"/" + obtenernumerorandom(1,
99) 'Imprime un número random
entre 1 y 99 contatenado con "+" concatenado con un número
random entre 1 y 99, para obtener algo como "34/42", y eso se
imprime en el TextBox "numero1".
numero2.Text = obtenernumerorandom(1, 99) +
"/" + obtenernumerorandom(1,
99) 'Imprime un número random
entre 1 y 99 contatenado con "+" concatenado con un número
random entre 1 y 99, para obtener algo como "34/42", y eso se
imprime en el TextBox "numero2".
respuesta.Text = ""
'Para borrar la respuesta anterior y que el
usuario escriba una nueva respuesta.
respuesta.Focus() 'Para que
el cursor esté listo y que el usuario escriba su
próxima respuesta.
End If
respuestadesaciertos += 1 'Suma un desacierto.
desaciertos.Text = respuestadesaciertos
'Imprime el número de desaciertos en
el TextBox.
If respuestaaciertos +
respuestadesaciertos = 20 Then
resultado1.aciertos1.Text = aciertos.Text
'El número de aciertos se manda a
imprimir al TextBox "aciertos1" que está en el formulario
"resultado1".
resultado1.desaciertos1.Text = desaciertos.Text
'El número de desaciertos se manda a
imprimir al TextBox "desaciertos1" que está en el
formulario "resultado1".
resultado1.notafinal1.Text = 10 / 20 *
Val(aciertos.Text)
resultado1.Show() 'Mandar a
llamar al formulario de resultados. El juego ha
terminado.
Me.Hide()
End If
End If
End If
End Sub
Private Sub terminar1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles terminar1.Click
Dim mensaje
As String
mensaje = MsgBox("¿Desea realmente terminar este
juego?", MsgBoxStyle.YesNo, "Juego de Operaciones Básicas para
Bachilleres")
If mensaje = 6
Then
resultado1.aciertos1.Text = aciertos.Text
'El número de aciertos se manda a
imprimir al TextBox "aciertos1" que está en el formulario
"resultado1".
resultado1.desaciertos1.Text = desaciertos.Text
'El número de desaciertos se manda a
imprimir al TextBox "desaciertos1" que está en el
formulario "resultado1".
resultado1.notafinal1.Text = 10 / (Val(aciertos.Text) +
Val(desaciertos.Text)) * Val(aciertos.Text) 'Determinar e imprimir la nota final.
resultado1.Show() 'Mandar a
llamar al formulario de resultados. El juego ha
terminado.
End If
End Sub
Private Sub respuesta_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
Handles
respuesta.KeyPress
Dim contadorplecas
As Integer
Dim longitudcadena
As Integer = Len(respuesta.Text)
'Variable para almacenar la longitud de la
cadena que hay en un Textbox.
Dim caracterevaluado
As String 'Para evaluar
caracter por caracter con el Mid().
For ciclo
As Integer = 1 To longitudcadena 'Para evaluar caracter por caracter hasta encontrar una
"/".
caracterevaluado = Mid(respuesta.Text, ciclo,
1)
If caracterevaluado
= "/" Then
contadorplecas = contadorplecas + 1
End If
Next
If (Asc(e.KeyChar) >=
47 And Asc(e.KeyChar)
<= 57) Or
Asc(e.KeyChar) = 8 Then
'Los únicos caracteres que se
permitirá introducir en el Textbox serán los
números del 0 al 9 (ASCII del 48 al
57); la pleca ("/"), que es el ASCII 47; el signo menos ("-"), y
el retroceso de espacio o backspace para borrar texto
introducido, que es el ASCII 8.
If (Asc(e.KeyChar) =
47) Then 'Si se presione la tecla de la pleca ("/").
If (contadorplecas >
0) Then 'Cuando se pretenda introducir una segunda
pleca.
e.KeyChar = ""
'Reemplaza la tecla digitada con el
valor de nada
para que no se puedan introducir caracteres
inválidos.
End If
End If
Else
e.KeyChar = ""
'Reemplaza la tecla digitada con el valor
de nada para que no se puedan introducir caracteres
inválidos.
End If
End Sub
End Class
FORMULARIO
multiplicacionbasico1
Public Class multiplicacionbasico1
Protected Overrides Sub
OnPaint(ByVal
Pintar As
PaintEventArgs)
Dim Elipse
As New
Drawing2D.GraphicsPath()
Dim Rectangulo
As New
Rectangle(8, 28, Me.Width – 13, Me.Height – 40) 'La coordenada "x" de la esquina superior izquierda del
rectángulo tiene el valor de 7 para que n o se vea el
borde izquierdo del formulario. La coordenada "y" de la esquina
superior izquierda del rectángulo tiene el valor de 26,
con lo cual se logra que no aparezca la barra de título en
el formulario. El ancho del rectángulo es "Me.Width – 13"
para que no se vea el borde derecho del formulario. El alto del
rectángulo es "Me.Height – 31" para que no se vea la
línea inferior del borde.
Elipse.AddEllipse(Rectangulo)
Me.Region =
New Region(Elipse)
End Sub
'Las siguientes variables
deben ser públicas para que vayan almacenando valores y
que los pierdan hasta que explícitamente se programe un
cambio de
valores o cuando se cierre el formulario.
Public
respuestaaciertos As
Integer 'Variable que contabiliza el número de
aciertos.
Public
respuestadesaciertos As
Integer 'Variable que contabiliza el número de
desaciertos.
Private Sub
multiplicacionbasico1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Al cargar el formulario ya deben
aparecer números:
numero1.Text = obtenernumerorandom(1, 999)
'Imprime un número random entre 1 y
999 en el TextBox "numero1".
numero2.Text = obtenernumerorandom(1, 999)
'Imprime un número random entre 1 y
999 en el TextBox "numero2".
aciertos.Text = "0"
desaciertos.Text = "0"
End Sub
Private Sub menu1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menu1.Click
Dim mensaje
As String
mensaje = MsgBox("Regresar
al menú cancelará su juego actual. ¿Desea
continuar?", MsgBoxStyle.YesNo, "Juego de Operaciones Básicas para
Bachilleres")
If mensaje = 6
Then
menu2.Show() 'Llama al
formulario "menu2".
Me.Close()
'Cierra el formulario actual.
Else
'No hace nada porque no se ha decidido
por parte del usuario regresar al menú.
End If
End Sub
Private Sub terminar1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles terminar1.Click
Dim mensaje
As String
mensaje = MsgBox("¿Desea realmente terminar este
juego?", MsgBoxStyle.YesNo, "Juego de Operaciones Básicas para
Bachilleres")
If mensaje = 6
Then
resultado1.aciertos1.Text = aciertos.Text
'El número de aciertos se manda a
imprimir al TextBox "aciertos1" que está en el formulario
"resultado1".
resultado1.desaciertos1.Text = desaciertos.Text
'El número de desaciertos se manda a
imprimir al TextBox "desaciertos1" que está en el
formulario "resultado1".
resultado1.notafinal1.Text = 10 / (Val(aciertos.Text) +
Val(desaciertos.Text)) * Val(aciertos.Text) 'Determinar e imprimir la nota final.
resultado1.Show() 'Mandar a
llamar al formulario de resultados. El juego ha
terminado.
End If
End Sub
Private Sub
multiplicacion1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles multiplicacion1.Click
If respuesta.Text =
"" Then
'Si el usuario no ha escrito una
respuesta.
MsgBox("Escriba la
respuesta que considere correcta.",
MsgBoxStyle.Exclamation, "Juego de
Operaciones Matemáticas para
Bachilleres")
respuesta.Focus() 'Se ubica
el cursor en el cuadro de texto de respuestas para que el usuario
escriba su respuesta.
Else
TextBoxoculto.Text = Val(numero1.Text) *
Val(numero2.Text) 'Se guarda en el
TextBox oculto la respuesta correcta.
While Mid(respuesta.Text,
1, 2) = "00" Or Mid(respuesta.Text, 1, 2) =
"01" Or
Mid(respuesta.Text, 1, 2) = "02" Or
Mid(respuesta.Text, 1, 2) = "03" Or
Mid(respuesta.Text, 1, 2) = "04" Or
Mid(respuesta.Text, 1, 2) = "05" Or
Mid(respuesta.Text, 1, 2) = "06" Or
Mid(respuesta.Text, 1, 2) = "07" Or
Mid(respuesta.Text, 1, 2) = "08" Or
Mid(respuesta.Text, 1, 2) = "09" 'Para que los ceros a
la izquierda se borren.
respuesta.Text = Mid(respuesta.Text, 2,
Len(respuesta.Text) – 1)
End While
If (respuesta.Text =
TextBoxoculto.Text) Then
'Si la respuesta introducida por el usuario
es igual a la respuesta correcta.
Dim mensaje
As String
mensaje = MsgBox("¡Felicidades, su respuesta es
correcta!", MsgBoxStyle.OkOnly, "Juego de Operaciones Matemáticas para
Bachilleres")
If mensaje = 1
Then 'Si el
botón presionado es el "Ok" (que es el único que se
le va a presentar entonces ese se tiene que
presionar).
'Generación de números
aleatorios.
numero1.Text = obtenernumerorandom(1, 999)
'Imprime un número random entre 1 y
999 en el TextBox "numero1".
numero2.Text = obtenernumerorandom(1, 999)
'Imprime un número random entre 1 y
999 en el TextBox "numero2".
respuesta.Text = ""
'Para borrar la respuesta anterior y que el
usuario escriba una nueva respuesta.
respuesta.Focus() 'Para que
el cursor esté listo y que el usuario escriba su
próxima respuesta.
End If
respuestaaciertos += 1 'Suma un acierto.
aciertos.Text = respuestaaciertos 'Imprime el número de aciertos en el
TextBox.
If respuestaaciertos +
respuestadesaciertos = 20 Then
resultado1.aciertos1.Text = aciertos.Text
'El número de aciertos se manda a
imprimir al TextBox "aciertos1" que está en el formulario
"resultado1".
resultado1.desaciertos1.Text = desaciertos.Text
'El número de desaciertos se manda a
imprimir al TextBox "desaciertos1" que está en el
formulario "resultado1".
resultado1.notafinal1.Text = 10 / 20 *
Val(aciertos.Text)
resultado1.Show() 'Mandar a
llamar al formulario de resultados. El juego ha
terminado.
Me.Close()
'Cierra el formulario actual.
End If
Else
Dim mensaje
As String
mensaje = MsgBox("¡Incorrecto! La respuesta es: " +
TextBoxoculto.Text + ".", MsgBoxStyle.OkOnly,
"Juego de Operaciones Matemáticas
para Bachilleres")
If mensaje = 1
Then 'Si el
botón presionado es el "Ok" (que es el único que se
le va a presentar entonces ese se tiene que
presionar).
'Generación de números
aleatorios.
numero1.Text = obtenernumerorandom(1, 999)
'Imprime un número random entre 1 y
999 en el TextBox "numero1".
numero2.Text = obtenernumerorandom(1, 999)
'Imprime un número random entre 1 y
999 en el TextBox "numero2".
respuesta.Text = ""
'Para borrar la respuesta anterior y que el
usuario escriba una nueva respuesta.
respuesta.Focus() 'Para que
el cursor esté listo y que el usuario escriba su
próxima respuesta.
End If
respuestadesaciertos += 1 'Suma un desacierto.
desaciertos.Text = respuestadesaciertos
'Imprime el número de desaciertos en
el TextBox.
If respuestaaciertos +
respuestadesaciertos = 20 Then
resultado1.aciertos1.Text = aciertos.Text
'El número de aciertos se manda a
imprimir al TextBox "aciertos1" que está en el formulario
"resultado1".
resultado1.desaciertos1.Text = desaciertos.Text
'El número de desaciertos se manda a
imprimir al TextBox "desaciertos1" que está en el
formulario "resultado1".
resultado1.notafinal1.Text = 10 / 20 *
Val(aciertos.Text)
resultado1.Show() 'Mandar a
llamar al formulario de resultados. El juego ha
terminado.
Me.Close()
'Cierra el formulario actual.
End If
End If
End If
End Sub
Private Sub respuesta_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles respuesta.KeyPress
If (Asc(e.KeyChar) >=
48 And Asc(e.KeyChar)
<= 57) Or
(Asc(e.KeyChar) = 8) Then 'Los únicos
caracteres que se permitirá introducir en el TextBox
serán los números del 0 al 9 (ASCII del 48 al
57).
'No se hace nada porque el caracter
presionado es válido.
Else
e.KeyChar = ""
'Reemplaza la tecla digitada con un valor
Void o vacío, para que no puedan introducir caracteres
inválidos.
End If
End Sub
End Class
FORMULARIO
multiplicacionintermedio1
Public Class multiplicacionintermedio1
Protected Overrides Sub
OnPaint(ByVal
Pintar As
PaintEventArgs)
Dim Elipse
As New
Drawing2D.GraphicsPath()
Dim Rectangulo
As New
Rectangle(8, 28, Me.Width – 13, Me.Height – 40) 'La coordenada "x" de la esquina superior izquierda del
rectángulo tiene el valor de 7 para que n o se vea el
borde izquierdo del formulario. La coordenada "y" de la esquina
superior izquierda del rectángulo tiene el valor de 26,
con lo cual se logra que no aparezca la barra de título en
el formulario. El ancho del rectángulo es "Me.Width – 13"
para que no se vea el borde derecho del formulario. El alto del
rectángulo es "Me.Height – 31" para que no se vea la
línea inferior del borde.
Elipse.AddEllipse(Rectangulo)
Me.Region =
New Region(Elipse)
End Sub
'Las siguientes variables deben ser
públicas para que vayan almacenando valores y que los
pierdan hasta que explícitamente se programe un cambio de
valores o cuando se cierre el formulario.
Public
respuestaaciertos As
Integer 'Variable que contabiliza el número de
aciertos.
Public
respuestadesaciertos As
Integer 'Variable que contabiliza el número de
desaciertos.
Private Sub
multiplicacionintermedio1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Al cargar el formulario ya deben
aparecer números:
numero1.Text = obtenernumerorandom(100, 999999)
'Imprime un número random entre 100
y 999999 en el TextBox "numero1".
numero2.Text = obtenernumerorandom(100, 999999)
'Imprime un número random entre 100
y 999999 en el TextBox "numero2".
aciertos.Text = "0"
desaciertos.Text = "0"
End Sub
Private Sub menu1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menu1.Click
Dim mensaje
As String
mensaje = MsgBox("Regresar
al menú cancelará su juego actual. ¿Desea
continuar?", MsgBoxStyle.YesNo, "Juego de Operaciones Básicas para
Bachilleres")
If mensaje = 6
Then
menu2.Show() 'Llama al
formulario "menu2".
Me.Close()
'Cierra el formulario actual.
Else
'No hace nada porque no se ha decidido
por parte del usuario regresar al menú.
End If
End Sub
Private Sub terminar1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles terminar1.Click
Dim mensaje
As String
mensaje = MsgBox("¿Desea realmente terminar este
juego?", MsgBoxStyle.YesNo, "Juego de Operaciones Básicas para
Bachilleres")
If mensaje = 6
Then
resultado1.aciertos1.Text = aciertos.Text
'El número de aciertos se manda a
imprimir al TextBox "aciertos1" que está en el formulario
"resultado1".
resultado1.desaciertos1.Text = desaciertos.Text
'El número de desaciertos se manda a
imprimir al TextBox "desaciertos1" que está en el
formulario "resultado1".
resultado1.notafinal1.Text = 10 / (Val(aciertos.Text) +
Val(desaciertos.Text)) * Val(aciertos.Text) 'Determinar e imprimir la nota final.
resultado1.Show() 'Mandar a
llamar al formulario de resultados. El juego ha
terminado.
End If
End Sub
Private Sub
multiplicacion1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles multiplicacion1.Click
If respuesta.Text =
"" Then
'Si el usuario no ha escrito una
respuesta.
MsgBox("Escriba la
respuesta que considere correcta.",
MsgBoxStyle.Exclamation, "Juego de
Operaciones Matemáticas para
Bachilleres")
respuesta.Focus() 'Se ubica
el cursor en el cuadro de texto de respuestas para que el usuario
escriba su respuesta.
Else
TextBoxoculto.Text = Val(numero1.Text) *
Val(numero2.Text) 'Se guarda en el
TextBox oculto la respuesta correcta.
While Mid(respuesta.Text,
1, 2) = "00" Or Mid(respuesta.Text, 1, 2) =
"01" Or
Mid(respuesta.Text, 1, 2) = "02" Or
Mid(respuesta.Text, 1, 2) = "03" Or
Mid(respuesta.Text, 1, 2) = "04" Or
Mid(respuesta.Text, 1, 2) = "05" Or
Mid(respuesta.Text, 1, 2) = "06" Or
Mid(respuesta.Text, 1, 2) = "07" Or
Mid(respuesta.Text, 1, 2) = "08" Or
Mid(respuesta.Text, 1, 2) = "09" 'Para que los ceros a
la izquierda se borren.
respuesta.Text = Mid(respuesta.Text, 2,
Len(respuesta.Text) – 1)
End While
If (respuesta.Text =
TextBoxoculto.Text) Then
'Si la respuesta introducida por el usuario
es igual a la respuesta correcta.
Dim mensaje
As String
mensaje = MsgBox("¡Felicidades, su respuesta es
correcta!", MsgBoxStyle.OkOnly, "Juego de Operaciones Matemáticas para
Bachilleres")
If mensaje = 1
Then 'Si el
botón presionado es el "Ok" (que es el único que se
le va a presentar entonces ese se tiene que
presionar).
'Generación de números
aleatorios.
numero1.Text = obtenernumerorandom(100, 999999)
'Imprime un número random entre 100
y 999999 en el TextBox "numero1".
numero2.Text = obtenernumerorandom(100, 999999)
'Imprime un número random entre 100
y 999999 en el TextBox "numero2".
respuesta.Text = ""
'Para borrar la respuesta anterior y que el
usuario escriba una nueva respuesta.
respuesta.Focus() 'Para que
el cursor esté listo y que el usuario escriba su
próxima respuesta.
End If
respuestaaciertos += 1 'Suma un acierto.
aciertos.Text = respuestaaciertos 'Imprime el número de aciertos en el
TextBox.
If respuestaaciertos +
respuestadesaciertos = 20 Then
resultado1.aciertos1.Text = aciertos.Text
'El número de aciertos se manda a
imprimir al TextBox "aciertos1" que está en el formulario
"resultado1".
resultado1.desaciertos1.Text = desaciertos.Text
'El número de desaciertos se manda a
imprimir al TextBox "desaciertos1" que está en el
formulario "resultado1".
resultado1.notafinal1.Text = 10 / 20 *
Val(aciertos.Text)
resultado1.Show() 'Mandar a
llamar al formulario de resultados. El juego ha
terminado.
Me.Close()
'Cierra el formulario actual.
End If
Else
Dim mensaje
As String
mensaje = MsgBox("¡Incorrecto! La respuesta es: " +
TextBoxoculto.Text + ".", MsgBoxStyle.OkOnly,
"Juego de Operaciones Matemáticas
para Bachilleres")
If mensaje = 1
Then 'Si el
botón presionado es el "Ok" (que es el único que se
le va a presentar entonces ese se tiene que
presionar).
'Generación de números
aleatorios.
numero1.Text = obtenernumerorandom(100, 999999)
'Imprime un número random entre 100
y 999999 en el TextBox "numero1".
numero2.Text = obtenernumerorandom(100, 999999)
'Imprime un número random entre 100
y 999999 en el TextBox "numero2".
respuesta.Text = ""
'Para borrar la respuesta anterior y que el
usuario escriba una nueva respuesta.
respuesta.Focus() 'Para que
el cursor esté listo y que el usuario escriba su
próxima respuesta.
End If
respuestadesaciertos += 1 'Suma un desacierto.
desaciertos.Text = respuestadesaciertos
'Imprime el número de desaciertos en
el TextBox.
If respuestaaciertos +
respuestadesaciertos = 20 Then
resultado1.aciertos1.Text = aciertos.Text
'El número de aciertos se manda a
imprimir al TextBox "aciertos1" que está en el formulario
"resultado1".
resultado1.desaciertos1.Text = desaciertos.Text
'El número de desaciertos se manda a
imprimir al TextBox "desaciertos1" que está en el
formulario "resultado1".
resultado1.notafinal1.Text = 10 / 20 *
Val(aciertos.Text)
resultado1.Show() 'Mandar a
llamar al formulario de resultados. El juego ha
terminado.
Me.Close()
'Cierra el formulario actual.
End If
End If
End If
End Sub
Private Sub respuesta_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles respuesta.KeyPress
If (Asc(e.KeyChar) >=
48 And Asc(e.KeyChar)
<= 57) Or
(Asc(e.KeyChar) = 8) Then 'Los únicos
caracteres que se permitirá introducir en el TextBox
serán los números del 0 al 9 (ASCII del 48 al
57).
'No se hace nada porque el caracter
presionado es válido.
Else
e.KeyChar = ""
'Reemplaza la tecla digitada con un valor
Void o vacío, para que no puedan introducir caracteres
inválidos.
End If
End Sub
End Class
FORMULARIO
portada1
Public Class portada1
Protected Overrides Sub
OnPaint(ByVal
Pintar As
PaintEventArgs)
Dim Elipse
As New
Drawing2D.GraphicsPath()
Dim Rectangulo
As New
Rectangle(8, 28, Me.Width – 13, Me.Height – 40) 'La coordenada "x" de la esquina superior izquierda del
rectángulo tiene el valor de 7 para que n o se vea el
borde izquierdo del formulario. La coordenada "y" de la esquina
superior izquierda del rectángulo tiene el valor de 26,
con lo cual se logra que no aparezca la barra de título en
el formulario. El ancho del rectángulo es "Me.Width – 13"
para que no se vea el borde derecho del formulario. El alto del
rectángulo es "Me.Height – 31" para que no se vea la
línea inferior del borde.
Elipse.AddEllipse(Rectangulo)
Me.Region =
New Region(Elipse)
End Sub
Private Sub
botoncomenzar_Click(ByVal
sender As
System.Object, ByVal
e As
System.EventArgs) Handles botoncomenzar.Click
menu2.Show() 'Llama al
formulario "menu2".
Me.Hide()
'Oculta el formulario actual.
menu2.portada.Select() 'Para que automáticamente esté
seleccionado el botón "basico" cuando la persona se vaya
al formulario del menú, de manera que simplemente
presionando Enter pueda el usuario entrar al siguiente formulario
sin tener que utilizar el mouse. Si le
pone "menu1." al inicio porque se está invocando o
haciendo referencia a un objeto de un formulario externo,
entonces promero se especifica el formulario en el que se
encuentra el objeto y luego el objeto en sí.
End Sub
Private Sub acercade_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles acercade.Click
acercade1.Show() 'Muestra el
formulario "acercade1".
Me.Hide()
'Oculta el formulario actual.
End Sub
End Class
FORMULARIO
restaavanzado1
Public Class restaavanzado1
Protected Overrides Sub
OnPaint(ByVal
Pintar As
PaintEventArgs)
Dim Elipse
As New
Drawing2D.GraphicsPath()
Dim Rectangulo
As New
Rectangle(8, 28, Me.Width – 13, Me.Height – 40) 'La coordenada "x" de la esquina superior izquierda del
rectángulo tiene el valor de 7 para que n o se vea el
borde izquierdo del formulario. La coordenada "y" de la esquina
superior izquierda del rectángulo tiene el valor de 26,
con lo cual se logra que no aparezca la barra de título en
el formulario. El ancho del rectángulo es "Me.Width – 13"
para que no se vea el borde derecho del formulario. El alto del
rectángulo es "Me.Height – 31" para que no se vea la
línea inferior del borde.
Elipse.AddEllipse(Rectangulo)
Me.Region =
New Region(Elipse)
End Sub
'Las siguientes variables deben ser
públicas para que vayan almacenando valores y que los
pierdan hasta que explícitamente se programe un cambio de
valores o cuando se cierre el formulario.
Public
respuestaaciertos As
Integer 'Variable que contabiliza el número de
aciertos.
Public
respuestadesaciertos As
Integer 'Variable que contabiliza el número de
desaciertos.
Private Sub
restaavanzado1_Load(ByVal
sender As
System.Object, ByVal
e As
System.EventArgs) Handles MyBase.Load
'Al cargar el formulario ya deben
aparecer números:
numero1.Text = obtenernumerorandom(1, 99) +
"/" + obtenernumerorandom(1,
99) 'Imprime un número random
entre 1 y 99 contatenado con "+" concatenado con un número
random entre 1 y 99, para obtener algo como "33/32", y eso se
imprime en el TextBox "numero1".
numero2.Text = obtenernumerorandom(1, 99) +
"/" + obtenernumerorandom(1,
99) 'Imprime un número random
entre 1 y 99 contatenado con "+" concatenado con un número
random entre 1 y 99, para obtener algo como "34/32", y eso se
imprime en el TextBox "numero2".
aciertos.Text = "0"
desaciertos.Text = "0"
End Sub
Private Sub menu1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menu1.Click
Dim mensaje
As String
mensaje = MsgBox("Regresar
al menú cancelará su juego actual. ¿Desea
continuar?", MsgBoxStyle.YesNo, "Juego de Operaciones Básicas para
Bachilleres")
If mensaje = 6
Then
menu2.Show() 'Llama al
formulario "menu2".
Me.Close()
'Cierra el formulario actual.
Else
'No hace nada porque no se ha decidido
por parte del usuario regresar al menú.
End If
End Sub
Private Sub restar1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles restar1.Click
If respuesta.Text =
"" Then
'Si el usuario no ha escrito una
respuesta.
MsgBox("Escriba la
respuesta que considere correcta.",
MsgBoxStyle.Exclamation, "Juego de
Operaciones Matemáticas para
Bachilleres")
respuesta.Focus() 'Se ubica
el cursor en el cuadro de texto de respuestas para que el usuario
escriba su respuesta.
Else
'Encontrar el numerador y el denominador
del "numero1".
Dim longitudcadena1
As Integer = Len(numero1.Text)
'Variable para almacenar la longitud de la
cadena que hay en el Textbox "numero1".
Dim
caracterevaluado1 As
String 'Para
evaluar caracter por caracter con el Mid().
Dim posicionpleca1
As Integer 'Para determinar
el número de la posición en la que se encuentra la
pleca dentro de la cadena.
Dim numerador1
As String 'Almacena el
numerador del Textbox que se está evaluando.
Dim denominador1
As String 'Almacena el
denominador del Textbox que se está evaluando.
Dim banderapleca1
As Integer 'Bandera o
marcador que devolverá 1 si se encontró una pleca
en la cadena, y 0 en el caso que no se haya
encontrado.
For ciclo
As Integer = 1 To longitudcadena1 'Para evaluar caracter por caracter hasta encontrar una
"/".
caracterevaluado1 = Mid(numero1.Text, ciclo,
1)
If caracterevaluado1
= "/" Then
posicionpleca1 = ciclo
banderapleca1 = 1
End If
Next
If banderapleca1 = 1
Then 'En el
caso que se haya encontrado una pleca en la cadena, lo que indica
que el usuario introdujo un número
fraccionario.
numerador1 = Mid(numero1.Text, 1, posicionpleca1 –
1) 'El numerador será desde
el primer caracter hasta el que está antes de que se
digitara la pleca.
denominador1 = Mid(numero1.Text, posicionpleca1 + 1,
longitudcadena1 – posicionpleca1) 'El denominador será desde un caracter
después de la pleca, hasta el último caracter de la
cadena.
Else 'En el
caso que no se haya encontrado una pleca en la cadena, lo que
indica que el usiario introdujo un número entero. Debido a
que no se pueden meter puntos ni espacios ni caracteres
especiales debido a la programación del KeyPress, el no
encontrar una pleca garantiza que se introdujo un
entero.
numerador1 = Mid(numero1.Text, 1,
longitudcadena1)
denominador1 = 1
End If
'Encontrar el numerador y el denominador
del "numero2".
Dim longitudcadena2
As Integer = Len(numero2.Text)
'Variable para almacenar la longitud de la
cadena que hay en el Textbox "numero2".
Dim
caracterevaluado2 As
String 'Para
evaluar caracter por caracter con el Mid().
Dim posicionpleca2
As Integer 'Para determinar
el número de la posición en la que se encuentra la
pleca dentro de la cadena.
Dim numerador2
As String 'Almacena el
numerador del Textbox que se está evaluando.
Dim denominador2
As String 'Almacena el
denominador del Textbox que se está evaluando.
Dim banderapleca2
As Integer 'Bandera o
marcador que devolverá 1 si se encontró una pleca
en la cadena, y 0 en el caso que no se haya
encontrado.
For ciclo
As Integer = 1 To longitudcadena2 'Para evaluar caracter por caracter hasta encontrar una
"/".
caracterevaluado2 = Mid(numero2.Text, ciclo,
1)
If caracterevaluado2
= "/" Then
posicionpleca2 = ciclo
banderapleca2 = 1
End If
Next
If banderapleca2 = 1
Then 'En el
caso que se haya encontrado una pleca en la cadena, lo que indica
que el usuario introdujo un número
fraccionario.
numerador2 = Mid(numero2.Text, 1, posicionpleca2 –
1) 'El numerador será desde
el primer caracter hasta el que está antes de que se
digitara la pleca.
denominador2 = Mid(numero2.Text, posicionpleca2 + 1,
longitudcadena2 – posicionpleca2) 'El denominador será desde un caracter
después de la pleca, hasta el último caracter de la
cadena.
Else 'En el
caso que no se haya encontrado una pleca en la cadena, lo que
indica que el usiario introdujo un número entero. Debido a
que no se pueden meter puntos ni espacios ni caracteres
especiales debido a la programación del KeyPress, el no
encontrar una pleca garantiza que se introdujo un
entero.
numerador2 = Mid(numero2.Text, 1,
longitudcadena2)
denominador2 = 1
End If
'Convertir los valores de los TextBox a
objetos "Fraccion", mediante la clase.
Dim fraccion_numero1
As New
Fraccion(numerador1, denominador1)
'Convertir los valores de los TextBox a
objetos "Fraccion", mediante la clase.
Dim fraccion_numero2
As New
Fraccion(numerador2, denominador2)
Dim
fraccion_respuesta As
Fraccion 'Variable que
almacenará la respuesta.
fraccion_respuesta = fraccion_numero1 –
fraccion_numero2
TextBoxoculto.Text = fraccion_respuesta.ToString
'La respuesta es de tipo "Fraccion" (la
clase creada) y se transforma a tipo "String" para poder
imprimirla en un TextBox.
'Condición para quitar el
denominador de 1.
If
Strings.Right(TextBoxoculto.Text, 2) = "/1" Then
'Si el número tiene como divisor
1.
TextBoxoculto.Text = Strings.Left(TextBoxoculto.Text,
Strings.Len(TextBoxoculto.Text) – 2) 'Con esto se quita el "/1", por ejemplo si fuera "34/1"
quedará solamente "34".
End If
Dim plecaubicacion
As Integer 'Para saber en
qué parte de la cadena se encuentra la pleca.
For ciclo
As Integer = 1 To Len(respuesta.Text)
caracterevaluado1 = Mid(respuesta.Text, ciclo, 1)
'Toma el caracter correspondiente,
dependiendo de la iteración en la que vaya el ciclo
For.
If caracterevaluado1
= "/" Then
plecaubicacion = ciclo
End If
Next
If Mid(respuesta.Text,
plecaubicacion + 1, 1) = "-"
Then 'Si el
signo menos viene con el denominador.
respuesta.Text = "-"
+ Mid(respuesta.Text, 1, plecaubicacion – 1) +
"/" + Mid(respuesta.Text,
plecaubicacion + 2, Len(respuesta.Text)) 'Si se escribiera "423/-42" se cambiaría por
"-423/42".
End If
If Mid(respuesta.Text, 1,
1) = "-" Then 'Si el número
es negativo.
respuesta.Text = Mid(respuesta.Text, 2,
Len(respuesta.Text))
While Mid(respuesta.Text,
1, 2) = "00" Or Mid(respuesta.Text, 1, 2) =
"01" Or
Mid(respuesta.Text, 1, 2) = "02" Or
Mid(respuesta.Text, 1, 2) = "03" Or
Mid(respuesta.Text, 1, 2) = "04" Or
Mid(respuesta.Text, 1, 2) = "05" Or
Mid(respuesta.Text, 1, 2) = "06" Or
Mid(respuesta.Text, 1, 2) = "07" Or
Mid(respuesta.Text, 1, 2) = "08" Or
Mid(respuesta.Text, 1, 2) = "09" 'Para que los ceros a
la izquierda se borren.
respuesta.Text = Mid(respuesta.Text, 2,
Len(respuesta.Text) – 1)
End While
For ciclo
As Integer = 1 To Len(respuesta.Text)
caracterevaluado1 = Mid(respuesta.Text, ciclo, 1)
'Toma el caracter correspondiente,
dependiendo de la iteración en la que vaya el ciclo
For.
If caracterevaluado1
= "/" Then
plecaubicacion = ciclo
End If
Next
While Mid(respuesta.Text,
plecaubicacion + 1, 2) = "00"
Or Mid(respuesta.Text,
plecaubicacion + 1, 2) = "01"
Or Mid(respuesta.Text,
plecaubicacion + 1, 2) = "02"
Or Mid(respuesta.Text,
plecaubicacion + 1, 2) = "03"
Or Mid(respuesta.Text,
plecaubicacion + 1, 2) = "04"
Or Mid(respuesta.Text,
plecaubicacion + 1, 2) = "05"
Or Mid(respuesta.Text,
plecaubicacion + 1, 2) = "06"
Or Mid(respuesta.Text,
plecaubicacion + 1, 2) = "07"
Or Mid(respuesta.Text,
plecaubicacion + 1, 2) = "08"
Or Mid(respuesta.Text,
plecaubicacion + 1, 2) = "09"
'Para quitar los ceros del
denominador.
respuesta.Text = Mid(respuesta.Text, 1, plecaubicacion –
1) + "/" +
Mid(respuesta.Text, plecaubicacion + 2,
Len(respuesta.Text)) 'Para que si el
usuario escribe "433/0000432", cambiará a
"443/432".
End While
Página anterior | Volver al principio del trabajo | Página siguiente |