ayuda con juego

Iniciado por rubenju, 11 Abril 2019, 02:15 AM

0 Miembros y 1 Visitante están viendo este tema.

rubenju

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

srWhiteSkull

 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

Serapis

#2
¿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 (vb) [Seleccionar]

private type PreguntaRespuestas
    Pregunta        as string
    RespuestaA    as string
    RespuestaB    as string
    RespuestaC    as string
    RespuestaD    as string
    Solucion         as byte
end type

' y las declaraciones de variables (algunas son redundantes pero ayudan a un novato a entender mejor...


Private NumPreguntas    As Integer                  ' Numero total de preguntas que tiene el fichero.
Private NumPregunta     As Integer                  ' n de pregunta.
Private Nivel           As Byte                     ' Nivel actual
Private Pregunta        As PreguntaRespuestas       ' Datos d ela pregunta
Private Respuesta       As Integer                  ' respuesta que da el usuario
Private Aciertos        As Integer                  ' Cantidad de aciertos hasta el momento
Private Ruta            As String                   ' la ruta donde s elocaliza el fichero
Private Canal           As Integer                  ' Canal de lectura/escritura del fichero


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 (vb) [Seleccionar]

Private Sub LeerSiguientePregunta()
    Dim sol As String
   
    If (Not EOF(Canal)) Then
        On Error GoTo ProblemoGordo
        With Pregunta
            ' leer la pregunta del fichero.
            Line Input #Canal, .Pregunta
            Line Input #Canal, .RespuestaA
            Line Input #Canal, .RespuestaB
            Line Input #Canal, .RespuestaC
            Line Input #Canal, .RespuestaD
            Line Input #Canal, sol
            .Solucion = Val(sol)
           
            ' pasar los datos a la interfaz.
            LabPregunta.Caption = .Pregunta
            OptRespuesta(0).Caption = "A)   " & .RespuestaA
            OptRespuesta(1).Caption = "B)   " & .RespuestaB
            OptRespuesta(2).Caption = "C)   " & .RespuestaC
            OptRespuesta(3).Caption = "D)   " & .RespuestaD
           
            ' actualizar numero de pregunta e informar luego del numero.
            NumPregunta = (NumPregunta + 1)
            FraPreguntas.Caption = "Pregunta Nº: " & CStr(NumPregunta) & " de " & CStr(NumPreguntas)
           
            ' desactivar como respuesta la previa elegida.
            OptRespuesta(Respuesta).Value = False
            Respuesta = -1
        End With
       
        ' Activar el boton de examinar: Se activa cuando se pulse en una respuesta.
        Exit Sub
       
ProblemoGordo:
        MsgBox "Ocurrio un problema al tratar de leer la siguiente pregunta del fichero..." & vbCrLf & Err.Description, vbCritical, "Ocurrio un error de lectura..."
        Err.Clear
    Else
        MsgBox "El fichero no tiene mas preguntas... Carga otro si lo deseas...", vbInformation, "No hay mas preguntas en este fichero:"
    End If
   
    Call Cerrar
End Sub



Los botones examinar y leer  siguient epregunta, podrían ser tal que así:
Código (vb) [Seleccionar]

Private Sub ComExaminar_Click()
    ComExaminar.Enabled = False
    Call ValidarRespuesta
    ComSiguiente.Enabled = True
End Sub

Private Sub ComSiguiente_Click()
    ComSiguiente.Enabled = False
    ShaRespuesta.Visible = False
    ShaSolucion.Visible = False
   
    If (NumPregunta < NumPreguntas) Then
        Call LeerSiguientePregunta
    Else
        Call PresentarResultados
    End If
End Sub



Validar la respuesta que da el usuario...
Código (vb) [Seleccionar]

' Mostrar resultado de la pregunta actual.
Private Sub ValidarRespuesta()
    Dim t As Long
   
    t = ((OptRespuesta(0).Height - ShaSolucion.Height) \ 2)
    If (Respuesta = Pregunta.Solucion) Then
        Aciertos = (Aciertos + 1)
        LabAciertos.Caption = "Aciertos: " & CStr(Aciertos)
        ShaRespuesta.BackColor = vbGreen
        Nivel = ((Aciertos - 1) Mod 5)      ' 0-4 = nivel 0; 5-9 = nivel 1, etc...
        LabNivel.Caption = "Nivel: " & CStr(Nivel)
    Else
        ShaRespuesta.BackColor = vbRed
    End If
   
    ShaSolucion.Top = (OptRespuesta(Pregunta.Solucion).Top + t)
    ShaSolucion.Visible = True
    ShaRespuesta.Top = (OptRespuesta(Respuesta).Top + t)
    ShaRespuesta.Visible = True
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...





Cita de: srWhiteSkull en 11 Abril 2019, 04:07 AM
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...

srWhiteSkull

Cita de: NEBIRE en 11 Abril 2019, 18:08 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.

Serapis

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.