Ir para o conteúdo
pDrSnC

PAP - Quem quer ser Rico VB6

Mensagens Recomendadas

pDrSnC

Boas a todos ;)

Eu tou a fazer o Quem quer ser Rico do android para Projecto da minha PAP de

final de curso.

Estou com algumas dificuldades e agradecia alguma ajuda. Eu tambem nao sou

grande pro disto.

Isto é o que tenho por agora (com ajuda do professor).

Private Sub Form_Load()
Randomize
End Sub
Private Sub Jogar_Click()
Jogar.Visible = False
Bloquear.Visible = True
Resposta(1).Caption = ""
Resposta(2).Caption = ""
Resposta(3).Caption = ""
Resposta(4).Caption = ""
sortear_pergunta (1)
End Sub

Private Sub Bloquear_Click()
If respostadada = respostacerta Then
For i = 1 To 4
If Resposta(i).Caption = respostacerta Then Resposta(i).BackColor = &HFF00&
Next i
MsgBox ("Resposta Certa!")
'verde &H0000FF00&

Else
For i = 1 To 4
If Resposta(i).Caption <> respostacerta Then Resposta(i).BackColor = &HFF&
If Resposta(i).Caption = respostacerta Then
    Resposta(i).BackStyle = 1
    Resposta(i).BackColor = &HFF00&
End If
Next i
MsgBox ("Resposta errada, Fim do jogo.")
End If
End Sub

Private Sub Resposta_Click(Index As Integer)
x = Resposta(Index).BackStyle
For i = 1 To 4
Resposta(i).BackStyle = 0
Next i
Resposta(Index).BackStyle = 1 - x
If Resposta(Index).BackStyle = 1 Then
respostadada = Resposta(Index).Caption
Else
respostadada = ""
End If
End Sub

O que eu queria fazer é basicamente igual ao quem quer ser milionario.

Eu tenho as perguntas e respostas numa base de dados onde tao organizadas por niveis (dificuldade)

As primeiras 5 perguntas sao do nivel 1, as proximas 5 nivel 2 e as ultimas 5 nivel 3.

As perguntas e respostas tenho numa base de dados onde a resposta certa é sempre no mesmo campo.

Quem me puder ajudar, ;)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
anolsi

Boas,

Tu não colocas-te nenhuma dúvida, simplesmente disseste o que querias fazer. Assim é difícil alguém puder ajudar-te, porque ninguém está aqui para fazer os trabalhos dos outros...


"Nós somos o que fazemos repetidamente, a excelência não é um feito, e sim, um hábito."
Não respondo a questões por PM que possam ser colocadas no fórum!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pDrSnC

Tens razao, peco desculpa.

Private Sub sortear_pergunta(nível As Integer)
'npdn = numero pergunta de nivel
npdn = 0
BaseDados.Recordset.MoveFirst
While BaseDados.Recordset.EOF = False
If nível = Val(bd_nivel.Caption) Then npdn = npdn + 1
BaseDados.Recordset.MoveNext
Wend
'ps = pergunta sorteada
ps = Int(npdn * Rnd + 1)
npe = 0
BaseDados.Recordset.MoveFirst
While npe <> ps
If nível = Val(bd_nivel.Caption) Then npe = npe + 1
If npe <> ps Then BaseDados.Recordset.MoveNext
Wend
nrespostacerta = Int(4 * Rnd + 1)
Do
ng1 = Int(4 * Rnd + 1)
ng2 = Int(4 * Rnd + 1)
ng3 = Int(4 * Rnd + 1)
ng4 = Int(4 * Rnd + 1)
Loop Until ng1 <> ng2 And ng1 <> ng3 And ng1 <> ng4 And ng2 <> ng3 And ng2 <> ng4 And ng3 <> ng4
Pergunta.Caption = bd_pergunta
respostacerta = bd_r1.Caption
Resposta(ng1).Caption = bd_r1
Resposta(ng2).Caption = bd_r2
Resposta(ng3).Caption = bd_r3
Resposta(ng4).Caption = bd_r4
End Sub

Eu tenho este codigo e eu queria que as primeiras 5 perguntas fossem de nivel 1, as proximas 5 nivel 2 e a ultimas 5 nivel 3.

Eu tenho as pergunta na base de dados por niveis (1 , 2 e 3 ).

Eu nao sei como fazer..

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
acao

boas

penso que com um simples «select case» resolve o provlema.

exemplo

Dim vNum As Integer
Private Sub Command1_Click()
vNum = vNum + 1
Select Case vNum
Case 1 To 5
	MsgBox ("cod para as primeiras 5 perguntas, ou o nível «1»" & vbCrLf & _
	"pergunta n.º " & vNum)
Case 6 To 10
	MsgBox ("cod para as perguntas 6 a 10, ou o nível «2»" & vbCrLf & _
	"pergunta n.º " & vNum)
Case 11 To 15
	MsgBox ("cod para as perguntas 11 a 15, ou o nível «3»" & vbCrLf & _
	"pergunta n.º " & vNum)
End Select
End Sub

cumps

acao

Editado por acao

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pDrSnC

Acao agradeco a tua ajuda desde ja.

Dim respostacerta, respostadada, ng1, ng2, ng3, ng4 As String

Private Sub sortear_pergunta(nível As Integer)
'npdn = numero pergunta de nivel
npdn = 0
BaseDados.Recordset.MoveFirst
While BaseDados.Recordset.EOF = False
If nível = Val(bd_nivel.Caption) Then npdn = npdn + 1
BaseDados.Recordset.MoveNext
Wend
'ps = pergunta sorteada
ps = Int(npdn * Rnd + 1)
npe = 0
BaseDados.Recordset.MoveFirst
While npe <> ps
If nível = Val(bd_nivel.Caption) Then npe = npe + 1
If npe <> ps Then BaseDados.Recordset.MoveNext
Wend
nrespostacerta = Int(4 * Rnd + 1)
Do
ng1 = Int(4 * Rnd + 1)
ng2 = Int(4 * Rnd + 1)
ng3 = Int(4 * Rnd + 1)
ng4 = Int(4 * Rnd + 1)
Loop Until ng1 <> ng2 And ng1 <> ng3 And ng1 <> ng4 And ng2 <> ng3 And ng2 <> ng4 And ng3 <> ng4
Pergunta.Caption = bd_pergunta
respostacerta = bd_r1.Caption
Resposta(ng1).Caption = bd_r1
Resposta(ng2).Caption = bd_r2
Resposta(ng3).Caption = bd_r3
Resposta(ng4).Caption = bd_r4
End Sub

Private Sub Form_Load()
Randomize
End Sub

Private Sub Jogar_Click()
Jogar.Visible = False
Bloquear.Visible = True
Resposta(1).Caption = ""
Resposta(2).Caption = ""
Resposta(3).Caption = ""
Resposta(4).Caption = ""
sortear_pergunta (1)
' o sortear_pergunta tá a 1. sempre que acertar as 5 perguntas tem de aumentar um, para subir um nivel

End Sub


Private Sub Bloquear_Click()
If respostadada = respostacerta Then
For i = 1 To 4
If Resposta(i).Caption = respostacerta Then Resposta(i).BackColor = &HFF00&
Next i
MsgBox ("Resposta Certa!")
'verde &H0000FF00&

Else
For i = 1 To 4
If Resposta(i).Caption <> respostacerta Then Resposta(i).BackColor = &HFF&
If Resposta(i).Caption = respostacerta Then
Resposta(i).BackStyle = 1
Resposta(i).BackColor = &HFF00&
End If
Next i
MsgBox ("Resposta errada, Fim do jogo.")
End If
End Sub


Private Sub Resposta_Click(Index As Integer)
x = Resposta(Index).BackStyle
For i = 1 To 4
Resposta(i).BackStyle = 0
Next i
Resposta(Index).BackStyle = 1 - x
If Resposta(Index).BackStyle = 1 Then
respostadada = Resposta(Index).Caption
Else
respostadada = ""
End If
End Sub

Este é todo o codigo que tenho.

A private sub sortear pergunta ja faz isso da pergunta por nivel.

Eu agora tenho de criar uma variavel que sempre que acerte uma pergunta aumenta 1 (ex: perguntacertada = perguntaacertada+1 ) e quando for 6 passa para perguntas de nivel 2 ate á 10 depois nivel 3 ate á 15.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
acao

A private sub sortear pergunta ja faz isso da pergunta por nivel.

Eu agora tenho de criar uma variavel que sempre que acerte uma pergunta aumenta 1 (ex: perguntacertada = perguntaacertada+1 ) e quando for 6 passa para perguntas de nivel 2 ate á 10 depois nivel 3 ate á 15.

boas

não é isso que faz o cod que coloquei?

a variável vNum faz a contagem das perguntas e de 1a5 faz cod num local de 6a10 faz noutro de 11a15 faz noutro, é so colocar o código que quer que faça no local certo, se errou coloca a variável com valor «0» e sai do sub «exit Sub».

edit:

Private Sub Jogar_Click()
Jogar.Visible = False
Bloquear.Visible = True
Resposta(1).Caption = ""
Resposta(2).Caption = ""
Resposta(3).Caption = ""
Resposta(4).Caption = ""

' o sortear_pergunta tá a 1. sempre que acertar as 5 perguntas tem de aumentar um, para subir um nível
vNum = vNum + 1
Select Case vNum
	Case 1 To 5
			sortear_pergunta (1)
	Case 6 To 10
			Msortear_pergunta (2)
	Case 11 To 15
			Msortear_pergunta (3)
End Select
End Sub

declare a variável vNum no inicio do form para ser inicia quando abre o form e não quando clica no botão.

Dim vNum As Integer

confirme se é isto.

cumps

acao

Editado por acao

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
vikcch

Olá,

só umas dicas:

no inicio de cada modulo/form digita:

Option Explicit

isto faz com que todas as variaveis do teu From/modulo tenham de ser declaradas, reparei que tens muitas que não são declaradas.

Dim respostacerta, respostadada, ng1, ng2, ng3, ng4 As String

Apenas a variavel ng4 está sendo declarada como string, todas as outras estão sendo declaradas como variant

Para declarar todas com string seria:

Dim respostacerta As String, respostadada As String, ng1 As String, ng2 As String, ng3 As String, ng4 As String

Se tens ng1, ng2, ng3, ng4 todas string, podes usar um array tal como fizeste para o objecto resposta

Dim ng(1 To 4) As String

O objecto resposta não dá para saber se é um CommandButton, Label etc..

Podes sempre por uma abreviatura antes do seu nome.

ex: cmdResposta, lblResposta

Como tens os objectos em array podes sempre usar um ciclo para os correr todos.

    Dim i As Integer
   For i = 1 To 4
       Resposta(i).Caption = ""
   Next    'i

Em vez de usares &HFF00& e &HFF& podes usar vbGreen e vbRed, tens a lista de cores se fizeres ColorConstants., irá aparecer a lista como num objecto

Indenta o teu code, isto é muito impostante para uma boa "leitura" do code, podes e deves fazê-lo à mão, mas também existe um add-in para isso, quando por exemplo te enganas e não tens de indentar tudo outra vez. eu uso o Smart Indent

Cumprimentos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
acao

Olá,

só umas dicas:

Dim respostacerta, respostadada, ng1, ng2, ng3, ng4 As String

Apenas a variavel ng4 está sendo declarada como string, todas as outras estão sendo declaradas como variant

Para declarar todas com string seria:

Dim respostacerta As String, respostadada As String, ng1 As String, ng2 As String, ng3 As String, ng4 As String

boas

veja este link e depois diga alguma coisa.

http://msdn.microsoft.com/pt-br/library/ke6sh835(v=vs.90).aspx

cumps

acao

Editado por acao

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
vikcch

Boas, isso do link é em vb.net

em vb6, que é a questão aqui, as primeiras variaveis seriam declaradas com variant.

vê o ex:

Option Explicit

Private Sub Teste(ByRef iVar As Integer)
iVar = 15
End Sub

Private Sub Command1_Click()
   Dim vVar, i As Integer
   Call Teste(vVar)
   MsgBox vVar
End Sub

agora vê com a vVar como integer:

Option Explicit

Private Sub Teste(ByRef iVar As Integer)
iVar = 15
End Sub

Private Sub Command1_Click()
   Dim vVar As Integer, i As Integer
   Call Teste(vVar)
   MsgBox vVar
End Sub

Cumprimentos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.