He implementado un código del curso de Python a Gambas.
Lo hice lo más parecido. Esta vez, la pelota rebota tanto en un dominio o entorno rectangular como circular.
Dominio rectangular:
Dominio circular:
La idea principal del código es demostrar el uso una vez más de la programación orientada a objetos.
Tenemos tres clases. Y no modificamos "para nada" el código de la clase "Pelota" para hacer uso
de los dos tipos de dominios.
Quiero comentar también, que no existe una clase padre Dominio. Ya que el código de los dos dominios son distintos.
Os muestro el FMain:
Private bola As Pelota
Private dominio As Variant
Public Sub Form_Open()
Me.Title = "Pelota en entorno 2D"
Randomize
Menu()
End
Public Sub Menu()
Dim respuesta As Integer
respuesta = Message.Question("¿ Qué tipo de dominio quieres ?", "Circular", "Rectangular")
Select Case respuesta
Case 1
dominio = New DominioCircular([Comun.ANCHO / 2, Comun.ALTO / 2], 180)
bola = New Pelota(Comun.radio, Color.White, dominio)
Case 2
dominio = New DominioRectangular(Comun.ANCHO, Comun.ALTO)
bola = New Pelota(Comun.radio, Color.White, dominio)
End Select
Timer1.Start
End
Public Sub Canvas_Draw()
bola.Actualizar()
dominio.dibujar()
bola.Dibujar()
End
Public Sub Timer1_Timer()
Canvas.Refresh()
End
Public Sub Form_Close()
Dim respuesta As Integer
Timer1.Stop
bola = Null
dominio = Null
respuesta = Message.Question("¿ Desea salir ?", "Salir", "Probar otro dominio")
Select Case respuesta
Case 1
Me.Close
Case 2
Menu()
Stop Event
End Select
End
Public Sub Form_KeyPress()
Me.Close
End
Private dominio As Variant
Public Sub Form_Open()
Me.Title = "Pelota en entorno 2D"
Randomize
Menu()
End
Public Sub Menu()
Dim respuesta As Integer
respuesta = Message.Question("¿ Qué tipo de dominio quieres ?", "Circular", "Rectangular")
Select Case respuesta
Case 1
dominio = New DominioCircular([Comun.ANCHO / 2, Comun.ALTO / 2], 180)
bola = New Pelota(Comun.radio, Color.White, dominio)
Case 2
dominio = New DominioRectangular(Comun.ANCHO, Comun.ALTO)
bola = New Pelota(Comun.radio, Color.White, dominio)
End Select
Timer1.Start
End
Public Sub Canvas_Draw()
bola.Actualizar()
dominio.dibujar()
bola.Dibujar()
End
Public Sub Timer1_Timer()
Canvas.Refresh()
End
Public Sub Form_Close()
Dim respuesta As Integer
Timer1.Stop
bola = Null
dominio = Null
respuesta = Message.Question("¿ Desea salir ?", "Salir", "Probar otro dominio")
Select Case respuesta
Case 1
Me.Close
Case 2
Menu()
Stop Event
End Select
End
Public Sub Form_KeyPress()
Me.Close
End
Como veis he usado el tipo Variant.
Ademas de las tres clases hice uso de un modulo donde he añadido algunas funciones y valores comunes por defecto.
Opinen para que aprendamos todos.
P.d tuve que usar tipo Float. Como sabéis en Python los tipos de datos no se definen y a la hora de la conversión es un poco complicado.
La pelota se escapaba por los bordes, al no coincidir los decimales.
PelotaFisicaEntornoGenerico2D.tar.gz | ||
Descripción: | Objeto en un entorno 2D con distinto tipo de dominio o alcance | Descargar |
Nombre del archivo: | PelotaFisicaEntornoGenerico2D.tar.gz | |
Tamaño: | 13.63 KB | |
Descargado: | 24 veces |
PelotaFisicaEntornoGenerico2D.tar.gz | ||
Descripción: | Objeto en un entorno 2D con distinto tipo de dominio o alcance | Descargar |
Nombre del archivo: | PelotaFisicaEntornoGenerico2D.tar.gz | |
Tamaño: | 13.63 KB | |
Descargado: | 24 veces |
PelotaFisicaEntornoGenerico2D.tar.gz | ||
Descripción: | Objeto en un entorno 2D con distinto tipo de dominio o alcance | Descargar |
Nombre del archivo: | PelotaFisicaEntornoGenerico2D.tar.gz | |
Tamaño: | 13.63 KB | |
Descargado: | 24 veces |