Ir para conteúdo
Fórum Script Brasil
  • 0

Ordenação De Valores


Guest Darknnez

Pergunta

Guest Darknnez

Opa, e aí galera?

O negócio é seguinte:

Estou com uma grande dúvida mais especificamente em lógica de programação e não nescessariamente na linguagem Visual Basic.

Partindo do princípio, o que eu pretendo é construir um jogo do estilo manager, para colocar em prática o meu aprendizado em VB6, nada muito sério.

Mas bati de frente com um problema.

Não consigo ordenar valores.

Por exemplo:

No "jogo" teria um form com aproximadamente 20 Labels.

Cada Label.Caption retornaria um valor diferente definido por variáveis.

Vou tentar ser mais específico.

Seria um jogo manager de F1.

Para gerar a corrida, eu teria que definir qual piloto chegou em qual posição.

As posições são representadas por cada um dos Labels.

Então.... como eu faria?

Por que a única maneira com que eu sei trabalhar, seria a seguinte:

(suponham que são apenas 4 Labels e 4 variáveis, para não dar muito trabalho)

Dim a As Integer

Dim b As Integer

Dim c As Integer

Dim d As Integer

Private Sub Command1_Click()

Randomize

a = Int(20 * Rnd) + 1

b = Int(15 * Rnd) + 1

c = Int(10 * Rnd) + 1

d = Int(5 * Rnd) + 1

If (a > B) And (a > c) And (a > d) And (b >c) And (b > d) And (c > d) Then

lbl1.Caption = "valor1"

lbl2.Caption = "valor2"

lbl3.Caption = "valor3"

lbl4.Caption = "valor4"

Endif

E assim vai...

End Sub

Mas agora, imaginem se eu tivesse que fazer isso para cada uma das 20 variáveis que seriam necessárias (lembrando que no exemplo acima eu só usei 4 para facilitar).

Daria um trabalho imenso, certo?

Portanto, eu gostaria de saber se alguém poderia me ensinar aplicar algum algoritmo de ordenação no programa.

Mas que por favor, seja bastante específico de como aplicar, para que eu possa entender.

Espero que possam me ajudar.

Obrigado.

Darknnez

Link para o comentário
Compartilhar em outros sites

  • Respostas 299
  • Created
  • Última resposta

Top Posters For This Question

Top Posters For This Question

Posted Images

Posts Recomendados

  • 0

Eu arrumei o problema do If no pneu sim, mas deve ser por esse motivo que você falou mesmo, vou tentar corrigir aqui.

Esse

c = nMotor(j) - 0

parece que não faz muito sentido mesmo.

Acho que só ta aí por que no início eu ia fazer - 1, e quando eu lembrei que os números dos motores variam do 0 ao 7, coloquei - 0.

Valeu!

Link para o comentário
Compartilhar em outros sites

  • 0

Eu fiz o que você indicou, só que agora a Ferrari, como já começa com o melhor motor, na temporada seguinte, aparece sem motor nenhum.

Ficou assim:

Randomize
    
    For j = 0 To UBound(xEquipe)
        h(j) = Int(1 * Rnd) + 1
    Next
    
    For j = 0 To UBound(xEquipe)
        If xEquipe(j).nome = xJogador.equipe Then
            h(j) = 0
        ElseIf xEquipe(j).nome <> xJogador.equipe Then
            b = 7 - nMotor(j)
            c = nMotor(j) - 0
            If (nMotor(j) + 1) > 7 Then
                xEquipe(j).Motor = xMotor(7).nome
                xEquipe(j).finanças = xEquipe(j).finanças - xMotor(7).custo
                nMotor(j) = 7
            ElseIf (nMotor(j) + b) = nMotor(j) Then
                xEquipe(j).Motor = xMotor(7).nome
                xEquipe(j).finanças = xEquipe(j).finanças - xMotor(7).custo
                nMotor(j) = 7
            ElseIf (nMotor(j) - c) = nMotor(j) Then
                xEquipe(j).Motor = xMotor(0).nome
                xEquipe(j).finanças = xEquipe(j).finanças - xMotor(0).custo
                nMotor(j) = 0
            ElseIf (nMotor(j) - 1) < 0 Then
                xEquipe(j).Motor = xMotor(0).nome
                xEquipe(j).finanças = xEquipe(j).finanças - xMotor(0).custo
                nMotor(j) = 0
            End If
                If h(j) = 1 Then
                    If xEquipe(j).finanças > xMotor(nMotor(j)).custo Then
                        a = Int(b * Rnd) + 1
                        If xEquipe(j).finanças > xMotor(nMotor(j) + a).custo Then
                            xEquipe(j).Motor = xMotor(nMotor(j) + a).nome
                            xEquipe(j).finanças = xEquipe(j).finanças - xMotor(nMotor(j) + a).custo
                            nMotor(j) = nMotor(j) + a
                        Else
                            xEquipe(j).Motor = xMotor(nMotor(j)).nome
                            xEquipe(j).finanças = xEquipe(j).finanças - xMotor(nMotor(j)).custo
                            nMotor(j) = nMotor(j)
                        End If
                    ElseIf xEquipe(j).finanças < xMotor(nMotor(j)).custo Then
                        If xEquipe(j).finanças > xMotor(nMotor(j) - 1).custo Then
                            xEquipe(j).Motor = xMotor(nMotor(j) - 1).nome
                            xEquipe(j).finanças = xEquipe(j).finanças - xMotor(nMotor(j) - 1).custo
                            nMotor(j) = nMotor(j) - 1
                        Else
                            If (nMotor(j) - 2) < 0 Then
                                h(j) = 0
                            ElseIf xEquipe(j).finanças > xMotor(nMotor(j) - 2).custo Then
                                xEquipe(j).Motor = xMotor(nMotor(j) - 2).nome
                                xEquipe(j).finanças = xEquipe(j).finanças - xMotor(nMotor(j) - 2).custo
                                nMotor(j) = nMotor(j) - 2
                            Else
                                If (nMotor(j) - 3) < 0 Then
                                    h(j) = 0
                                ElseIf xEquipe(j).finanças > xMotor(nMotor(j) - 3).custo Then
                                    xEquipe(j).Motor = xMotor(nMotor(j) - 3).nome
                                    xEquipe(j).finanças = xEquipe(j).finanças - xMotor(nMotor(j) - 3).custo
                                    nMotor(j) = nMotor(j) - 3
                                Else
                                    If (nMotor(j) - 4) < 0 Then
                                        h(j) = 0
                                    ElseIf xEquipe(j).finanças > xMotor(nMotor(j) - 4).custo Then
                                        xEquipe(j).Motor = xMotor(nMotor(j) - 4).nome
                                        xEquipe(j).finanças = xEquipe(j).finanças - xMotor(nMotor(j) - 4).custo
                                        nMotor(j) = nMotor(j) - 4
                                    Else
                                        If (nMotor(j) - 5) < 0 Then
                                            h(j) = 0
                                        ElseIf xEquipe(j).finanças > xMotor(nMotor(j) - 5).custo Then
                                            xEquipe(j).Motor = xMotor(nMotor(j) - 5).nome
                                            xEquipe(j).finanças = xEquipe(j).finanças - xMotor(nMotor(j) - 5).custo
                                            nMotor(j) = nMotor(j) - 5
                                        Else
                                            If (nMotor(j) - 6) < 0 Then
                                                h(j) = 0
                                            ElseIf xEquipe(j).finanças > xMotor(nMotor(j) - 6).custo Then
                                                xEquipe(j).Motor = xMotor(nMotor(j) - 6).nome
                                                xEquipe(j).finanças = xEquipe(j).finanças - xMotor(nMotor(j) - 6).custo
                                                nMotor(j) = nMotor(j) - 6
                                            Else
                                                xEquipe(j).Motor = xMotor(0).nome
                                                    xEquipe(j).finanças = xEquipe(j).finanças - xMotor(0).custo
                                                    nMotor(j) = 0
                                            End If
                                        End If
                                    End If
                                End If
                            End If
                        End If
                    End If
                ElseIf h(j) = 2 Then
                    xEquipe(j).Motor = xMotor(0).nome
                    xEquipe(j).finanças = xEquipe(j).finanças - xMotor(0).custo
                    nMotor(j) = 0
                ElseIf h(j) = 3 Then
                    xEquipe(j).Motor = xMotor(7).nome
                    xEquipe(j).finanças = xEquipe(j).finanças - xMotor(7).custo
                    nMotor(j) = 7
                End If
        End If
    Next

EDIT:

Fazendo alguns testes aí agora, a McLaren, comprou o motor Ferrari, mas mesmo tendo muito dinheiro, mais do que o necessário, comprou o pior pneu e o pior combustível.

Link para o comentário
Compartilhar em outros sites

  • 0

aqui:

If (nMotor(j) + 1) > 7 Then
                xEquipe(j).Motor = xMotor(7).nome
                xEquipe(j).finanças = xEquipe(j).finanças - xMotor(7).custo
                nMotor(j) = 7[/code] em vez de já trocar o motor, ponha o h = 3, assim ele vai la pra baixo e compra o melhor. alias, nas linhas debaixo:
[code]ElseIf (nMotor(j) + b) = nMotor(j) Then
                xEquipe(j).Motor = xMotor(7).nome
                xEquipe(j).finanças = xEquipe(j).finanças - xMotor(7).custo
                nMotor(j) = 7
            ElseIf (nMotor(j) - c) = nMotor(j) Then
                xEquipe(j).Motor = xMotor(0).nome
                xEquipe(j).finanças = xEquipe(j).finanças - xMotor(0).custo
                nMotor(j) = 0
            ElseIf (nMotor(j) - 1) < 0 Then
                xEquipe(j).Motor = xMotor(0).nome
                xEquipe(j).finanças = xEquipe(j).finanças - xMotor(0).custo
                nMotor(j) = 0
            End If

você já ta comprando o motor. mas ai ele vai passar embaixo onde ele checa o h e, dependendo, vai comprar de novo. então, ai ou você zera o h depois de comprar, ou você apaga o codigo q compra e passa algum valor pro h pra comprar la embaxo.

Link para o comentário
Compartilhar em outros sites

  • 0

siga pelas cores dos Ifs:

Randomize

For j = 0 To UBound(xEquipe)

h(j) = Int(1 * Rnd) + 1

Next

For j = 0 To UBound(xEquipe)

If xEquipe(j).nome = xJogador.equipe Then

h(j) = 0

ElseIf xEquipe(j).nome <> xJogador.equipe Then

b = 7 - nMotor(j)

c = nMotor(j) - 0

If (nMotor(j) + 1) > 7 Then 'O If verde, abre aqui, antes de testar o h. é um If diferente

xEquipe(j).Motor = xMotor(7).nome 'Aqui sim você tem q por h=2 ou h=3 ou o q você precisar na sua logica, pois é so la embaixo q ele testa o h

xEquipe(j).finanças = xEquipe(j).finanças - xMotor(7).custo

nMotor(j) = 7

ElseIf (nMotor(j) + B) = nMotor(j) Then

xEquipe(j).Motor = xMotor(7).nome

xEquipe(j).finanças = xEquipe(j).finanças - xMotor(7).custo

nMotor(j) = 7

ElseIf (nMotor(j) - c) = nMotor(j) Then

xEquipe(j).Motor = xMotor(0).nome

xEquipe(j).finanças = xEquipe(j).finanças - xMotor(0).custo

nMotor(j) = 0

ElseIf (nMotor(j) - 1) < 0 Then

xEquipe(j).Motor = xMotor(0).nome

xEquipe(j).finanças = xEquipe(j).finanças - xMotor(0).custo

nMotor(j) = 0

End If 'Aqui você fecha o primeiro If, o debaxo não tem relacao nenhuma

If h(j) = 1 Then 'Aqui você abre o If q testa o h. veja q tem um End If la em cima, ou seja a partir daqui, o q ele vai executar independe do q saiu no if de cima

If xEquipe(j).finanças > xMotor(nMotor(j)).custo Then

a = Int(b * Rnd) + 1

If xEquipe(j).finanças > xMotor(nMotor(j) + a).custo Then

xEquipe(j).Motor = xMotor(nMotor(j) + a).nome

xEquipe(j).finanças = xEquipe(j).finanças - xMotor(nMotor(j) + a).custo

nMotor(j) = nMotor(j) + a

Else

xEquipe(j).Motor = xMotor(nMotor(j)).nome

xEquipe(j).finanças = xEquipe(j).finanças - xMotor(nMotor(j)).custo

nMotor(j) = nMotor(j)

End If

ElseIf xEquipe(j).finanças < xMotor(nMotor(j)).custo Then

If xEquipe(j).finanças > xMotor(nMotor(j) - 1).custo Then

xEquipe(j).Motor = xMotor(nMotor(j) - 1).nome

xEquipe(j).finanças = xEquipe(j).finanças - xMotor(nMotor(j) - 1).custo

nMotor(j) = nMotor(j) - 1

Else

If (nMotor(j) - 2) < 0 Then

h(j) = 0

ElseIf xEquipe(j).finanças > xMotor(nMotor(j) - 2).custo Then

xEquipe(j).Motor = xMotor(nMotor(j) - 2).nome

xEquipe(j).finanças = xEquipe(j).finanças - xMotor(nMotor(j) - 2).custo

nMotor(j) = nMotor(j) - 2

Else

If (nMotor(j) - 3) < 0 Then

h(j) = 0

ElseIf xEquipe(j).finanças > xMotor(nMotor(j) - 3).custo Then

xEquipe(j).Motor = xMotor(nMotor(j) - 3).nome

xEquipe(j).finanças = xEquipe(j).finanças - xMotor(nMotor(j) - 3).custo

nMotor(j) = nMotor(j) - 3

Else

If (nMotor(j) - 4) < 0 Then

h(j) = 0

ElseIf xEquipe(j).finanças > xMotor(nMotor(j) - 4).custo Then

xEquipe(j).Motor = xMotor(nMotor(j) - 4).nome

xEquipe(j).finanças = xEquipe(j).finanças - xMotor(nMotor(j) - 4).custo

nMotor(j) = nMotor(j) - 4

Else

If (nMotor(j) - 5) < 0 Then

h(j) = 0

ElseIf xEquipe(j).finanças > xMotor(nMotor(j) - 5).custo Then

xEquipe(j).Motor = xMotor(nMotor(j) - 5).nome

xEquipe(j).finanças = xEquipe(j).finanças - xMotor(nMotor(j) - 5).custo

nMotor(j) = nMotor(j) - 5

Else

If (nMotor(j) - 6) < 0 Then

h(j) = 0

ElseIf xEquipe(j).finanças > xMotor(nMotor(j) - 6).custo Then

xEquipe(j).Motor = xMotor(nMotor(j) - 6).nome

xEquipe(j).finanças = xEquipe(j).finanças - xMotor(nMotor(j) - 6).custo

nMotor(j) = nMotor(j) - 6

Else

xEquipe(j).Motor = xMotor(0).nome

xEquipe(j).finanças = xEquipe(j).finanças - xMotor(0).custo

nMotor(j) = 0 'O h = 2 q eu falei pra você tirar tava aqui, o de cima é pra deixar

End If

End If

End If

End If

End If

End If

End If

ElseIf h(j) = 2 Then 'Se ele entrou no h=1, ele não vai entrar aqui de jeito nenhum. antes você tava pondo o h=2 dentro do If h=1, na esperanca q ele passasse aqui. mas ele não vai nem ao menos testar o h, já q é um else pro mesmo if. ou seja se a primeira condicao do if já era verdadeira, ele não vai testar o else.

xEquipe(j).Motor = xMotor(0).nome

xEquipe(j).finanças = xEquipe(j).finanças - xMotor(0).custo

nMotor(j) = 0

ElseIf h(j) = 3 Then

xEquipe(j).Motor = xMotor(7).nome

xEquipe(j).finanças = xEquipe(j).finanças - xMotor(7).custo

nMotor(j) = 7

End If

End If

Next

Link para o comentário
Compartilhar em outros sites

  • 0

Eu entendi.

Mas por algum motivo minha lógica continua errada.

O motor parece que tá tudo certo, o combustível eu nem notei, mas o pneu eu tenho certeza que tá errado.

As equipes, mesmo tendo muito dinheiro, continuam comprando o pior pneu.

Mas valeu.

Editado por Darknnez
Link para o comentário
Compartilhar em outros sites

  • 0

aqui:

If xEquipe(j).finanças > xMotor(nMotor(j) + a).custo Then
                            xEquipe(j).Motor = xMotor(nMotor(j) + a).nome
                            xEquipe(j).finanças = xEquipe(j).finanças - xMotor(nMotor(j) + a).custo
                            nMotor(j) = nMotor(j) + a[/code]

quanto vale o a??

o codigo do peneu ta diferente do motor. se tiver, posta ai

Link para o comentário
Compartilhar em outros sites

  • 0

Sim.

Os códigos dos motores variam de 0 à 7, enquanto o dos pneus varia de 0 à 2.

Por isso eu eu faço:

b = 7 - nPneu(j)
para os motores. E:
b = 2 - nPneu(j)
para os pneus. E depois eu mando gerar um número aleatório. No caso dos pneus:
a = Int(b * Rnd) + 1
If xEquipe(j).finanças > xPneu(nPneu(j) + a).custo Then
       xEquipe(j).Pneu = xPneu(nPneu(j) + a).nome
       xEquipe(j).finanças = xEquipe(j).finanças - xPneu(nPneu(j) + a).custo
       nPneu(j) = nPneu(j) + a

Link para o comentário
Compartilhar em outros sites

  • 0

Ok, valeu cara.

Vou passar o código como está agora, de qualquer forma.

Essa codebox é boa por que não ocupa um espaço muito grande.


If etapa = 4 Then
temporada = temporada + 1

For k = 0 To UBound(xPiloto)
xPiloto(k).pontos = 0
Next

'_______________________MOTOR_______________________

Randomize

For j = 0 To UBound(xEquipe)
h(j) = Int(1 * Rnd) + 1
Next

For j = 0 To UBound(xEquipe)
If xEquipe(j).nome = xJogador.equipe Then
h(j) = 0
ElseIf xEquipe(j).nome <> xJogador.equipe Then
b = 7 - nMotor(j)
c = nMotor(j) - 0
If (nMotor(j) + 1) > 7 Then
h(j) = 3
ElseIf (nMotor(j) + B) = nMotor(j) Then
h(j) = 3
ElseIf (nMotor(j) - c) = nMotor(j) Then
h(j) = 2
ElseIf (nMotor(j) - 1) < 0 Then
h(j) = 2
End If
If h(j) = 1 Then
If xEquipe(j).finanças > xMotor(nMotor(j)).custo Then
a = Int(b * Rnd) + 1
If xEquipe(j).finanças > xMotor(nMotor(j) + a).custo Then
xEquipe(j).Motor = xMotor(nMotor(j) + a).nome
xEquipe(j).finanças = xEquipe(j).finanças - xMotor(nMotor(j) + a).custo
nMotor(j) = nMotor(j) + a
Else
xEquipe(j).Motor = xMotor(nMotor(j)).nome
xEquipe(j).finanças = xEquipe(j).finanças - xMotor(nMotor(j)).custo
nMotor(j) = nMotor(j)
End If
ElseIf xEquipe(j).finanças < xMotor(nMotor(j)).custo Then
If xEquipe(j).finanças > xMotor(nMotor(j) - 1).custo Then
xEquipe(j).Motor = xMotor(nMotor(j) - 1).nome
xEquipe(j).finanças = xEquipe(j).finanças - xMotor(nMotor(j) - 1).custo
nMotor(j) = nMotor(j) - 1
Else
If (nMotor(j) - 2) < 0 Then
h(j) = 0
ElseIf xEquipe(j).finanças > xMotor(nMotor(j) - 2).custo Then
xEquipe(j).Motor = xMotor(nMotor(j) - 2).nome
xEquipe(j).finanças = xEquipe(j).finanças - xMotor(nMotor(j) - 2).custo
nMotor(j) = nMotor(j) - 2
Else
If (nMotor(j) - 3) < 0 Then
h(j) = 0
ElseIf xEquipe(j).finanças > xMotor(nMotor(j) - 3).custo Then
xEquipe(j).Motor = xMotor(nMotor(j) - 3).nome
xEquipe(j).finanças = xEquipe(j).finanças - xMotor(nMotor(j) - 3).custo
nMotor(j) = nMotor(j) - 3
Else
If (nMotor(j) - 4) < 0 Then
h(j) = 0
ElseIf xEquipe(j).finanças > xMotor(nMotor(j) - 4).custo Then
xEquipe(j).Motor = xMotor(nMotor(j) - 4).nome
xEquipe(j).finanças = xEquipe(j).finanças - xMotor(nMotor(j) - 4).custo
nMotor(j) = nMotor(j) - 4
Else
If (nMotor(j) - 5) < 0 Then
h(j) = 0
ElseIf xEquipe(j).finanças > xMotor(nMotor(j) - 5).custo Then
xEquipe(j).Motor = xMotor(nMotor(j) - 5).nome
xEquipe(j).finanças = xEquipe(j).finanças - xMotor(nMotor(j) - 5).custo
nMotor(j) = nMotor(j) - 5
Else
If (nMotor(j) - 6) < 0 Then
h(j) = 0
ElseIf xEquipe(j).finanças > xMotor(nMotor(j) - 6).custo Then
xEquipe(j).Motor = xMotor(nMotor(j) - 6).nome
xEquipe(j).finanças = xEquipe(j).finanças - xMotor(nMotor(j) - 6).custo
nMotor(j) = nMotor(j) - 6
Else
xEquipe(j).Motor = xMotor(0).nome
xEquipe(j).finanças = xEquipe(j).finanças - xMotor(0).custo
nMotor(j) = 0
End If
End If
End If
End If
End If
End If
End If
ElseIf h(j) = 2 Then
xEquipe(j).Motor = xMotor(0).nome
xEquipe(j).finanças = xEquipe(j).finanças - xMotor(0).custo
nMotor(j) = 0
ElseIf h(j) = 3 Then
xEquipe(j).Motor = xMotor(7).nome
xEquipe(j).finanças = xEquipe(j).finanças - xMotor(7).custo
nMotor(j) = 7
End If
End If
Next


'_______________________COMBUSTÍVEL_______________________

Randomize

For j = 0 To UBound(xEquipe)
h(j) = Int(1 * Rnd) + 1
Next

For j = 0 To UBound(xEquipe)
If xEquipe(j).nome = xJogador.equipe Then
h(j) = 0
ElseIf xEquipe(j).nome <> xJogador.equipe Then
b = 4 - nCombustível(j)
c = nCombustível(j) - 0
If (nCombustível(j) + 1) > 4 Then
h(j) = 3
ElseIf (nCombustível(j) + B) = nCombustível(j) Then
h(j) = 3
ElseIf (nCombustível(j) - c) = nCombustível(j) Then
h(j) = 2
ElseIf (nCombustível(j) - 1) < 0 Then
h(j) = 2
End If
If h(j) = 1 Then
If xEquipe(j).finanças > xCombustível(nCombustível(j)).custo Then
a = Int(b * Rnd) + 1
If xEquipe(j).finanças > xCombustível(nCombustível(j) + a).custo Then
xEquipe(j).Combustível = xCombustível(nCombustível(j) + a).nome
xEquipe(j).finanças = xEquipe(j).finanças - xCombustível(nCombustível(j) + a).custo
nCombustível(j) = nCombustível(j) + a
Else
xEquipe(j).Combustível = xCombustível(nCombustível(j)).nome
xEquipe(j).finanças = xEquipe(j).finanças - xCombustível(nCombustível(j)).custo
nCombustível(j) = nCombustível(j)
End If
ElseIf xEquipe(j).finanças < xCombustível(nCombustível(j)).custo Then
If xEquipe(j).finanças > xCombustível(nCombustível(j) - 1).custo Then
xEquipe(j).Combustível = xCombustível(nCombustível(j) - 1).nome
xEquipe(j).finanças = xEquipe(j).finanças - xCombustível(nCombustível(j) - 1).custo
nCombustível(j) = nCombustível(j) - 1
Else
If (nCombustível(j) - 2) < 0 Then
h(j) = 0
ElseIf xEquipe(j).finanças > xCombustível(nCombustível(j) - 2).custo Then
xEquipe(j).Combustível = xCombustível(nCombustível(j) - 2).nome
xEquipe(j).finanças = xEquipe(j).finanças - xCombustível(nCombustível(j) - 2).custo
nCombustível(j) = nCombustível(j) - 2
Else
If (nCombustível(j) - 3) < 0 Then
h(j) = 0
ElseIf xEquipe(j).finanças > xCombustível(nCombustível(j) - 3).custo Then
xEquipe(j).Combustível = xCombustível(nCombustível(j) - 3).nome
xEquipe(j).finanças = xEquipe(j).finanças - xCombustível(nCombustível(j) - 3).custo
nCombustível(j) = nCombustível(j) - 3
Else
xEquipe(j).Combustível = xCombustível(0).nome
xEquipe(j).finanças = xEquipe(j).finanças - xCombustível(0).custo
nCombustível(j) = 0
End If
End If
End If
End If
ElseIf h(j) = 2 Then
xEquipe(j).Combustível = xCombustível(0).nome
xEquipe(j).finanças = xEquipe(j).finanças - xCombustível(0).custo
nCombustível(j) = 0
ElseIf h(j) = 3 Then
xEquipe(j).Combustível = xCombustível(4).nome
xEquipe(j).finanças = xEquipe(j).finanças - xCombustível(4).custo
nCombustível(j) = 4
End If
End If
Next



'_______________________PNEU_______________________

Randomize

For j = 0 To UBound(xEquipe)
h(j) = Int(1 * Rnd) + 1
Next

For j = 0 To UBound(xEquipe)
If xEquipe(j).nome = xJogador.equipe Then
h(j) = 0
ElseIf xEquipe(j).nome <> xJogador.equipe Then
b = 2 - nPneu(j)
c = nPneu(j) - 0
If (nPneu(j) + 1) > 2 Then
h(j) = 3
ElseIf (nPneu(j) + B) = nPneu(j) Then
h(j) = 3
ElseIf (nPneu(j) - c) = nPneu(j) Then
h(j) = 2
ElseIf (nPneu(j) - 1) < 0 Then
h(j) = 2
End If
If h(j) = 1 Then
If xEquipe(j).finanças > xPneu(nPneu(j)).custo Then
a = Int(b * Rnd) + 1
If xEquipe(j).finanças > xPneu(nPneu(j) + a).custo Then
xEquipe(j).Pneu = xPneu(nPneu(j) + a).nome
xEquipe(j).finanças = xEquipe(j).finanças - xPneu(nPneu(j) + a).custo
nPneu(j) = nPneu(j) + a
Else
xEquipe(j).Pneu = xPneu(nPneu(j)).nome
xEquipe(j).finanças = xEquipe(j).finanças - xPneu(nPneu(j)).custo
nPneu(j) = nPneu(j)
End If
ElseIf xEquipe(j).finanças < xPneu(nPneu(j)).custo Then
If xEquipe(j).finanças > xPneu(nPneu(j) - 1).custo Then
xEquipe(j).Pneu = xPneu(nPneu(j) - 1).nome
xEquipe(j).finanças = xEquipe(j).finanças - xPneu(nPneu(j) - 1).custo
nPneu(j) = nPneu(j) - 1
Else
xEquipe(j).Pneu = xPneu(0).nome
xEquipe(j).finanças = xEquipe(j).finanças - xPneu(0).custo
nPneu(j) = 0
End If
End If
ElseIf h(j) = 2 Then
xEquipe(j).Pneu = xPneu(0).nome
xEquipe(j).finanças = xEquipe(j).finanças - xPneu(0).custo
nPneu(j) = 0
ElseIf h(j) = 3 Then
xEquipe(j).Pneu = xPneu(2).nome
xEquipe(j).finanças = xEquipe(j).finanças - xPneu(2).custo
nPneu(j) = 2
End If
End If
Next

etapa = 0
MsgBox "Acabou a temporada"
End If
[/codebox]

Link para o comentário
Compartilhar em outros sites

  • 0

Vou mandar o projeto novamente por MP, ok?

O problema é que, não necessariamente, as equipes vão comprar o pior motor e/ou combustível, mesmo tendo muito dinheiro. Se não deu na primeira ou na segunda temporada, tenta mais algumas vezes.

Aqui quase sempre, acho que 95% das vezes, da o problema logo de cara na primeira temporada.

Link para o comentário
Compartilhar em outros sites

  • 0

cara na hora q eu fui baxar ontem deu pau no forum e ficou a madrugada toda com pau, pelo menos aqui em casa. mas hj eu vejo la

EDITADO:

hum acho q isso acontece por causa dessa linha:

a = Int(b * Rnd) + 1

tipo uma equipe aqui tava com o motor 2 e com 24000. ai a variavel b passa a valer 5. ou seja, o a pode retornar qualquer valor entre 1 e 5. ou seja se retornar 1, ele vai comprar o motor 3. não é o pior motor, mas ele podia comprar um melhor, seria esse o problema??

Link para o comentário
Compartilhar em outros sites

  • 0

Aqui também deu problema ontem, no fórum.

Quanto ao projeto, não é esse o problema.

Você me falou o seguinte: uma equipe com muito dinheiro, tem um motor ruim, e quando vai comprar outro, ela compra um motor melhor que o dela, mas que não é o melhor do jogo.

O problema que ta acontecendo agora, é que uma equipe que tem muito dinheiro, e já tem o melhor motor, ta comprando o pior motor do jogo logo de cara. Tudo bem se no caso a equipe fosse pobre, mas aí ela ira comprando um motor pior de cada vez, por exemplo: tem o motor 7, ai compra o 6, e depois compra o 5, etc... até chegar no pior motor, que é o 0.

Mas no caso, as equipes aqui estão comprando logo de cara o pior motor, mesmo tendo muito dinheiro.

Ou seja, não era para comprar nem mesmo um motor pior do que o que já tem, quanto menos o pior motor.

Deu pra entender?

Link para o comentário
Compartilhar em outros sites

  • 0

mas isso q você falou não acontece pra mim de jeito nenhum. tipo tem dois lugares q as equipes compram o pior motor (0), certo??

q são, aqui:

If (nMotor(j) - 6) < 0 Then
                                                h(j) = 0
                                            ElseIf xEquipe(j).finanças > xMotor(nMotor(j) - 6).custo Then
                                                xEquipe(j).Motor = xMotor(nMotor(j) - 6).nome
                                                xEquipe(j).finanças = xEquipe(j).finanças - xMotor(nMotor(j) - 6).custo
                                                nMotor(j) = nMotor(j) - 6
                                            Else
                                                xEquipe(j).Motor = xMotor(0).nome
                                                xEquipe(j).finanças = xEquipe(j).finanças - xMotor(0).custo
                                                nMotor(j) = 0
                                            End If[/code] e aqui:
[code]ElseIf h(j) = 2 Then
                    xEquipe(j).Motor = xMotor(0).nome
                    xEquipe(j).finanças = xEquipe(j).finanças - xMotor(0).custo
                    nMotor(j) = 0

faz o seguinte, poe um breakpoint (F9) nas duas linhas q tem xEquipe(j).Motor = xMotor(0).nome, roda o programa e ve se ele para alguma vez ai. em tres temporadas, ele so parou pra uma equipe q realmente não tinha dinhero pra comprar os outros motores. ve se pra você aparece alguma vez uma equipe com bastante dinheiro.

Link para o comentário
Compartilhar em outros sites

  • 0

Ops! Mas também, eu te falei errado.

Na verdade, com o motor está tudo ok, como eu havia dito em um post passado.

O problema tá acontecendo é com o pneu e com o combustível.

Então ignora quando eu disse que as equipes estão comprando o pior motor, mesmo tendo muito dinheiro, por que na verdade elas estão comprando o pior pneu e o pior combustível.

E só para te dar uma garantia, aqui isso acontece TODA vez.

Logo que passa a primeira temporada, da esse erro.

Nem lembro se deu resultado diferente alguma vez, em algum dos testes.

EDIT:

Mais uma vez, deu logo de cara.

A Ferrari logo após a primeira temporada, comprou o pior pneu (Firestone) e o pior combustível (Esso), mas manteve o melhor motor (Ferrari).

Se não der na primeira temporada, tenta na segunda, ou terceira.

Por que agora, por exemplo, a McLaren não comprou o pior pneu depois da primeira temporada, mas comprou após a segunda temporada.

Editado por Darknnez
Link para o comentário
Compartilhar em outros sites

  • 0

ta... se o cara ta com o pior pneu, porque você poe pra ele comprar o pior?? porque tipo assim:

ElseIf (nPneu(j) - c) = nPneu(j) Then
                h(j) = 2[/code] ele so vai entrar ai se o peneu for 0, não?? porque ai c = 0 - 0, ai 0 - 0 = 0. e quando for 2, ele vai comprar o pior. acho q esse if ta errado. e otra coisa, ele não ta ordenando o peneu junto:
[code]Public Function ClassificaçãoEquipe2(ByRef Vetor() As equipe, tam)
    Dim i, j, h, k
    Dim min
    Dim aux As equipe
    Dim aux1 As Variant

    For i = 0 To tam
        min = i
            For j = i + 1 To tam
                If Vetor(j).desempate < Vetor(min).desempate Then min = j
            Next j

            aux = Vetor(i)
            Vetor(i) = Vetor(min)
            Vetor(min) = aux
            
            aux1 = nMotor(i)
            nMotor(i) = nMotor(min)
            nMotor(min) = aux1
    Next i
    
End Function

nessa funcao você poe pra ordenar o nMotor, mas não poe o nPneu. então vai acontecer aquilo, a classificacao das equipes vai mudar e ai uma vai ficar com o peneu da outra. o mesmo pro combustivel. a ferrari q comeca com o pneu 1, ficou com o pneu 0 aqui pra mim. e quando a equipe tem o pneu 0, pelo seu codigo acima, ele vai sempre comprar o 0.

Link para o comentário
Compartilhar em outros sites

  • 0

Aaaah! É verdade!

Por isso que o motor tava dando certo, e o pneu e o combustível não.

Nossa, valeu cara.

Tava há uma semana já atrás disso.

Mas só pra ter certeza.

Eu só preciso ordenar os pneus e os combustíveis, da mesma forma que fiz com o motor?

Tipo:

aux1 = nPneu(i)
            nPneu(i) = nPneu(min)
            nPneu(min) = aux1

e o mesmo com os combustíveis, tudo dentro da mesma função?

EDIT:

É, eu fiz isso e deu certo.

Agora eu tava querendo mudar o sistema de corrida.

Na atual, os pilotos vão sendo ordenados gradativamente, do pior ao melhor, um de cada vez, certo?

Eu queria fazer com que a cada segundo (Interval: 1000) do Timer, o ai de cada piloto fosse gerado novamente, e somado ao anterior, e mais uma vez, ordenando do piloto com a maior soma ao piloto com a menor soma. Mas dessa vez, pra cada segundo, os pilotos aparecem juntos, de uma vez, sem aquele negócio de aparecer um de cada vez.

Eu até tinha conseguido fazer com que a ai somasse, há um tempo atrás, mas preferi deixar como estava, sem salvar, e só mecher com isso mais tarde.

Mas eu tentei fazer denovo ontem, e não estou conseguindo.

Alguma idéia?

Valeu.

Editado por Darknnez
Link para o comentário
Compartilhar em outros sites

  • 0

ta, mas tem q ter um limite, você não pode ficar somando o ia pra sempre.

tipo, se eu entendi direito, o timer deve ficar mais o menos assim:

Private Sub Timer1_Timer()
- AQUI você CALCULA E SOMA O IA -

tempo = tempo + 1
For i = 1 To 22
    Me.Controls("lbl" & 22 - (tempo - 1)).Caption = xPiloto(tempo - 1).nome
Next
If tempo = 22 Then 'Aqui não tem q ser necessariamente 22, pois agora não depende mais do piloto, e sim de qtos segundos você quer q a corrida demore.
    Timer1.Enabled = False
End If
End Sub[/code]

Link para o comentário
Compartilhar em outros sites

  • 0

Não... acho que não expliquei direito então.

É tipo assim:

Depois que o botão é apertado, um número aleatório (AI) é gerado para cada piloto, certo?

Ok. Imagina que o PilotoX teve sua AI gerada igual 500, e o PilotoY igual a 400.

Até o momento, o PilotoX está na frente do PilotoY, e isso corresponde à primeira volta da corrida.

No segundo seguinte, a AI de cada piloto é gerada novamente, e somada a anterior.

Por exemplo: nesse instante (segunda volta) a AI do PilotoX deu igual a 300, e a AI do PilotoY deu 500.

Então elas são somadas da seguinte forma:

Primeira volta

AI do PilotoX = 500

AI do PilotoY = 400

Segunda volta

AI do PilotoX = AI do PilotoX + 300

AI do PilotoY = AI do PilotoY + 500

Ou seja, após essa segunda volta, o PilotoY estaria na frente (AI = 900) do PilotoX(AI = 800). E isso continua ocorrendo consecutivamente até o 70° segundo (que representam um total de 70 voltas, uma volta para cada 1 segundo).

Ficou mais claro agora?

Link para o comentário
Compartilhar em outros sites

  • 0

Hmm... então fui eu que não entendi o código.

Mas vou tentar aqui, valeu.

EDIT:

Você então sugere que eu faça isso:

Private Sub Timer1_Timer()
For i = 0 To 21
    xPiloto(i).ai = xPiloto(i).ai + Int(xPiloto(i).chance * Rnd) + 1
Next
tempo = tempo + 1
For i = 1 To 22
    Me.Controls("lbl" & 22 - (tempo - 1)).Caption = xPiloto(tempo - 1).nome & " - " & xPiloto(tempo - 1).ai
Next
If tempo = 22 Then
    Timer1.Enabled = False
End If
End Sub

?

Por que se for, não chegou nem perto do que eu quero.

hahaha

Bem, eu não sei explicar melhor do que já expliquei.

Só sei que desse jeito que você me falou, estão acontecendo vários erros:

- Os pilotos continuam aparecendo um de cada vez, por ordem da pior AI à melhor AI

- Ao que me parece, a AI não está sendo somada corretamente.

- E os pilotos não estão sendo ordenados corretamente.

Mas valeu.

Link para o comentário
Compartilhar em outros sites

  • 0

a ta, antes disso:

For i = 1 To 22
    Me.Controls("lbl" & 22 - (tempo - 1)).Caption = xPiloto(tempo - 1).nome & " - " & xPiloto(tempo - 1).ai
Next[/code] você tem q chamar a funcao q ordena pelo ia. e na verdade, eu esqueci de trocar o tempo pelo i, esse é o certo:
[code]For i = 1 To 22
    Me.Controls("lbl" & 22 - (i- 1)).Caption = xPiloto(i- 1).nome & " - " & xPiloto(i- 1).ai
Next
e aqui acho q era pra ser 70, já q são 70 voltas não??
If tempo = 70 Then
    Timer1.Enabled = False
End If[/code]

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.




  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...