Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: rubenju en 11 Abril 2019, 02:15 am



Título: ayuda con juego
Publicado por: rubenju en 11 Abril 2019, 02:15 am
Hola, alguien podría ayudarme con la programación de un juego en visual basic, algo asi como: un juego de preguntas y respuestas, que sea por niveles, es decir cada 5 preguntas avanza un nivel . Se agradece la ayuda


Título: Re: ayuda con juego
Publicado por: srWhiteSkull en 11 Abril 2019, 04:07 am
 Usa dos ficheros, uno para las preguntas y otro para las respuestas. En el fichero de preguntas las líneas pares son preguntas y las impares el número de la respuesta numérica que tiene como primera cero. Para las respuestas podrías ponerlas en cada línea y poner una línea vacía para indicar que ya no hay más respuestas para la pregunta correspondiente.

 Teniendo ésto simplemente debes aprender a pasar los ficheros a dos arrays, preguntas y respuestas, donde respuestas sería un array bidimensional. Luego aprendes a pasar esos arrays a una interfaz de usuario, por ejemplo la consola.

https://docs.microsoft.com/es-es/dotnet/visual-basic/developing-apps/programming/drives-directories-files/walkthrough-manipulating-files-and-directories

https://docs.microsoft.com/es-es/dotnet/visual-basic/programming-guide/language-features/arrays/

https://docs.microsoft.com/es-es/visualstudio/ide/quickstart-visual-basic-console?view=vs-2019

https://docs.microsoft.com/es-es/dotnet/visual-basic/programming-guide/language-features/control-flow/loop-structures

https://docs.microsoft.com/es-es/dotnet/visual-basic/programming-guide/language-features/control-flow/decision-structures

https://docs.microsoft.com/es-es/dotnet/visual-basic/programming-guide/language-features/variables/variable-declaration

https://docs.microsoft.com/es-es/dotnet/visual-basic/programming-guide/language-features/declared-elements/scope


Título: Re: ayuda con juego
Publicado por: Serapis en 11 Abril 2019, 18:08 pm
¿Qué tienes hecho hasta el momento.?

Si no tienes ni por donde empezar:
Lo ideal es que esté diseñado tipo test...
Una pregunta y 3-4-5 respuestas posibles donde elgir (un número fijo facilita la cuestión a un novato).

Así debería empezar por crear una estructura así:
Código
  1. private type PreguntaRespuestas
  2.    Pregunta        as string
  3.    RespuestaA    as string
  4.    RespuestaB    as string
  5.    RespuestaC    as string
  6.    RespuestaD    as string
  7.    Solucion         as byte
  8. end type
  9.  
  10. ' y las declaraciones de variables (algunas son redundantes pero ayudan a un novato a entender mejor...
  11.  
  12.  
  13. Private NumPreguntas    As Integer                  ' Numero total de preguntas que tiene el fichero.
  14. Private NumPregunta     As Integer                  ' n de pregunta.
  15. Private Nivel           As Byte                     ' Nivel actual
  16. Private Pregunta        As PreguntaRespuestas       ' Datos d ela pregunta
  17. Private Respuesta       As Integer                  ' respuesta que da el usuario
  18. Private Aciertos        As Integer                  ' Cantidad de aciertos hasta el momento
  19. Private Ruta            As String                   ' la ruta donde s elocaliza el fichero
  20. Private Canal           As Integer                  ' Canal de lectura/escritura del fichero
  21.  

Luego se trata de leer el fichero, una entrada por cada pregunta...
Con "line input" se leen líneas enteras, así que el fichero debe mantener la estructura de más arriba, además, debería haber una cabecera en el fichero que indique cuantas preguntas contiene el fichero...

El código para leer la siguiente pregunta podría ser tal que así:
(primero hay que abrirlo, desde la carga del proyecto y en adelante, desde el botón de cambiar la ruta)
Código
  1. Private Sub LeerSiguientePregunta()
  2.    Dim sol As String
  3.  
  4.    If (Not EOF(Canal)) Then
  5.        On Error GoTo ProblemoGordo
  6.        With Pregunta
  7.            ' leer la pregunta del fichero.
  8.            Line Input #Canal, .Pregunta
  9.            Line Input #Canal, .RespuestaA
  10.            Line Input #Canal, .RespuestaB
  11.            Line Input #Canal, .RespuestaC
  12.            Line Input #Canal, .RespuestaD
  13.            Line Input #Canal, sol
  14.            .Solucion = Val(sol)
  15.  
  16.            ' pasar los datos a la interfaz.
  17.            LabPregunta.Caption = .Pregunta
  18.            OptRespuesta(0).Caption = "A)   " & .RespuestaA
  19.            OptRespuesta(1).Caption = "B)   " & .RespuestaB
  20.            OptRespuesta(2).Caption = "C)   " & .RespuestaC
  21.            OptRespuesta(3).Caption = "D)   " & .RespuestaD
  22.  
  23.            ' actualizar numero de pregunta e informar luego del numero.
  24.            NumPregunta = (NumPregunta + 1)
  25.            FraPreguntas.Caption = "Pregunta Nº: " & CStr(NumPregunta) & " de " & CStr(NumPreguntas)
  26.  
  27.            ' desactivar como respuesta la previa elegida.
  28.            OptRespuesta(Respuesta).Value = False
  29.            Respuesta = -1
  30.        End With
  31.  
  32.        ' Activar el boton de examinar: Se activa cuando se pulse en una respuesta.
  33.        Exit Sub
  34.  
  35. ProblemoGordo:
  36.        MsgBox "Ocurrio un problema al tratar de leer la siguiente pregunta del fichero..." & vbCrLf & Err.Description, vbCritical, "Ocurrio un error de lectura..."
  37.        Err.Clear
  38.    Else
  39.        MsgBox "El fichero no tiene mas preguntas... Carga otro si lo deseas...", vbInformation, "No hay mas preguntas en este fichero:"
  40.    End If
  41.  
  42.    Call Cerrar
  43. End Sub


Los botones examinar y leer  siguient epregunta, podrían ser tal que así:
Código
  1. Private Sub ComExaminar_Click()
  2.    ComExaminar.Enabled = False
  3.    Call ValidarRespuesta
  4.    ComSiguiente.Enabled = True
  5. End Sub
  6.  
  7. Private Sub ComSiguiente_Click()
  8.    ComSiguiente.Enabled = False
  9.    ShaRespuesta.Visible = False
  10.    ShaSolucion.Visible = False
  11.  
  12.    If (NumPregunta < NumPreguntas) Then
  13.        Call LeerSiguientePregunta
  14.    Else
  15.        Call PresentarResultados
  16.    End If
  17. End Sub


Validar la respuesta que da el usuario...
Código
  1. ' Mostrar resultado de la pregunta actual.
  2. Private Sub ValidarRespuesta()
  3.    Dim t As Long
  4.  
  5.    t = ((OptRespuesta(0).Height - ShaSolucion.Height) \ 2)
  6.    If (Respuesta = Pregunta.Solucion) Then
  7.        Aciertos = (Aciertos + 1)
  8.        LabAciertos.Caption = "Aciertos: " & CStr(Aciertos)
  9.        ShaRespuesta.BackColor = vbGreen
  10.        Nivel = ((Aciertos - 1) Mod 5)      ' 0-4 = nivel 0; 5-9 = nivel 1, etc...
  11.        LabNivel.Caption = "Nivel: " & CStr(Nivel)
  12.    Else
  13.        ShaRespuesta.BackColor = vbRed
  14.    End If
  15.  
  16.    ShaSolucion.Top = (OptRespuesta(Pregunta.Solucion).Top + t)
  17.    ShaSolucion.Visible = True
  18.    ShaRespuesta.Top = (OptRespuesta(Respuesta).Top + t)
  19.    ShaRespuesta.Visible = True
  20. End Sub



...y no sigo porque si no, te lo doy todo hecho...
Te falta comprobar/abrir/cargar el fichero.... responder a qué pasa cuando se pulsa en un control 'option'... y poco más.
Te pongo una imagen de como podría ser la interfaz...
(https://i.imgur.com/CFAZSpt.png)



https://docs.microsoft.com/es-es/dotnet/visual-basic/developing-apps/programming/drives-directories-files/walkthrough-manipulating-files-and-directories
https://docs.microsoft.com/es-es/dotnet/visual-basic/programming-guide/language-features/arrays/
https://docs.microsoft.com/es-es/visualstudio/ide/quickstart-visual-basic-console?view=vs-2019
https://docs.microsoft.com/es-es/dotnet/visual-basic/programming-guide/language-features/control-flow/loop-structures
https://docs.microsoft.com/es-es/dotnet/visual-basic/programming-guide/language-features/control-flow/decision-structures
https://docs.microsoft.com/es-es/dotnet/visual-basic/programming-guide/language-features/variables/variable-declaration
https://docs.microsoft.com/es-es/dotnet/visual-basic/programming-guide/language-features/declared-elements/scope
Este foro es el de VB6 y versones anteriores, el de NET está en más arriba... aunque a veces llegan aquí equivocadamente...


Título: Re: ayuda con juego
Publicado por: srWhiteSkull en 11 Abril 2019, 18:38 pm
Este foro es el de VB6 y versones anteriores, el de NET está en más arriba... aunque a veces llegan aquí equivocadamente...

El término es ambiguo porque también existe el VB Script o el VBA. En mi humilde opinión se debería cambiar el nombre a Visual Basic 6 para evitar la confusión o si se quiere abarcar todos los lenguajes basados en basic llamarlo Lenguajes BASIC.

Gracias por la aclaración.


Título: Re: ayuda con juego
Publicado por: Serapis en 11 Abril 2019, 19:04 pm
Por supuesto, es razonable que el nombre no es exacto...
...para alguien nuevo en el foro puede acceder equivocadamente, en cambio para los que ya llevan un tiempo en el foro, saber de la existencia del foro NET, descarta a éste para tal menester.

Pero vamos son los admins los que deben tomar tales decisiones.