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 permiritá introducir en el TextBox serán los números del 0 al 9 (ASCII del 48 al 57) y se permitirá también usar el Backspace (ASCII 8) para borrar. El signo menos (ASCII 45) se evalúa más adelante.
'No se hace nada porque el caracte presionado es válido.
Else
If (Asc(e.KeyChar)) = 46 Then 'Si se introduce un punto, se evaluará que no haya más de uno.
Dim contadorpuntos As Integer 'Para programar que no se permitan varios signos puntos en la respuesta.
Dim caracterevaluado As String 'Para evaluar caracter por caracter con el Mid().
Dim longitudcadena As Integer = Len(respuesta.Text) 'Variable para almacenar la longitud de la cadena que hay en el text box "respuesta".
For ciclo As Integer = 1 To longitudcadena 'Para evaluar caracter por caracter hasta encontrar un punto.
caracterevaluado = Mid(respuesta.Text, ciclo, 1) 'Toma el caracter correspondiente, dependiendo de la iteración en la que vaya el ciclo For.
If caracterevaluado = "." Then
contadorpuntos += 1
End If
Next
If contadorpuntos > 0 Then 'Si ya se ha digitado un signo menos.
e.KeyChar = "" 'Reemplaza la letra o caracter digitado por un valor vacío, de manera que no se permita la introducción de más de un punto.
End If
Else 'Si el caracter introducido es inválido.
e.KeyChar = "" 'Reemplaza la letra o caracter digitado por un valor vacío, de manera que no se permita la introducción de caracteres inválidos.
End If
End If
End Sub
End Class
FORMULARIO divisionintermedio1
Imports System.Math 'Esto se pone porque será necesario usar la función Round(), y si no se pone esta línea no estará disponible esa función, que servirá para programar que se usen solamente dos dígitos significativos (precisión) en las respuestas.
Public Class divisionintermedio1
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 divisionintermedio1_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 division1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles division1.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
Dim caracterevaluado1 As String
Dim existepunto As Boolean = False 'Valdrá 1 si existe un punto en la respuesta y 0 si no existe.
Dim puntoubicacion As Integer 'Para saber en qué parte de la cadena se encuentra el punto decimal.
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
puntoubicacion = ciclo
existepunto = True
End If
Next
If existepunto = True Then 'Si existe un punto decimal se hacen todas las siguientes evaluaciones.
respuesta.Text = Mid(respuesta.Text, 1, puntoubicacion + 2) 'Si se escribió "343.043243" se transformará a "343.04". Cualquier valor se deja con 2 decimales.
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, que solamente se permita un cero antes del punto, si es que se va a escribir un cero.
respuesta.Text = Mid(respuesta.Text, 2, Len(respuesta.Text) – 1)
End While
If Mid(respuesta.Text, 2, 3) = ".00" Then 'Si al final de la respuesta se tiene "2.00", se convertiría en "2".
respuesta.Text = Mid(respuesta.Text, 1, 1)
End If
If Len(respuesta.Text) = 3 And Mid(respuesta.Text, 2, 2) = ".0" Then 'Si la respuesta es "8.0", se convertiría en "8".
respuesta.Text = Mid(respuesta.Text, 1, 1)
End If
If Mid(respuesta.Text, 1, 1) = "." Then 'Si comienza la respuesta con ".", concatenarle "0". Por ejemplo, ".34" lo convertiría en "0.34"
respuesta.Text = "0" + respuesta.Text
End If
If Mid(respuesta.Text, 4, 1) = "0" Then 'Si la respuesta es "1.3" y el usuario escribe "1.30", el sistema se lo cambiaría a "1.3".
respuesta.Text = Mid(respuesta.Text, 1, 3)
End If
If Mid(respuesta.Text, Len(respuesta.Text), 1) = "." Then 'Si al final de la respuesta hay un punto, por ejemplo "93." lo convertiría en "93".
respuesta.Text = Mid(respuesta.Text, 1, Len(respuesta.Text) – 1)
End If
End If
TextBoxoculto.Text = Round(Val(numero1.Text) / Val(numero2.Text), 2) 'Se guarda en el TextBox oculto la respuesta correcta. Se usan dos dígitos significativos (precisión).
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 permiritá introducir en el TextBox serán los números del 0 al 9 (ASCII del 48 al 57) y se permitirá también usar el Backspace (ASCII 8) para borrar. El signo menos (ASCII 45) se evalúa más adelante.
'No se hace nada porque el caracte presionado es válido.
Else
If (Asc(e.KeyChar)) = 46 Then 'Si se introduce un punto, se evaluará que no haya más de uno.
Dim contadorpuntos As Integer 'Para programar que no se permitan varios signos puntos en la respuesta.
Dim caracterevaluado As String 'Para evaluar caracter por caracter con el Mid().
Dim longitudcadena As Integer = Len(respuesta.Text) 'Variable para almacenar la longitud de la cadena que hay en el text box "respuesta".
For ciclo As Integer = 1 To longitudcadena 'Para evaluar caracter por caracter hasta encontrar un punto.
caracterevaluado = Mid(respuesta.Text, ciclo, 1) 'Toma el caracter correspondiente, dependiendo de la iteración en la que vaya el ciclo For.
If caracterevaluado = "." Then
contadorpuntos += 1
End If
Next
If contadorpuntos > 0 Then 'Si ya se ha digitado un signo menos.
e.KeyChar = "" 'Reemplaza la letra o caracter digitado por un valor vacío, de manera que no se permita la introducción de más de un punto.
End If
Else 'Si el caracter introducido es inválido.
e.KeyChar = "" 'Reemplaza la letra o caracter digitado por un valor vacío, de manera que no se permita la introducción de caracteres inválidos.
End If
End If
End Sub
End Class
FORMULARIO Form1
Public Class Form1
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 Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
suma.Visible = False
resta.Visible = True
Timer1.Enabled = False 'Para desactivarlo.
End Sub
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
resta.Visible = False
multiplicacion.Visible = True
Timer2.Enabled = False 'Para desactivarlo.
End Sub
Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick
multiplicacion.Visible = False
division.Visible = True
Timer3.Enabled = False 'Para desactivarlo.
End Sub
Private Sub Timer4_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer4.Tick
division.Visible = False
fraccionmultiplicacion.Visible = True
Timer4.Enabled = False 'Para desactivarlo.
End Sub
Private Sub Timer5_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer5.Tick
fraccionmultiplicacion.Visible = False
fracciondivision.Visible = True
Timer5.Enabled = False 'Para desactivarlo.
End Sub
Private Sub Timer6_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer6.Tick
fracciondivision.Visible = False
suma.Visible = True
Timer6.Enabled = False 'Para desactivarlo.
End Sub
Private Sub Timer7_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer7.Tick
suma.Visible = False
resta.Visible = True
Timer7.Enabled = False 'Para desactivarlo.
End Sub
Private Sub Timer8_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer8.Tick
resta.Visible = False
multiplicacion.Visible = True
Timer8.Enabled = False 'Para desactivarlo.
End Sub
Private Sub Timer9_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer9.Tick
multiplicacion.Visible = False
division.Visible = True
Timer9.Enabled = False 'Para desactivarlo.
End Sub
Private Sub Timer10_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer10.Tick
division.Visible = False
fraccionmultiplicacion.Visible = True
Timer10.Enabled = False 'Para desactivarlo.
End Sub
Private Sub Timer11_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer11.Tick
fraccionmultiplicacion.Visible = False
fracciondivision.Visible = True
Timer11.Enabled = False 'Para desactivarlo.
End Sub
Private Sub Timer12_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer12.Tick
fracciondivision.Visible = False
bienvenido.Visible = True
AxShockwaveFlash1.Visible = False
botonentrar.Visible = True
botonentrar.Select() 'Para que automáticamente esté seleccionado el botón "botonentrar" cuando desaparezca la animación y desaparezca también el elemento flash que dice "Cargando…", y que simplemente presionando Enter pueda el usuario entrar al siguiente formulario sin tener que utilizar el mouse.
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
suma.Visible = True
resta.Visible = False
multiplicacion.Visible = False
division.Visible = False
fraccionmultiplicacion.Visible = False
fracciondivision.Visible = False
bienvenido.Visible = False
End Sub
Private Sub botonentrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles botonentrar.Click
portada1.Show() 'Llama al formulario "portada".
Me.Hide() 'Oculta el formulario actual.
portada1.botoncomenzar.Select() 'Para que automáticamente esté seleccionado el botón "botoncomenzar" cuando la persona se vaya al formulario de la portada, de manera que simplemente presionando Enter pueda el usuario entrar al siguiente formulario sin tener que utilizar el mouse. Se le pone "portada." al inicio porque se está invocando o haciendo referencia a un objeto de un formulario externo, entonces primero se especifica el formulario en el que se encuentra el objeto y luego el objeto en sí.
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
resultado1.Show() 'Llama al formulario "resultado1".
Me.Hide() 'Oculta el formulario actual.
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
portada1.Show() 'Llama al formulario "portada".
Me.Hide() 'Oculta el formulario actual.
End Sub
End Class
MÓDULO fracción
Public Structure Fraccion 'Pudo haber sido también "Public Class Fraccion" y los resultados hubiesen sido los mismos.
' Las dos partes de una fracción.
Public Denominador As Integer
Public Numerador As Integer
Public Sub New(ByVal numerador As Integer, ByVal denominador As Integer)
Me.Numerador = numerador
Me.Denominador = denominador
End Sub
Public Shared Operator +(ByVal x As Fraccion, ByVal y As Fraccion) _
As Fraccion
Return Normalizar(x.Numerador * y.Denominador + _
y.Numerador * x.Denominador, x.Denominador * y.Denominador)
End Operator
Public Shared Operator -(ByVal x As Fraccion, ByVal y As Fraccion) _
As Fraccion
Return Normalizar(x.Numerador * y.Denominador – _
y.Numerador * x.Denominador, x.Denominador * y.Denominador)
End Operator
Public Shared Operator *(ByVal x As Fraccion, ByVal y As Fraccion) _
As Fraccion
Return Normalizar(x.Numerador * y.Numerador, _
x.Denominador * y.Denominador)
End Operator
Public Shared Operator /(ByVal x As Fraccion, ByVal y As Fraccion) _
As Fraccion
Return Normalizar(x.Numerador * y.Denominador, _
x.Denominador * y.Numerador)
End Operator
' Reducir a fracción.
Private Shared Function Normalizar(ByVal numerador As Integer, _
ByVal denominador As Integer) As Fraccion
If (numerador <> 0) And (denominador <> 0) Then
' Arreglar los signos.
If denominador < 0 Then
denominador *= -1
numerador *= -1
End If
Dim divisor As Integer = MCD(numerador, denominador)
numerador = divisor
denominador = divisor
End If
Return New Fraccion(numerador, denominador)
End Function
' Retorna el máximo común divisor usando el algoritmo de Euclides.
Private Shared Function MCD(ByVal x As Integer, ByVal y As Integer) _
As Integer
Dim temp As Integer
x = Math.Abs(x)
y = Math.Abs(y)
Do While (y <> 0)
temp = x Mod y
x = y
y = temp
Loop
Return x
End Function
' Convierte la fracción a la forma decimal.
Public Function ObtenerDouble() As Double
Return CType(Me.Numerador, Double) / _
CType(Me.Denominador, Double)
End Function
' Obtener una cadena que represente a la fracción.
Public Overrides Function ToString() As String
Return Me.Numerador.ToString & "/" & Me.Denominador.ToString
End Function
End Structure 'Aquí hubiese sido "End Class" si se hubiera usado "Public Class Fraction" en vez de "Public Structure Fraction"
FORMULARIO intermedio1
Public Class intermedio1
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 regresar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menu.Click, menu.Click
menu2.Show() 'Llama al formulario "menu2".
Me.Hide() 'Oculta el formulario actual.
End Sub
Private Sub seleccionar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles seleccionar.Click
If RadioButtonsuma.Checked = True Then
sumaintermedio1.Show() 'Llama al formulario "sumaintermedio1".
Me.Hide() 'Oculta el formulario actual.
End If
If RadioButtonresta.Checked = True Then
restaintermedio1.Show() 'Llama al formulario "restaintermedio1".
Me.Hide() 'Oculta el formulario actual.
End If
If RadioButtonmultiplicacion.Checked = True Then
multiplicacionintermedio1.Show() 'Llama al formulario "multiplicacionintermedio1".
Me.Hide() 'Oculta el formulario actual.
End If
If RadioButtondivision.Checked = True Then
divisionintermedio1.Show() 'Llama al formulario "divisionintermedio1".
Me.Hide() 'Oculta el formulario actual.
End If
If (RadioButtonsuma.Checked = False) And (RadioButtonresta.Checked = False) And (RadioButtonmultiplicacion.Checked = False) And (RadioButtondivision.Checked = False) Then
MsgBox("Seleccione la operación matemática que desea realizar", MsgBoxStyle.Exclamation, "Juego de Operaciones Matemáticas para Bachilleres")
End If
End Sub
End Class
FORMULARIO menu2
Public Class menu2
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 portada_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles portada.Click
portada1.Show() 'Llama al formulario "portada".
Me.Hide() 'Oculta el formulario actual.
portada1.botoncomenzar.Select() 'Para que automáticamente esté seleccionado el botón "botoncomenzar" cuando la persona se vaya al formulario de la portada, de manera que simplemente presionando Enter pueda el usuario entrar al siguiente formulario sin tener que utilizar el mouse. Se le pone "portada." al inicio porque se está invocando o haciendo referencia a un objeto de un formulario externo, entonces primero se especifica el formulario en el que se encuentra el objeto y luego el objeto en sí.
End Sub
Private Sub basico_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles basico.Click
basico1.Show() 'Llama al formulario "basico1".
Me.Hide() 'Oculta el formulario actual.
End Sub
Private Sub intermedio_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles intermedio.Click
intermedio1.Show() 'Llama al formulario "intermedio1".
Me.Hide() 'Oculta el formulario actual.
End Sub
Private Sub avanzado_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles avanzado.Click
avanzado1.Show() 'Llama al formulario "basico1".
Me.Hide() 'Oculta el formulario actual.
End Sub
Private Sub salir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles salir.Click
Dim mensaje As String
mensaje = MsgBox("¿Desea realmente salir del programa?", MsgBoxStyle.YesNo, "Juego de Operaciones Básicas para Bachilleres")
If mensaje = 6 Then
End
End If
End Sub
End Class
MÓDULO Module1
Module Module1
Public Function obtenernumerorandom(ByVal numerominimo As Integer, ByVal numeromaximo As Integer) As String
'Cuando el formulario "sumabasico1" carga:
Randomize() 'Fijar la semilla aleatoria para usarla con la función Rnd().
'La función Rnd() devuelve un número random menor que 1 pero mayor que 0.
'La siguiente línea de código devuelve un valor random entre el "numerominimo" y el "numeromaximo" que son pasados como argumentos de esta función.
obtenernumerorandom = CInt(Int((numeromaximo – numerominimo + 1) * Rnd() + numerominimo))
End Function
End Module
FORMULARIO multiplicacionavanzado1
Public Class multiplicacionavanzado1
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 multiplicacionavanzado1_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 "34/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 "33/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 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
'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
Página anterior | Volver al principio del trabajo | Página siguiente |