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

Tá assim:

Em um Form

Option Explicit


Private Sub cmdOK_Click()
     Randomize
     x(0, 0) = Int(99 * Rnd) + 1
     x(1, 0) = Int(100 * Rnd) + 1
     x(2, 0) = Int(95 * Rnd) + 1
     x(3, 0) = Int(96 * Rnd) + 1
     x(4, 0) = Int(67 * Rnd) + 1
     x(5, 0) = Int(70 * Rnd) + 1
     x(6, 0) = Int(65 * Rnd) + 1
     x(7, 0) = Int(55 * Rnd) + 1
     x(8, 0) = Int(58 * Rnd) + 1
     x(9, 0) = Int(45 * Rnd) + 1
     x(10, 0) = Int(60 * Rnd) + 1
     x(11, 0) = Int(60 * Rnd) + 1
     x(12, 0) = Int(55 * Rnd) + 1
     x(13, 0) = Int(50 * Rnd) + 1
     x(14, 0) = Int(53 * Rnd) + 1
     x(15, 0) = Int(47 * Rnd) + 1
     x(16, 0) = Int(40 * Rnd) + 1
     x(17, 0) = Int(25 * Rnd) + 1
     x(18, 0) = Int(30 * Rnd) + 1
     x(19, 0) = Int(27 * Rnd) + 1
     
     x(0, 1) = "Alonso"
     x(1, 1) = "Hamilton"
     x(2, 1) = "Massa"
     x(3, 1) = "Raikkonen"
     x(4, 1) = "Heidfield"
     x(5, 1) = "Kubica"
     x(6, 1) = "Fisichella"
     x(7, 1) = "Kovalainen"
     x(8, 1) = "Rosberg"
     x(9, 1) = "Wurz"
     x(10, 1) = "Coulthard"
     x(11, 1) = "Webber"
     x(12, 1) = "Schumacher"
     x(13, 1) = "Trulli"
     x(14, 1) = "Button"
     x(15, 1) = "Barrichello"
     x(16, 1) = "Liuzzi"
     x(17, 1) = "Speed"
     x(18, 1) = "Sato"
     x(19, 1) = "Davidson"
     
     SelectionSort x(), 19
     
     lbl1.Caption = x(19, 1)
     lbl2.Caption = x(18, 1)
     lbl3.Caption = x(17, 1)
     lbl4.Caption = x(16, 1)
     lbl5.Caption = x(15, 1)
     lbl6.Caption = x(14, 1)
     lbl7.Caption = x(13, 1)
     lbl8.Caption = x(12, 1)
     lbl9.Caption = x(11, 1)
     lbl10.Caption = x(10, 1)
     lbl11.Caption = x(9, 1)
     lbl12.Caption = x(8, 1)
     lbl13.Caption = x(7, 1)
     lbl14.Caption = x(6, 1)
     lbl15.Caption = x(5, 1)
     lbl16.Caption = x(4, 1)
     lbl17.Caption = x(3, 1)
     lbl18.Caption = x(2, 1)
     lbl19.Caption = x(1, 1)
     lbl20.Caption = x(0, 1)
End Sub
E em um module
Option Explicit
Public x(19, 1) As Variant

Public Function SelectionSort(Vetor(), tam)
     Dim i, j
     Dim min, aux

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

          aux = Vetor(i, 0)
          Vetor(i, 0) = Vetor(min, 0)
          Vetor(min, 0) = aux
          
          aux = Vetor(i, 1)
          Vetor(i, 1) = Vetor(min, 1)
          Vetor(min, 1) = aux
     Next i
End Function

Link para o comentário
Compartilhar em outros sites

  • 0

a ta, eu achei que você estivesse usando o type (que alias, era o que eu recomendaria), mas se você preferir trabalhando com a matriz, você tera que adicionar mais uma posicao no segundo indice pra gravar a pontuacao deles.

e ai você teria que alterar a funcao SelectionSort, adicionando no final o codigo pra mudar de posicao a pontuacao junto. tipo assim:

aux = Vetor(i, 2)
          Vetor(i, 2) = Vetor(min, 2)
          Vetor(min, 2) = aux[/code]

esse é o problema de você fazer com a matriz, entende?? cada dado novo que você quiser acrescentar pro piloto, você precisaria adicionar novas linhas no SelectionSort, o que alias, pode fazer o programa rodar mais lento.

Link para o comentário
Compartilhar em outros sites

  • 0

não testei nenhum dos codigos abaixo, veja se funcionam.

se o seu tipo é esse:

Type piloto
    Nome As String
    AI As Integer
    Pontos As Integer
End Type[/code] no modulo, declare assim:
[code]Public x(19) As piloto
ai pra acessar os dados, faca:
x(0).AI = Int(99 * Rnd) + 1
     x(1).AI = Int(100 * Rnd) + 1
     ....
     ....
     x(19).AI = Int(27 * Rnd) + 1
    
     x(0).Nome = "Alonso"
     x(1).Nome = "Hamilton"
     ....
     ....
     x(19).Nome = "Davidson"[/code] e na funcao de ordenar você deve alterar a funcao pra pegar pela propriedade AI, assim:
[code]Public Function SelectionSort(Vetor() As piloto, tam)
     Dim i, j
     Dim min
     Dim aux As piloto

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

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

veja ai se funciona.

depois pra fazer a pontuacao, veja o que eu disse nesse post: http://scriptbrasil.com.br/forum/index.php...st&p=440475

veja se consegue aí, qualquer coisa poste

Link para o comentário
Compartilhar em outros sites

  • 0

Parece que tá tudo certo.

Mas ta dando um problema nessa linha:

SelectionSort x(), 19

Aparece:

"Type mismatch: array or user-defined type expected"

Ah!

Acho que eu resolvi agora.

Se der algo errado eu aviso aqui, mas parece que agora ta tudo certo.

Infelizmente, acho que você só vai ver essa mensagem depois que já tiver postado.

Então.... foi mal! :(

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

  • 0

é, veja que eu alterei a funcao SelectionSort:

Public Function SelectionSort(Vetor() As piloto, tam)

o seu array não é mais Variant, então você deve especificar o tipo na funcao. do mesmo jeito, a variavel aux dentro da funcao, você também deve declarar como tipo piloto.

EDITADO:

Infelizmente, acho que você só vai ver essa mensagem depois que já tiver postado.

Então.... foi mal! :(

hahah beleza. qualquer problema poste ai

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

  • 0

Option Explicit

Private Sub cmdOK_Click()
     Randomize
     x(0).AI = Int(99 * Rnd) + 1
     x(1).AI = Int(100 * Rnd) + 1
     x(2).AI = Int(95 * Rnd) + 1
     x(3).AI = Int(96 * Rnd) + 1
     x(4).AI = Int(67 * Rnd) + 1
     x(5).AI = Int(70 * Rnd) + 1
     x(6).AI = Int(65 * Rnd) + 1
     x(7).AI = Int(55 * Rnd) + 1
     x(8).AI = Int(58 * Rnd) + 1
     x(9).AI = Int(45 * Rnd) + 1
     x(10).AI = Int(60 * Rnd) + 1
     x(11).AI = Int(60 * Rnd) + 1
     x(12).AI = Int(55 * Rnd) + 1
     x(13).AI = Int(50 * Rnd) + 1
     x(14).AI = Int(53 * Rnd) + 1
     x(15).AI = Int(47 * Rnd) + 1
     x(16).AI = Int(40 * Rnd) + 1
     x(17).AI = Int(25 * Rnd) + 1
     x(18).AI = Int(30 * Rnd) + 1
     x(19).AI = Int(27 * Rnd) + 1
     
     x(0).Nome = "Alonso"
     x(1).Nome = "Hamilton"
     x(2).Nome = "Massa"
     x(3).Nome = "Raikkonen"
     x(4).Nome = "Heidfield"
     x(5).Nome = "Kubica"
     x(6).Nome = "Fisichella"
     x(7).Nome = "Kovalainen"
     x(8).Nome = "Rosberg"
     x(9).Nome = "Wurz"
     x(10).Nome = "Coulthard"
     x(11).Nome = "Webber"
     x(12).Nome = "Schumacher"
     x(13).Nome = "Trulli"
     x(14).Nome = "Button"
     x(15).Nome = "Barrichello"
     x(16).Nome = "Liuzzi"
     x(17).Nome = "Speed"
     x(18).Nome = "Sato"
     x(19).Nome = "Davidson"
     
     x(19).Pontos = x(19).Pontos + 10
     x(18).Pontos = x(18).Pontos + 8
     x(17).Pontos = x(17).Pontos + 6
     x(16).Pontos = x(16).Pontos + 5
     x(15).Pontos = x(15).Pontos + 4
     x(14).Pontos = x(14).Pontos + 3
     x(13).Pontos = x(13).Pontos + 2
     x(12).Pontos = x(12).Pontos + 1
     
     SelectionSort x(), 19
         
     lbl1.Caption = x(19).Nome
     lbl2.Caption = x(18).Nome
     lbl3.Caption = x(17).Nome
     lbl4.Caption = x(16).Nome
     lbl5.Caption = x(15).Nome
     lbl6.Caption = x(14).Nome
     lbl7.Caption = x(13).Nome
     lbl8.Caption = x(12).Nome
     lbl9.Caption = x(11).Nome
     lbl10.Caption = x(10).Nome
     lbl11.Caption = x(9).Nome
     lbl12.Caption = x(8).Nome
     lbl13.Caption = x(7).Nome
     lbl14.Caption = x(6).Nome
     lbl15.Caption = x(5).Nome
     lbl16.Caption = x(4).Nome
     lbl17.Caption = x(3).Nome
     lbl18.Caption = x(2).Nome
     lbl19.Caption = x(1).Nome
     lbl20.Caption = x(0).Nome
     
     
End Sub
Fiz assim. Aí quando fiz:
Label2.Caption = x(19).Pontos

Pra ver o que dava, o número aparecia todo louco.

Ele aumentava, diminuía, outra hora não aumentava mais... haha

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

  • 0

duas coisas:

- os nomes dos pilotos você deve setar so uma vez no programa todo. assim como qualquer outro dado fixo, tipo o nome do carro, se tivesse. de preferencia ponha no Form_Load do primeiro form que carregar. porque, pensa bem, o Alonso é o 0, mas ai o Massa acaba em ultimo e é ele quem passa a ser o 0. ai você clica no botao de novo e de novo poe o nome do Alonso pro indice 0. desse jeito o Massa virou o Alonso e o mesmo aconteceu cum todos os otros pilotos.

- você tem que setar os pontos depois do sort. você so pode dar os pontos depois que a corrida acaba. você so vai saber quem é o primeiro depois que o array for ordenado.

Link para o comentário
Compartilhar em outros sites

  • 0
Mas aí quando eu coloco os nomes no Form_Load, a IA perde sentido.

Fica completamente aleatório, todos ficam com chances idênticas de chegar em qualquer posição.

o nome sim deve ir pro form_load. o ia não, tem que continuar no botao porque ele é calculado a cada vez.

pensa assim: quando você estiver escrevendo os nomes você esta inicializando a variavel, ou seja jogando os dados dentro, criando os pilotos. agora quando você seta o ia é aí que eles estao correndo.

Link para o comentário
Compartilhar em outros sites

  • 0

Sim, mas eu não coloquei a IA dentro do Form_Load, só os nomes mesmo.

Aí quando eu rodei o programa as posições dos pilotos não se davam mais de acordo com a IA.

Mesmo colocando em um determinado piloto Int(10000 * Rnd) + 1, e em todos os outros Int(1 * Rnd) + 1, não influenciava em nada.

Link para o comentário
Compartilhar em outros sites

  • 0

ta.

a primeira linha da sua funcao que ordena, acredito, ta assim, não??

Public Function SelectionSort(Vetor() As piloto, tam)
então, faca assim:
Public Function SelectionSort(ByRef Vetor() As piloto, tam)

veja se resolve. se não resolver poste o seu codigo pra eu testar aqui.

a e pra saber o porque dessa alteracao que eu pedi, da uma olhada nesse post: http://scriptbrasil.com.br/forum/index.php...st&p=242323

Link para o comentário
Compartilhar em outros sites

  • 0

Mudei aqui, e não adiantou.

Mas antes de te passar o código, quero saber uma coisa só pra ter certeza.

Quando você fala para passar os nomes para o Form_Load, eu devo passar todo o seguinte código?

Private Sub Form_Load()
     x(0).Nome = "Alonso"
     x(1).Nome = "Hamilton"
     x(2).Nome = "Massa"
     x(3).Nome = "Raikkonen"
     x(4).Nome = "Heidfield"
     x(5).Nome = "Kubica"
     x(6).Nome = "Fisichella"
     x(7).Nome = "Kovalainen"
     x(8).Nome = "Rosberg"
     x(9).Nome = "Wurz"
     x(10).Nome = "Coulthard"
     x(11).Nome = "Webber"
     x(12).Nome = "Schumacher"
     x(13).Nome = "Trulli"
     x(14).Nome = "Button"
     x(15).Nome = "Barrichello"
     x(16).Nome = "Liuzzi"
     x(17).Nome = "Speed"
     x(18).Nome = "Sato"
     x(19).Nome = "Davidson"
End Sub

E se não é assim, como eu devo fazer então?

Link para o comentário
Compartilhar em outros sites

  • 0

Upei o programa no RapidShare, as vezes facilita pra você:

http://rapidshare.com/files/46066847/C_dig..._kuroi.rar.html

E o código então está assim

Form1

Option Explicit

Private Sub cmdOK_Click()
     Randomize
     x(0).AI = Int(99 * Rnd) + 1
     x(1).AI = Int(100 * Rnd) + 1
     x(2).AI = Int(95 * Rnd) + 1
     x(3).AI = Int(96 * Rnd) + 1
     x(4).AI = Int(67 * Rnd) + 1
     x(5).AI = Int(70 * Rnd) + 1
     x(6).AI = Int(65 * Rnd) + 1
     x(7).AI = Int(55 * Rnd) + 1
     x(8).AI = Int(58 * Rnd) + 1
     x(9).AI = Int(45 * Rnd) + 1
     x(10).AI = Int(60 * Rnd) + 1
     x(11).AI = Int(60 * Rnd) + 1
     x(12).AI = Int(55 * Rnd) + 1
     x(13).AI = Int(50 * Rnd) + 1
     x(14).AI = Int(53 * Rnd) + 1
     x(15).AI = Int(47 * Rnd) + 1
     x(16).AI = Int(40 * Rnd) + 1
     x(17).AI = Int(25 * Rnd) + 1
     x(18).AI = Int(30 * Rnd) + 1
     x(19).AI = Int(27 * Rnd) + 1
     
     SelectionSort x(), 19
     
     x(19).Pontos = x(19).Pontos + 10
     x(18).Pontos = x(18).Pontos + 8
     x(17).Pontos = x(17).Pontos + 6
     x(16).Pontos = x(16).Pontos + 5
     x(15).Pontos = x(15).Pontos + 4
     x(14).Pontos = x(14).Pontos + 3
     x(13).Pontos = x(13).Pontos + 2
     x(12).Pontos = x(12).Pontos + 1
         
     lbl1.Caption = x(19).Nome
     lbl2.Caption = x(18).Nome
     lbl3.Caption = x(17).Nome
     lbl4.Caption = x(16).Nome
     lbl5.Caption = x(15).Nome
     lbl6.Caption = x(14).Nome
     lbl7.Caption = x(13).Nome
     lbl8.Caption = x(12).Nome
     lbl9.Caption = x(11).Nome
     lbl10.Caption = x(10).Nome
     lbl11.Caption = x(9).Nome
     lbl12.Caption = x(8).Nome
     lbl13.Caption = x(7).Nome
     lbl14.Caption = x(6).Nome
     lbl15.Caption = x(5).Nome
     lbl16.Caption = x(4).Nome
     lbl17.Caption = x(3).Nome
     lbl18.Caption = x(2).Nome
     lbl19.Caption = x(1).Nome
     lbl20.Caption = x(0).Nome
          
End Sub

Private Sub Form_Load()
     x(0).Nome = "Alonso"
     x(1).Nome = "Hamilton"
     x(2).Nome = "Massa"
     x(3).Nome = "Raikkonen"
     x(4).Nome = "Heidfield"
     x(5).Nome = "Kubica"
     x(6).Nome = "Fisichella"
     x(7).Nome = "Kovalainen"
     x(8).Nome = "Rosberg"
     x(9).Nome = "Wurz"
     x(10).Nome = "Coulthard"
     x(11).Nome = "Webber"
     x(12).Nome = "Schumacher"
     x(13).Nome = "Trulli"
     x(14).Nome = "Button"
     x(15).Nome = "Barrichello"
     x(16).Nome = "Liuzzi"
     x(17).Nome = "Speed"
     x(18).Nome = "Sato"
     x(19).Nome = "Davidson"
End Sub
Module1
Option Explicit
Public x(19) As piloto

Type piloto
    Nome As String
    AI As Integer
    Pontos As Integer
End Type

Public Function SelectionSort(ByRef Vetor() As piloto, tam)
     Dim i, j
     Dim min
     Dim aux As piloto

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

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

Link para o comentário
Compartilhar em outros sites

  • 0

opa, vi o rapidshare so agora, nem precisou.

mas testei aqui o seu codigo, sem alterar uma unica linha e ta tudo funcionando. tipo, td o que estava pra ser feito esta sendo feito.

qual o problema pra você?? o que você realmente quis dizer com isso??

Aí quando eu rodei o programa as posições dos pilotos não se davam mais de acordo com a IA.

Mesmo colocando em um determinado piloto Int(10000 * Rnd) + 1, e em todos os outros Int(1 * Rnd) + 1, não influenciava em nada.

hum... você sabe debugar o codigo?? tipo, você quer acompanhar o que acontece a cada linha que o vb executa de codigo.

por exemplo, você quer saber o que acontece a cada linha depois do clique do botao. então no codigo, posicione o cursor na primera linha e aperta F9. ela vai mudar de cor. ai quando você rodar o programa (F5), assim que chegar nessa determinada linha, a execucao vai pausar.

apertando F8, você faz com que ele execute a linha atual e já pause automaticamente depois pra que você veja o resultado do que foi processado. F5 de novo volta o programa pra execucao normal.

mas com a aplicacao pausada, você pode ver o valor de qualquer variavel ou controle no form que esteja sendo executado.

exemplo, pare o mouse em cima de x(0).AI no codigo, que uma janelinha vai abrir mostrando o valor que esta guardado nela.

ou ainda, se você apertar Ctrl + G, vai aparecer a Immediate Window. la você pode executar qualquer codigo e pode ler valores das variaveis existentes.

exemplo, digite:

? x(0).AI

e aperta Enter.

ele vai mostrar pra você o valor de x(0).AI.

desse jeito você pode acompanhar linha por linha o que o vb esta fazendo e pode ver se os valores que aparecem são aqueles que você espera ou não.

Link para o comentário
Compartilhar em outros sites

  • 0

Mas você conseguiu fazer a pontuação, se é que tentou?

Tipo, o programa ta rodando normal.

Mas o que eu quis dizer foi que, depois que coloquei os nomes no Form_Load, o piloto que tinha chances mínimas de vencer a corrida, ficou com as mesmas chances que o piloto que tem a maior IA. Na verdade, é como se todos os pilotos tivessem IA's idênticas. E não era pra ser assim. Era para, o Alonso por exemplo, ter mais chances de ganhar do que o Barrichello.

Entendeu?

Mas valeu aí, e valeu pelas dicas para acompanhar o que acontece em cada linha.

^_^

Link para o comentário
Compartilhar em outros sites

  • 0

entendi, é no código você randomiza de acordo com o indice e não com o piloto. e como os pilotos trocam de indice as chances de cada um mudam.

então tipo crie uma propriedade a mais no seu tipo que sera o multiplicador. e carregue elas também no seu form_load.

ai no clique do botao, multiplique por ela. tipo assim:

Private Sub Form_Load()
     x(0).Nome = "Alonso"
     x(0).Chance = 99
     x(1).Nome = "Hamilton"
     x(1).Chance = 100
     ....etc
     x(19).Nome = "Davidson"
     x(19).Chance = 27
End Sub

Private Sub cmdOK_Click()
     Randomize
     x(0).AI = Int(x(0).Chance * Rnd) + 1
     x(1).AI = Int(x(1).Chance * Rnd) + 1
     x(2).AI = Int(x(2).Chance * Rnd) + 1
     x(3).AI = Int(x(3).Chance * Rnd) + 1
     ...etc
End Sub[/code]

entendeu?? assim a chance fica atrelada ao piloto. e alias, você pode fazer essa parte do random com uma linha so com um For, em vez de por uma linha pra cada um, já que o codigo é igual pra todos, so muda o indice.

EDITADO:

cara, hora de dormi, que amanha acordo cedo (meio dia). se ficar mais algum problema, vejo amanha beleza?? falou

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

  • 0

Vai dormir cara!

hahaha

Que isso, não fica acordado por minha causa não.

Tá louco.

Eu só estou acordado por que estou de férias.

Mas quarta mesmo já volto às aulas.

Muito obrigado mesmo.

Até mais.

EDIT:

Eu sei que você não pode responder agora, e nem precisa.

Mas eu já vou deixar minha dúvida aqui.

Agora as posições estão funcionando certinho, depois que você me instruiu no ultimo post.

Porém, as pontuações ainda não funcionam do jeito que deveriam.

Como eu disse antes, elas não são somadas corretamente, ou não são atribuídas ao piloto certo. O que eu sei é que se o piloto chega, por exemplo, em 1° e depois em 2°, a soma da pontuação não fica igual a 18, que seria a correta, fica um número completamente diferente, e nunca o mesmo número.

Bem, é isso, se você souber como resolver, me ensina por favor.

No mais, valeu por tudo.

Até.

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

  • 0

é, minhas aulas comecaro hj mesmo, mas como estudo a noite não preciso dormi cedo (muito menos acordar cedo).

então, tem certeza que não ta somando certo a pontuacao?? porque eu baxei o seu projeto no rapidshare e fiz aquela alteracao que comentei de adicionar o campo chance. ai o Form_Load ficou assim:

Private Sub Form_Load()
     x(0).Nome = "Alonso"
     x(1).Nome = "Hamilton"
     x(2).Nome = "Massa"
     x(3).Nome = "Raikkonen"
     x(4).Nome = "Heidfield"
     x(5).Nome = "Kubica"
     x(6).Nome = "Fisichella"
     x(7).Nome = "Kovalainen"
     x(8).Nome = "Rosberg"
     x(9).Nome = "Wurz"
     x(10).Nome = "Coulthard"
     x(11).Nome = "Webber"
     x(12).Nome = "Schumacher"
     x(13).Nome = "Trulli"
     x(14).Nome = "Button"
     x(15).Nome = "Barrichello"
     x(16).Nome = "Liuzzi"
     x(17).Nome = "Speed"
     x(18).Nome = "Sato"
     x(19).Nome = "Davidson"
    
     x(0).Chance = 99
     x(1).Chance = 100
     x(2).Chance = 95
     x(3).Chance = 96
     x(4).Chance = 67
     x(5).Chance = 70
     x(6).Chance = 65
     x(7).Chance = 55
     x(8).Chance = 58
     x(9).Chance = 45
     x(10).Chance = 60
     x(11).Chance = 60
     x(12).Chance = 55
     x(13).Chance = 50
     x(14).Chance = 53
     x(15).Chance = 47
     x(16).Chance = 40
     x(17).Chance = 25
     x(18).Chance = 30
     x(19).Chance = 27
End Sub[/code] ai pra testar se a pontuacao estava somando, pus pra mostrar a pontuacao junto. o codigo do clique ficou assim:
[code]Private Sub cmdOK_Click()
Dim i As Integer
     Randomize
    
     For i = 0 To 19
        x(i).AI = Int(x(i).Chance * Rnd) + 1
     Next
    
     SelectionSort x(), 19
    
     x(19).Pontos = x(19).Pontos + 10
     x(18).Pontos = x(18).Pontos + 8
     x(17).Pontos = x(17).Pontos + 6
     x(16).Pontos = x(16).Pontos + 5
     x(15).Pontos = x(15).Pontos + 4
     x(14).Pontos = x(14).Pontos + 3
     x(13).Pontos = x(13).Pontos + 2
     x(12).Pontos = x(12).Pontos + 1
        
     lbl1.Caption = x(19).Nome & " - " & x(19).Pontos
     lbl2.Caption = x(18).Nome & " - " & x(18).Pontos
     lbl3.Caption = x(17).Nome & " - " & x(17).Pontos
     lbl4.Caption = x(16).Nome & " - " & x(16).Pontos
     lbl5.Caption = x(15).Nome & " - " & x(15).Pontos
     lbl6.Caption = x(14).Nome & " - " & x(14).Pontos
     lbl7.Caption = x(13).Nome & " - " & x(13).Pontos
     lbl8.Caption = x(12).Nome & " - " & x(12).Pontos
     lbl9.Caption = x(11).Nome & " - " & x(11).Pontos
     lbl10.Caption = x(10).Nome & " - " & x(10).Pontos
     lbl11.Caption = x(9).Nome & " - " & x(9).Pontos
     lbl12.Caption = x(8).Nome & " - " & x(8).Pontos
     lbl13.Caption = x(7).Nome & " - " & x(7).Pontos
     lbl14.Caption = x(6).Nome & " - " & x(6).Pontos
     lbl15.Caption = x(5).Nome & " - " & x(5).Pontos
     lbl16.Caption = x(4).Nome & " - " & x(4).Pontos
     lbl17.Caption = x(3).Nome & " - " & x(3).Pontos
     lbl18.Caption = x(2).Nome & " - " & x(2).Pontos
     lbl19.Caption = x(1).Nome & " - " & x(1).Pontos
     lbl20.Caption = x(0).Nome & " - " & x(0).Pontos
          
End Sub

da uma olhada nos resultados. depois do primeiro clique:

post-9195-1185927726_thumb.jpg

e agora, depois do segundo:

post-9195-1185927734_thumb.jpg

da primeira vez o Massa foi o primeiro colocado, certo?? 10 pontos somados pra ele. ai na segunda vez, ele foi o quarto. mais 5 somados. 10 + 5 = 15, que é o que aparece da segunda vez, ta certinho. e com todos os outros me parece que também esta certo.

Link para o comentário
Compartilhar em outros sites

  • 0

Nossa, mas também, eu tava fazendo completamente diferente do que você fez haha.

Agora funcionou legal aqui.

Vou ver se consigo passar as pontuações para um form diferente agora, e ordenar da maior para a menor.

Valeu!

EDIT:

Ih! Mas aí quando eu tento passar a pontuação para outro form, volta a dar o mesmo problema.

Os números ficam "loucos", não aumentam como deviam, e as vezes até mesmo diminuem.

Por exemplo:

Eu coloqueio, no mesmo form, uma label (Label2).

Aí na última linha do evento Click eu fiz

Label2.Caption = x(19).Pontos

E dá esse problema que eu falei acima.

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

  • 0

Eu criei o Form2 com 20 Labels.

E o código ta assim;

Private Sub cmdOK_Click()
Dim i As Integer
     Randomize
    
     For i = 0 To 19
        x(i).AI = Int(x(i).Chance * Rnd) + 1
     Next
    
     SelectionSort x(), 19
    
     x(19).Pontos = x(19).Pontos + 10
     x(18).Pontos = x(18).Pontos + 8
     x(17).Pontos = x(17).Pontos + 6
     x(16).Pontos = x(16).Pontos + 5
     x(15).Pontos = x(15).Pontos + 4
     x(14).Pontos = x(14).Pontos + 3
     x(13).Pontos = x(13).Pontos + 2
     x(12).Pontos = x(12).Pontos + 1
        
     lbl1.Caption = x(19).Nome & " - " & x(19).Pontos
     lbl2.Caption = x(18).Nome & " - " & x(18).Pontos
     lbl3.Caption = x(17).Nome & " - " & x(17).Pontos
     lbl4.Caption = x(16).Nome & " - " & x(16).Pontos
     lbl5.Caption = x(15).Nome & " - " & x(15).Pontos
     lbl6.Caption = x(14).Nome & " - " & x(14).Pontos
     lbl7.Caption = x(13).Nome & " - " & x(13).Pontos
     lbl8.Caption = x(12).Nome & " - " & x(12).Pontos
     lbl9.Caption = x(11).Nome & " - " & x(11).Pontos
     lbl10.Caption = x(10).Nome & " - " & x(10).Pontos
     lbl11.Caption = x(9).Nome & " - " & x(9).Pontos
     lbl12.Caption = x(8).Nome & " - " & x(8).Pontos
     lbl13.Caption = x(7).Nome & " - " & x(7).Pontos
     lbl14.Caption = x(6).Nome & " - " & x(6).Pontos
     lbl15.Caption = x(5).Nome & " - " & x(5).Pontos
     lbl16.Caption = x(4).Nome & " - " & x(4).Pontos
     lbl17.Caption = x(3).Nome & " - " & x(3).Pontos
     lbl18.Caption = x(2).Nome & " - " & x(2).Pontos
     lbl19.Caption = x(1).Nome & " - " & x(1).Pontos
     lbl20.Caption = x(0).Nome & " - " & x(0).Pontos
     
     Form2.Show
     
     Form2.Label1.Caption = x(19).Pontos
     Form2.Label2.Caption = x(18).Pontos
     Form2.Label3.Caption = x(17).Pontos
     Form2.Label4.Caption = x(16).Pontos
     Form2.Label5.Caption = x(15).Pontos
     Form2.Label6.Caption = x(14).Pontos
     Form2.Label7.Caption = x(13).Pontos
     Form2.Label8.Caption = x(12).Pontos
     Form2.Label9.Caption = x(11).Pontos
     Form2.Label10.Caption = x(10).Pontos
     Form2.Label11.Caption = x(9).Pontos
     Form2.Label12.Caption = x(8).Pontos
     Form2.Label13.Caption = x(7).Pontos
     Form2.Label14.Caption = x(6).Pontos
     Form2.Label15.Caption = x(5).Pontos
     Form2.Label16.Caption = x(4).Pontos
     Form2.Label17.Caption = x(3).Pontos
     Form2.Label18.Caption = x(2).Pontos
     Form2.Label19.Caption = x(1).Pontos
     Form2.Label20.Caption = x(0).Pontos

End Sub

EDIT:

É descobri aqui o que tava acontecendo, e já resolvi.

Mas agora eu não to conseguindo ordenar as pontuações na segunda página.

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...