bueno parece que buenas ideas no me faltan pero si nivel de programación
aparte de hacer una linea de tiempo para facilitar el estudio en el programa VisorRV1960
se me ocurre que hacer un juego a base de preguntas y respuestas con al menos 3 niveles
(seria una forma de aprender divirtiéndose)
para niños, nivel 3
para jovenes, nivel 2
para adultos, nivel 1
con sistema de puntos, veamos que sale.
en principio seria elegir el nivel
en base al nivel las preguntas que se harán y sus respuestas
tablas de mejor puntaje (ranking)
supongo que tendré que hacer una base de datos exclusiva para el juego, poniendo la pregunta y la respuesta correcta...
hay varios sistemas, uno seria hacer la pregunta y esperar un respuesta correcta sino seria un fallo y sin puntos
otra podría ser la pregunta y poner varias respuestas a elegir
que piensan ustedes?
editado:
o tal vez hacer categorías, tipo: niños, jóvenes, adultos y dentro de cada categoría niveles que puedan ir del 1 al 5 sigo esquematizando de como seria el funcionamiento.
editado2:
otra idea es poner tiempo limite en los niveles mas altos para darle emoción jajajaj
en el nivel 4 un minuto para responder y en el nivel 5 solo el tiempo para tipear la respuesta jajajaja.
editado3:
hay que crear una tabla con lista de nombres de los jugadores con un password de ingreso.....
editado4:
después de elegir jugador (si no existe el jugador hacer un sistema de ingreso con nombre y contraseña)
y la categoría empieza el juego, se comienza con nivel 1 haciendo 5 preguntas si responde bien pasa a nivel dos siendo las preguntas mas difíciles y mayor cantidad
pasando por ejemplo de 5 a 10 preguntas así sucesivamente.
si no responde las 5 preguntas termina el juego y se anota el puntaje del jugador en la categoría jugada.
la interfaz de comienzo (croquis)
editado5:
tal vez sea mejor ponerle a los nombres de categoria : muy facil, facil, normal, dificil, muy dificil, experto.
necesitaria tres grupos de tablas, una tabla para los registros de los usuarios(nombre y passwd)
otra tabla para los records, y grupos de tablas para cada categoria con sus niveles, algo asi:
nombres de tablas:
records
registros
muyfacil1,muyfacil2,muyfacil3 etc
normal1,normal2....etc
los números son el sub nivel dentro del nivel porque cada tabla puede tener hasta miles de preguntas.
en cada tabla de preguntas las celdas podrían ser estas
id numero pregunta respuesta
1 1 En que ciudad nació Jesús? Nazaret
2 2 Como se llama la madre de Jesús María
3 3 Nombres de Cristo Jesús;Hijo del Hombre;Nazareno;Jesucristo ( varias respuestas correctas ) string[]
cuando hay varias respuestas correctas, creamos el string[] con split y despues recorremos el String[] si la respuesta del usuario coincide con alguna de los items del string[] la respuesta es correcta.
tabla registro
id numero usuario contraseña
1 1 Marcelo euh08~~sd
2 2 Adriana adri55511a
tabla records
id nivel sub nivel nombre puntos
1 2 3 Marcelo 320
2 2 2 Adriana 245
editado 6:
cuando se perdería el juego?
si por ejemplo elegimos el nivel 1 habría 10 preguntas en el subnivel 1, 15 en el sub nivel 2 etc
en el primer subnivel 1 si el participante falla en la respuesta 3 veces pierde
y así con los demás pudiendo o no variar el numero de tolerancia a errores según nuestro parecer.
CREATE TABLE "usuarios" ( "idusuario" integer NOT NULL PRIMARY KEY autoincrement,
"usuario" varchar(32) NOT NULL,
"passwd" varchar(16) NOT NULL)
CREATE TABLE "ranking" ( "idranking" integer NOT NULL PRIMARY KEY autoincrement,
"nivel" integer NOT NULL,
"subnivel" integer NOT NULL,
"usuario" varchar(32) NOT NULL,
"puntos" integer NOT NULL
)
CREATE TABLE "muyfacil1" ( "idmf1" integer NOT NULL PRIMARY KEY autoincrement,
"numero" integer NOT NULL,
"pregunta" text NOT NULL,
"respuesta" text NOT NULL,
"formato" text
)
"usuario" varchar(32) NOT NULL,
"passwd" varchar(16) NOT NULL)
CREATE TABLE "ranking" ( "idranking" integer NOT NULL PRIMARY KEY autoincrement,
"nivel" integer NOT NULL,
"subnivel" integer NOT NULL,
"usuario" varchar(32) NOT NULL,
"puntos" integer NOT NULL
)
CREATE TABLE "muyfacil1" ( "idmf1" integer NOT NULL PRIMARY KEY autoincrement,
"numero" integer NOT NULL,
"pregunta" text NOT NULL,
"respuesta" text NOT NULL,
"formato" text
)
importante: en la columna "formato" daremos una explicación del formato de la respuesta pues algunas pueden ser complejas como dar varios nombres separados por comas o puntos y comas u otras formas complejas de dar la respuesta.
Editado 7:
después de tener mas o menos la interfaz gráfica esquematizada analizamos como continuaremos
primero sera hacer funcionar la conexion a la base de datos
Public Sub Form_Open()
Me.Center
ArmarTabla()
AbrirConexionJuego()
CargarUsuarios()
End
Public Sub ArmarTabla()
CViewPociones.Columns.Count = 5
CViewPociones.Columns[0].Title = "Posición"
CViewPociones.Columns[0].Alignment = 3
CViewPociones.Columns[1].Title = "Categoría"
CViewPociones.Columns[1].Width = 90
CViewPociones.Columns[1].Alignment = 3
CViewPociones.Columns[2].Title = "Nivel"
CViewPociones.Columns[2].Width = 60
CViewPociones.Columns[2].Alignment = 3
CViewPociones.Columns[3].Title = "Nombre Jugador"
CViewPociones.Columns[3].Width = 110
CViewPociones.Columns[3].Alignment = 3
CViewPociones.Columns[3].Expand = True
CViewPociones.Columns[4].Title = "Puntos"
CViewPociones.Columns[4].Width = 60
CViewPociones.Columns[4].Alignment = 3
End
Private Sub AbrirConexionJuego()
ConexionJuego = New Connection
ConexionJuego.Type = "sqlite3"
ConexionJuego.Host = FMain.DirBD
ConexionJuego.Name = "JuegoRV1960"
Try ConexionJuego.Open
If Error Then
Message.Error("El fichero elegido no es una base de datos sqlite")
Return
Else
Print "conexion con exito"
Endif
End
Private Sub CerrarConexionJuego()
If ConexionJuego = Null Then Return
ConexionJuego.Close()
ConexionJuego = Null
End
segundo hacer funcionar la tabla de usuarios:
a- cargar usuarios registrados en el combobox
b- sistema de ingreso de usuarios nuevos
c- sistema de autentificacion de usuarios
a
b
Public Sub btnIngresar_Click()
If txtUsuario.Text = "" Or If Len(txtUsuario.Text) < 3 Then
Message.Warning("Nombre de usuario debe tener al menos 3 caracteres!")
txtUsuario.SetFocus
Return
Endif
If txtpasswd.Text = "" Or If Len(txtpasswd.Text) < 5 Then
Message.Warning("Ingrese una contraseña con al menos 5 caracteres!")
txtpasswd.SetFocus
Return
Endif
If NombreExiste() = True Then
Message.Warning("Ya existe el usuario, elija otro nombre!")
txtUsuario.Clear
txtUsuario.SetFocus
Return
' Print "el nombre ya existe"
Else
Print "ingresar nombre"
RegistrarUsuario()
Juego.CargarUsuarios()
Endif
Me.Close
End
Private Sub RegistrarUsuario()
Dim resultado As Result
resultado = Juego.ConexionJuego.Exec("insert into usuarios (idusuario,usuario,passwd) values(&1,&2,&3)", Null, txtUsuario.Text, txtpasswd.Text)
End
Private Function NombreExiste() As Boolean
Dim resultado As Result
resultado = Juego.ConexionJuego.Exec("select usuario from 'usuarios'")
Do While resultado.Available
If Trim$(txtUsuario.Text) = resultado!usuario Then
Return True
Break
Endif
resultado.MoveNext
Loop
Return False
End
If txtUsuario.Text = "" Or If Len(txtUsuario.Text) < 3 Then
Message.Warning("Nombre de usuario debe tener al menos 3 caracteres!")
txtUsuario.SetFocus
Return
Endif
If txtpasswd.Text = "" Or If Len(txtpasswd.Text) < 5 Then
Message.Warning("Ingrese una contraseña con al menos 5 caracteres!")
txtpasswd.SetFocus
Return
Endif
If NombreExiste() = True Then
Message.Warning("Ya existe el usuario, elija otro nombre!")
txtUsuario.Clear
txtUsuario.SetFocus
Return
' Print "el nombre ya existe"
Else
Print "ingresar nombre"
RegistrarUsuario()
Juego.CargarUsuarios()
Endif
Me.Close
End
Private Sub RegistrarUsuario()
Dim resultado As Result
resultado = Juego.ConexionJuego.Exec("insert into usuarios (idusuario,usuario,passwd) values(&1,&2,&3)", Null, txtUsuario.Text, txtpasswd.Text)
End
Private Function NombreExiste() As Boolean
Dim resultado As Result
resultado = Juego.ConexionJuego.Exec("select usuario from 'usuarios'")
Do While resultado.Available
If Trim$(txtUsuario.Text) = resultado!usuario Then
Return True
Break
Endif
resultado.MoveNext
Loop
Return False
End
c
Private Sub Autentificacion(nombre As String)
Dim resultado As Result
Dim passX As String
Dim usuarioX As String
resultado = ConexionJuego.Exec("select * from 'usuarios'")
Do While resultado.Available
If resultado!usuario = nombre Then
usuarioX = nombre
Print "contraseña de " & nombre & "=" & resultado!passwd
Print "contraseña tipeada=" & txtpasswd.Text
If txtpasswd.Text = resultado!passwd Then
identificacion = True
Break
Else
identificacion = False
Break
Endif
Else
identificacion = False
Endif
resultado.MoveNext
Loop
End
Public Sub btnComenzar_Click()
If Jugando = False Then
If cbxUsuarios.Index = 0 Then
btnComenzar.Text = "Terminar"
Jugando = True
Else
If txtpasswd.Text = "" Then
Message.Error("Ingrese contraseña por favor")
txtpasswd.SetFocus
Return
Endif
Autentificacion(Trim$(cbxUsuarios.Text))
If identificacion = False Then
Message.Error("Contraseña incorrecta, preste atención!")
txtpasswd.Clear
txtpasswd.SetFocus
Return
Endif
txtpasswd.Clear
txtRespuesta.Clear
btnComenzar.Text = "Terminar"
Jugando = True
txtLJugador.Text = cbxUsuarios.Text
MostrarPregunta()
txtRespuesta.SetFocus
Endif
Else
btnComenzar.Text = "Jugar"
txtLJugador.Text = "Invitado"
Jugando = False
Endif
End
Dim resultado As Result
Dim passX As String
Dim usuarioX As String
resultado = ConexionJuego.Exec("select * from 'usuarios'")
Do While resultado.Available
If resultado!usuario = nombre Then
usuarioX = nombre
Print "contraseña de " & nombre & "=" & resultado!passwd
Print "contraseña tipeada=" & txtpasswd.Text
If txtpasswd.Text = resultado!passwd Then
identificacion = True
Break
Else
identificacion = False
Break
Endif
Else
identificacion = False
Endif
resultado.MoveNext
Loop
End
Public Sub btnComenzar_Click()
If Jugando = False Then
If cbxUsuarios.Index = 0 Then
btnComenzar.Text = "Terminar"
Jugando = True
Else
If txtpasswd.Text = "" Then
Message.Error("Ingrese contraseña por favor")
txtpasswd.SetFocus
Return
Endif
Autentificacion(Trim$(cbxUsuarios.Text))
If identificacion = False Then
Message.Error("Contraseña incorrecta, preste atención!")
txtpasswd.Clear
txtpasswd.SetFocus
Return
Endif
txtpasswd.Clear
txtRespuesta.Clear
btnComenzar.Text = "Terminar"
Jugando = True
txtLJugador.Text = cbxUsuarios.Text
MostrarPregunta()
txtRespuesta.SetFocus
Endif
Else
btnComenzar.Text = "Jugar"
txtLJugador.Text = "Invitado"
Jugando = False
Endif
End
tercero sera hacer las consultas sql, para hacer un ramdon a la tabla del nivel elegido o en progreso y así mostrar la pregunta
datos que necesito para hacer una pregunta:
1-que categoría eligió el usuario para saber en que tabla buscar (en los radiobutton ya puse en el evento clic así Categoria="normal" o Categoria="dificil" etc)
2-el nivel dentro de la categoria que empezara en uno y a medida que el usuario pase de nivel se incrementara en uno
3-el numero máximo de preguntas que contiene la tabla (este es el numero que usare con ramdon)
Private Sub MostrarPregunta()
Dim resultado, resultado2, resultado3 As Result
Dim MaxNum As Integer = 1
Dim elegida As Integer
resultado = ConexionJuego.Exec("SELECT numero FROM '" & categoria & Nivel & "'")
Do While resultado.Available
If resultado!numero > MaxNum Then
MaxNum = resultado!numero
Endif
resultado.MoveNext
Loop
Randomize
elegida = Rand(1, MaxNum)
resultado2 = ConexionJuego.Exec("SELECT * FROM '" & categoria & Nivel & "' where numero=" & elegida)
Do While resultado2.Available
Pregunta = resultado2!pregunta
Respuesta = resultado2!respuesta
resultado2.MoveNext
Loop
txtLPregunta.Text = Pregunta
End
Public Sub btnResponder_Click()
If Trim$(txtRespuesta.Text) = Respuesta Then
Print "acertaste"
txtRespuesta.Clear
txtRespuesta.SetFocus
LCDLPuntos.Text += INCREMENTA5
MostrarPregunta()
Else
Print "No es la respuesta"
Dec Vidas
Endif
End
Dim resultado, resultado2, resultado3 As Result
Dim MaxNum As Integer = 1
Dim elegida As Integer
resultado = ConexionJuego.Exec("SELECT numero FROM '" & categoria & Nivel & "'")
Do While resultado.Available
If resultado!numero > MaxNum Then
MaxNum = resultado!numero
Endif
resultado.MoveNext
Loop
Randomize
elegida = Rand(1, MaxNum)
resultado2 = ConexionJuego.Exec("SELECT * FROM '" & categoria & Nivel & "' where numero=" & elegida)
Do While resultado2.Available
Pregunta = resultado2!pregunta
Respuesta = resultado2!respuesta
resultado2.MoveNext
Loop
txtLPregunta.Text = Pregunta
End
Public Sub btnResponder_Click()
If Trim$(txtRespuesta.Text) = Respuesta Then
Print "acertaste"
txtRespuesta.Clear
txtRespuesta.SetFocus
LCDLPuntos.Text += INCREMENTA5
MostrarPregunta()
Else
Print "No es la respuesta"
Dec Vidas
Endif
End
cuarto: al finalizar el juego por errores o por llegar al máximo nivel sin perder jajajaj
hacer funcionar la tabla de ranking ya que tenemos los datos para ingresarlos, usuario, categoría, nivel , nombre, puntos.
Editado 8:
siguen las preguntas:
como plantear preguntas fáciles y difíciles, como agruparlas o catalogarlas?
formas de añadir dificultades a las respuestas ? tiempo, varias respuestas, que mas podría ser?
como hacer que el juego sea divertido y atractivo? tal vez sonidos, efectos visuales ,equilibrio en colores, que mas podría ser?
se escuchan todas las sugerencias
Editado 9:
imaginemos que la gente usa el juego, crea muchos usuarios con contraseñas, tambien la tabla rankins esta llena de anotaciones.....y viene una nueva version del programa, que remplaza todas las tablas de la version anterior....
se borrarian los usuarios creados y las anotaciones, algo que no sera agradable al usuario
entonces bien como resolvemos esto
se me ocurre hacer una nueva base de datos solo con las tablas usuarios y ranking separadas de las tablas de las preguntas. (actualizando solo la tabla de los versículos y la de preguntas.)
que solo se actualizarían si hay modificaciones sustanciales en la tabla....ufa cuando crees que resolves un problema inmediatamente se plantea otro
esto de programar no es nada fácil.....
sigo en las aventuras de programar y resolver planteos de programación.
mas adelante cuando el juego funcione bien y la base de preguntas tenga mas contenido, encriptare las contraseñas de usuarios con md5 asi nadie podra usar una identidad que no le corresponde aun explorando la base de datos sql, con algun programa como infodatabaseSql ajjajajajaj