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
Não sei por que, mas quando eu compacto a pasta do jogo aqui no winrar, ta ficando com tamanho de 681Kb, enquanto quando eu compacto em casa, fica uns 40Kb.

é por causa da imagem q você pos no picturebox do form do circuito q tem 600KB. se você olhar vai ver q é o Circuito.frx q sozinho dá 600K e ai como as imagens são poco compactadas pelos programas q compactam arquivos, continua com 600K.

mano a imagem é branca, filtra ela ai no fireworks, ou diminui o tamanho do canvas pro tamanho da picturebox, da pra dexa com uns 10K.

quanto aos otros problemas vo ve se da pra ver esse fim de samana.

Link para o comentário
Compartilhar em outros sites

  • 0
é por causa da imagem q você pos no picturebox do form do circuito q tem 600KB. se você olhar vai ver q é o Circuito.frx q sozinho dá 600K e ai como as imagens são poco compactadas pelos programas q compactam arquivos, continua com 600K.

mano a imagem é branca, filtra ela ai no fireworks, ou diminui o tamanho do canvas pro tamanho da picturebox, da pra dexa com uns 10K.

Ah... pff.... sem comentários... valeu

quanto aos otros problemas vo ve se da pra ver esse fim de samana.

Tranquilo, sem pressa.

Link para o comentário
Compartilhar em outros sites

  • 0

o q acontece é q assim q a corrida acaba, você preenche os labels do ultimo circuito.

assim q o form é fechado (quando você chama o Unload Me no clique do botao q vai pra corrida), tudo isso é perdido.

quando você der load de novo no formulario, ele vai carregar um novo formulario com as configuracoes iniciais. ou seja, o label do circuito invisivel e os nomes dos pilotos em branco.

ai você vai mostrar o ultimo circuito, ou seja vai ficar só o ultimo.

pra resolver, cada vez q você abrir o formulario você tem q preenche o ultimo circuito e tb todos os anteriores.

Link para o comentário
Compartilhar em outros sites

  • 0

Sem querer ser chato (o que é bem difícil), mas isso que você disse, eu meio que já sabia.

Acho que não deixei muito claro o que queria.

Eu sei qual é o problema, mas não consegui ver a solução.

Por isso eu disse que é estúpido, por que tenho certeza que assim que corrigir o problema vou lamentar por não ter pensado na solução antes.

Eu tentei algumas coisas antes de te solicitar sua ajuda, e nenhuma delas deu certo.

Não consegui pensar em como corrigir o problema de forma simplificada.

Por isso queria saber se você sabe alguma maneira de fazer isso.

Desculpa por não ter deixado isso claro antes.

Mas é isso aí.

Link para o comentário
Compartilhar em outros sites

  • 0

hum isso não fica guardado em nenhum lugar, tipo o historico das corridas??

então faca um array publico no module e no fim de cada corrida guarde os dados la. alias, pode fazer mais de um array, tipo no caso seriam 2, um pro vencedor e outro pro vice. ou pode fazer uma matriz de duas dimensoes.

ou você podia guardar a string toda num array só e depois separar.

ou ainda, caso você pretenda guardar mais coisas, pode fazer um Type historico com cada campo q você queira guardar e fazer um array desse Type.

Link para o comentário
Compartilhar em outros sites

  • 0

primera coisa, olha q você tem um form Circuito e um type Circuito, os dois co mesmo nome. é bom, mudar isso q pode dar conflito.

ai no type Circuito, ponha uma propriedade a mais pra guardar se já correram no circuito nesse temporada. pode por do tipo Boolean.

ai sempre q você comecar a temporada, deixe todos em os indices, essa propriedade como False.

e sempre q acabar um circutio ponha como True.

na hora de mostrar os vencedores, faca um For e mostre todos os indices q estiverem True.

Link para o comentário
Compartilhar em outros sites

  • 0

Valeu, deu certo.

Mais duas perguntas:

Primeiro, sobre o tamanho do jogo.

Tem um arquivo do projeto, Circuito.frx, que tem tamanho de 650 Kb.

Isso mesmo já tendo deletado aquela imagem que tinha no form Circuito.

Por que isso?

A segunda, é sobre trabalhar com arquivos.txt no VB.

Eu tive ajuda de um membro aqui do fórum mesmo, e já consegui salvar e carregar o conteúdo das Labels, TextBox, etc, do jogo.

O problema é que salvar somente isso não basta. Teria que salvar também o valor das variáveis, até mesmo por que nem todas elas aparecem em Labels e TextBox. Tem como fazer isso?

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

  • 0
Tem um arquivo do projeto, Circuito.frx, que tem tamanho de 650 Kb.

Isso mesmo já tendo deletado aquela imagem que tinha no form Circuito.

Por que isso?

acho q quando você exclui a imagem, no frx ele continua guardando o valor da ultima imagem q você setou no PictureBox. tenta inserir uma outra imagem menor (depois pode exclui-la tb) e veja se não diminui o tamnaho.

O problema é que salvar somente isso não basta. Teria que salvar também o valor das variáveis, até mesmo por que nem todas elas aparecem em Labels e TextBox. Tem como fazer isso?

tem como fazer isso sim, mas ai você teria q montar um padrão do arquivo q o seu programa consiga ler.

por exemplo, você poe os valores das variaveis numa ordem q você define separadas por tab ou por um caracter especifico. e ai quando você for ler, você já sabe qual é o padrão e le o arquivo baseado nisso.

nesse caso ia ser bom você saber mexer bem com as funcoes de manipulacao de string como Left(), Right(), InStr(), Replace(), mas principalmente nesse caso, acredito q as funcoes Split() e/ou Mid() seriam as mais utilizadas.

claro q tem q ver q se o arquivo txt fica jogado la na pasta do jogo (ou em qualquer outra pasta) e ai o cara pode ir la, abrir e editar como quiser. tudo bem q ele não vai saber o padrão q você inventou, mas dependendo pode não ser dificil dele descobrir e ai ele pode alterar os dados, podendo roubar no jogo ou mesmo fazer coisas q seriam impossivel (e, é claro dar uns pau fudido no jogo).

bom mas como esse é o seu primero jogo, você ta so comecando e aprendendo, não se é sua intencao fazer uma coisa perfeita, mas talvez você não teja ligando muito pra essa parte da seguranca de inicio.

mas se tiver afim de fazer essa parte "profissionalmente", tem mtos modos de fazer, acho q já ate te passei esse tópico onde discutimos isso: http://scriptbrasil.com.br/forum/index.php?showtopic=99421

tem a opcao do arquivo binario e da criptografia e etc. ou tb você pode inventar uma forma de fazer os dois juntos (gravar os dados criptografados em arquivo binario). no fundo não é dificil, é so saber como funciona e ter um poco de imaginacao.

Link para o comentário
Compartilhar em outros sites

  • 0

Hmm... valeu cara.

Vou dar uma olhada nesse link que você me passou.

EDIT:

Você sabe de algum tutorial que ensina a fazer isso que eu te perguntei? Sem ser aquele do macoratti (é assim que escreve?), por que ele não ensina a salvar o valor das variáveis, se não me engano.

Por que olhando somente esse link que você me passou fica difícil, já que não tenho absolutamente nenhuma lógica de programação.

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

  • 0
Você sabe de algum tutorial que ensina a fazer isso que eu te perguntei? Sem ser aquele do macoratti (é assim que escreve?), por que ele não ensina a salvar o valor das variáveis, se não me engano.

mas é exatamente o q ele te falou no otro tópico:

A sintaxe para gravar em um arquivo texto é a seguinte:

Dim f As Long

Open Arquivo For Output As f
Print f, Text1.Text
Close f[/code]

só q o texto não precisa vir de um TextBox, você pode por o q quiser no lugar do Text1.Text, desde q seja uma String, ou q possa ser diretamente convertido pra String.

só q o print ele escreve o text e printa um CrLf (quebra de linha) junto. se você quiser por tudo na mesma linha, é só concatenar numa outra variavel string e printar ela.

e você pode usar o comando Print qtas vezes quiser antes de fechar o arquivo.

ai como eu disse, quando você for ler, você tem q saber qual a localizacao de cada variavel.

Link para o comentário
Compartilhar em outros sites

  • 0

Hmm... entendi.

Sobre essa opção de arquivos binários ou criptografados e tal, realmente, como você disse, não ligo muito em tornar o jogo perfeito. Seria interessante impossibilitar, ou ao menos dificultar, que o jogador roube no jogo. Mas incialmente eu só quero aprender a salvar os valores. E por isso tenho uma porção de dúvidas. haha

1° Se eu começar a fazer o método de salvar o jogo agora em arquivos .txt, mais tarde tem como eu mudar facilmente para arquivos binários ou criptografados?

2° Tem algum tópico aqui mesmo no fórum ou algum tutorial que ensine a fazer esse método de salvar diretamente em arquivos binários ou criptografados? Por que aquele link que você me passou, do seu tópico, o Graymalkin não chegou a te responder, e não tem uma explicação sobre como fazer isso.

3° Se eu colocar um For no código, da seguinte forma:

CommonDialog1.CancelError = True
CommonDialog1.Filter = "arquivo de texto(*.txt) | *.txt"
CommonDialog1.ShowSave
Open CommonDialog1.FileName For Output As #1
For j = 0 to 10
     Print #1, xEquipe(j).nome
Next
Close #1

vai dar certo?

4° Eu tinha mais dúvidas, mas esqueci. huahahaha

Não precisa responder tudo de uma vez.

Valeu.

Até mais.

Link para o comentário
Compartilhar em outros sites

  • 0
Sobre essa opção de arquivos binários ou criptografados e tal, realmente, como você disse, não ligo muito em tornar o jogo perfeito. Seria interessante impossibilitar, ou ao menos dificultar, que o jogador roube no jogo. Mas incialmente eu só quero aprender a salvar os valores.

é, eu recomendaria mesmo q você deixasse essa parte pra depois.

1° Se eu começar a fazer o método de salvar o jogo agora em arquivos .txt, mais tarde tem como eu mudar facilmente para arquivos binários ou criptografados?

se você dexar o codigo bem estruturado sim.

o esquema é fazer uma sub pra ler e uma pra gravar e pronto.

se você comecar a acessar o txt toda hora no programa (o q, pelo q eu imagino q você va fazer, não seria necessario) ai sim vai dar trampo.

2° Tem algum tópico aqui mesmo no fórum ou algum tutorial que ensine a fazer esse método de salvar diretamente em arquivos binários ou criptografados? Por que aquele link que você me passou, do seu tópico, o Graymalkin não chegou a te responder, e não tem uma explicação sobre como fazer isso.

na verdade não existe tipo um "arquivo criptografado". o q você faria seria você criptografar os dados (a string) e escrever no txt, podendo usar alguma funcao de criptografia existente ou você mesmo fazer a sua.

pra gravar em binario, acho q a sintaxe é tipo Open caminho For Binary Access Read As f pra ler e Open caminho For Binary Access Write As f pra escrever. faz uma busca por ai q você deve achar exemplos.

quando ao outro post, fiz um mte de pergunta la, olhei la e nem eu entendo mais o q eu mesmo escrevi la, mas eu tava me confundindo com os negocio de variavel, na verdade não tem muito segredo escrever em binario não.

ve se você acha algum exemplo por ai, qualquer coisa posta ai q eu ajudo ae.

3° Se eu colocar um For no código, da seguinte forma:

CommonDialog1.CancelError = True
CommonDialog1.Filter = "arquivo de texto(*.txt) | *.txt"
CommonDialog1.ShowSave
Open CommonDialog1.FileName For Output As #1
For j = 0 to 10
     Print #1, xEquipe(j).nome
Next
Close #1[/code]

vai dar certo?

vai.

4° Eu tinha mais dúvidas, mas esqueci. huahahaha

quando lembra posta ae então.

Link para o comentário
Compartilhar em outros sites

  • 0

kuroi, você pode dar uma olhadinha no projeto denovo, por favor?

Eu estou fazendo um Frame no Form MenuEquipe, que mostra o piloto vencedor e a equipe vencedora de cada temporada.

Pra isso, eu fiz um type:

Type Campeonato
    CampPiloto As String
    CampEquipe As String
    ano As Integer
    conclusão As Boolean
End Type
Declarei no módulo, as variáveis:
Public xCampeonato(19) As Campeonato
Public nCamp
setando nCamp = 0 Declarei a função:
Public Function Campeão(ByRef Vetor() As Campeonato, tam)
    Dim i, j
    Dim Min
    Dim aux As Campeonato

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

         aux = Vetor(i)
         Vetor(i) = Vetor(Min)
         Vetor(Min) = aux
         
    Next i
End Function
que vai ordenar as temporadas no Frame da maior à menor. Ao fim de cada temporada os valores são alterados:
xCampeonato(nCamp).CampPiloto = xPiloto(21).nome
xCampeonato(nCamp).CampEquipe = xEquipe(10).nome

xCampeonato(nCamp).ano = temporada
xCampeonato(nCamp).conclusão = True
    
If nCamp < 19 Then
    nCamp = nCamp + 1
Else
    nCamp = 0
End If
O nCamp só varia até o número 19 por que quero mostrar apenas os campeõs das últimas 20 temporadas. E finalmente, no Form MenuEquipe eu fiz:
'_____________Histórico de Campeões______________

Campeão xCampeonato(), 19

For d = 0 To 19
    If xCampeonato(d).conclusão = True Then
        Me.Controls("lblTemporada" & (20 - d)).Caption = xCampeonato(d).ano
        Me.Controls("lblCampPiloto" & (20 - d)).Caption = xCampeonato(d).CampPiloto
        Me.Controls("lblCampEquipe" & (20 - d)).Caption = xCampeonato(d).CampEquipe
    End If
Next

Até a 10° temporada, tudo funciona perfeitamente.

Depois dela, dá o erro.

Eu não sei bem o que acontece, mas é como se não desse continuidade à apresentação dos nomes dos pilotos e das equipes nas Labels. Não dá pra explicar direito, só vendo mesmo.

Pra facilitar, setei o final da temporada com apenas 1 corrida.

E pra ver o problema, é só clicar no botão Histórico de Campeões, no MenuEquipe.

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

  • 0
Declarei no módulo, as variáveis:

Public xCampeonato(19) As Campeonato
Public nCamp[/code] aaaa você corrigiu aqui... muito esperto ahhahahaah o problema ta nessas linhas
[code]xCampeonato(nCamp).CampPiloto = xPiloto(21).nome
    xCampeonato(nCamp).CampEquipe = xEquipe(10).nome
    xCampeonato(nCamp).ano = temporada
    xCampeonato(nCamp).conclusão = True

troque nCamp por 0.

não vi o q você faz com essa variavel nCamp mas imagino q você teja somando 1 nela a cada campeonato pra contar e qual temporada esta.

nesse caso, você comeca na 1, depois vai pra 2, 3 e etc. mas acontece q quando você chama a funcao Campeao, ele ordena de ponta cabeca. ou seja, nos xCampeonato os valores vao estar a partir do 19 pra baixo.

ou seja, quando você chegar na 10ª temporada, o nCamp vai chgar em 10, mas o indice 10 já vai estar preenchido. ai você vai estar apagando a informacao de uma das temporadas e pondo outras no lugar. e se você continuar avancando as coisas só vai piorar.

como o 0 só vai se preenchdo na ultima temporada, ponha 0 no lugat de nCamp.

Link para o comentário
Compartilhar em outros sites

  • 0
aaaa você corrigiu aqui... muito esperto ahhahahaah
Corrigi o que?

Troquei 'funções' por 'variáveis'?

huahahahaha

Eu tinha feito esse erro sem querer.

Pensei em escrever variáveis e escrevi funções, e só agora vi o erro.

Aí eu pensei: "Ih! É melhor eu trocar isso antes que o kuroi veja e eu passe vergonha"

huahauhauhauhahahaha

troque nCamp por 0.

não vi o q você faz com essa variavel nCamp mas imagino q você teja somando 1 nela a cada campeonato pra contar e qual temporada esta.

nesse caso, você comeca na 1, depois vai pra 2, 3 e etc. mas acontece q quando você chama a funcao Campeao, ele ordena de ponta cabeca. ou seja, nos xCampeonato os valores vao estar a partir do 19 pra baixo.

ou seja, quando você chegar na 10ª temporada, o nCamp vai chgar em 10, mas o indice 10 já vai estar preenchido. ai você vai estar apagando a informacao de uma das temporadas e pondo outras no lugar. e se você continuar avancando as coisas só vai piorar.

como o 0 só vai se preenchdo na ultima temporada, ponha 0 no lugat de nCamp.

Entendi, deu certinho.

Valeu.

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

  • 0
Eu tinha feito esse erro sem querer.

Pensei em escrever variáveis e escrevi funções, e só agora vi o erro.

Aí eu pensei: "Ih! É melhor eu trocar isso antes que o kuroi veja e eu passe vergonha"

huahauhauhauhahahaha

hahah é um saco esses maluco chatos q ficam reparando nos erros dos otro, fala a verdade hahahaah

Link para o comentário
Compartilhar em outros sites

  • 0
hahah é um saco esses maluco chatos q ficam reparando nos erros dos otro, fala a verdade hahahaah

Faz parte.

Ainda bem que eu tenho alguém pra reparar nos meus erros.

Cara, eu sei que é idiota, mas como fiquei muito tempo sem mecher no projeto, e só voltei recentemente, tem algumas coisas que eu não entendo por que fiz de tal maneira antes.

E eu estou fazendo uma coisa no form Corrida, e me deparei com um trecho do código que eu não me lembro por que fiz desse jeito.

E mesmo o jogo sendo teoricamente meu, você com certeza pode me tirar essa dúvida melhor do que se eu tentasse entender sozinho. Olha só:

For i = 0 To 21
    a = Int(xPiloto(i).chance * Rnd) + 1
    xPiloto(i).ultimavolta = ((xCircuito(nCircuito).tempomédio - a) / 100)
    If xPiloto(i).ai > 0 Then
        xPiloto(i).ai2 = Int((xPiloto(i).chance) * Rnd) + 1
        xPiloto(i).ai = xPiloto(i).ai + xPiloto(i).ai2
        xPiloto(i).tempovolta = xPiloto(i).tempovolta + ((xCircuito(nCircuito).tempomédio - xPiloto(i).ai2) / 100)
    End If
    If (Int(xPiloto(i).chance * Rnd) + 1) < (xPiloto(i).ai2 / 133) Then
        xPiloto(i).ai = 0
    End If
Next
Nesse trecho, note as linhas que possuem:
Int(xPiloto(i).chance * Rnd) + 1
Eu fiquei na dúvida se a cada vez que esse comando aparece um novo valor aleatório é gerado, ou o valor permanece o mesmo que foi gerado na primeira vez que esse comando aparece. (???) Eu não sei mesmo por que fiz desse jeito antes, mas agora não me parece tão claro. Na verdade me parece muito errado. E o estranho é que o jogo tá funcionando corretamente. Se eu fizesse assim:
For i = 0 To 21
    a = Int(xPiloto(i).chance * Rnd) + 1
    xPiloto(i).ultimavolta = ((xCircuito(nCircuito).tempomédio - a) / 100)
    If xPiloto(i).ai > 0 Then
        xPiloto(i).ai2 = a
        xPiloto(i).ai = xPiloto(i).ai + xPiloto(i).ai2
        xPiloto(i).tempovolta = xPiloto(i).tempovolta + ((xCircuito(nCircuito).tempomédio - xPiloto(i).ai2) / 100)
    End If
    If a < (xPiloto(i).ai2 / 133) Then
        xPiloto(i).ai = 0
    End If
Next

seria mais correto (ou menos errado)?

É isso aí.

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

  • 0

E aí kuroi.

Devia estar pensando que eu tinha desistido do jogo.

E não pensou errado não, eu tinha desistido mesmo, até ontem à noite.

huahahaha

Como eu parei o 'projeto' por causa dos estudos, tava desanimado em voltar a mexer nele.

Mas agora eu passei no vestibular e tenho 1 mês de férias.

Ontem eu abri o VB6 e comecei a 'ler' o script pra tentar relembrar e entender o que eu tinha feito.

E a verdade é que eu não entendi praticamente nada. huahahaha

Mas sei mais ou menos como continuar de onde parei, e quero acabar com isso logo, tirar esse peso da consciência.

Quando eu parei, estava tendo um problema com os valores do tempo de volta dos pilotos.

Eu não consigo explicar muito bem apenas escrevendo, e nem vou exigir que você interprete o que estou tentando dizer.

Vou tentar explicar aos poucos.

Eu estava tentando fazer com que os pilotos tenham uma 'estratégia de corrida'. Inicialmente, eu fiz apenas a opção de PitStop (parada nos boxes para colocar gasolina, esse tipo de coisa). Aparentemente, eu fiz tudo certo, pelo menos é o que eu acreditava.

Primeiro eu fiz o seguinte no Form Corrida:

For j = 0 To UBound(xEquipe)
    b = Int(3 * Rnd) + 1
    If b = 1 Then
        xEquipe(j).PitStop = Int(xCircuito(nCircuito).voltas / 2)
    ElseIf b = 2 Then
        xEquipe(j).PitStop = Int(xCircuito(nCircuito).voltas / 3)
    ElseIf b = 3 Then
        xEquipe(j).PitStop = Int(xCircuito(nCircuito).voltas / 4)
    End If
    xEquipe(j).Desgaste = xEquipe(j).PitStop / 100
    xEquipe(j).PitStop2 = xEquipe(j).PitStop
Next
Isso define o número de paradas que cada piloto pode fazer na corrida, que varia de 1 à 3. Por exemplo: se a corrida tem 70 voltas. Se a variável b = 1, então A volta em que o piloto deve parar é 70/2 = 35. Entendeu? Bem, depois, no mesmo Form e no Private Sub Timer1_Timer(), fiz o seguinte:
If (xCircuito(nCircuito).voltas - (tempo + 1)) > 10 Then
    For j = 0 To UBound(xEquipe)
        If (tempo + 1) = xEquipe(j).PitStop Then
            For i = 0 To UBound(xPiloto)
                If xPiloto(i).ai > 0 Then
                    If xPiloto(i).equipe = xEquipe(j).nome Then
                        a = 30 - (Int(xEquipe(j).mecânicos * Rnd) + 1)
                        xPiloto(i).ai = xPiloto(i).ai + (10 * a)
                        xPiloto(i).tempovolta = xPiloto(i).tempovolta + a
                        xPiloto(i).TempoPit = xPiloto(i).ultimavolta + a
                        xEquipe(j).PitStop = xEquipe(j).PitStop + xEquipe(j).PitStop2
                        xEquipe(j).PitStopFim = True
                    End If
                End If
            Next
        End If
    Next
End If

Resumidamente, essa parte procura quando chegou a hora do piloto fazer o PitStop.

Quando está na hora de fazer o PitStop, é gerado um número aleatório com a variável xEquipe(j).mecânicos.

O valor dessa variável pode variar entre 1 e 5, e quanto maior melhor, já que o número aleatório gerado através dela é subtraído de 30.

30 - número aleatório = tempo total do PitStop.

Esse tempo total é somado ao tempo total do piloto.

É aí que dá o erro, e eu imagino (tenho quase certeza), que é por causa das seguintes linhas:

xPiloto(i).ai = xPiloto(i).ai + (10 * a)

xPiloto(i).tempovolta = xPiloto(i).tempovolta + a

xPiloto(i).TempoPit = xPiloto(i).ultimavolta + a

Se você se lembra, a ordem dos pilotos na corrida é determinada pela variável xPiloto().ai.

Eu sei que o erro ta aí, sei a razão desse erro, mas não entendo por que ele acontece, e muito menos como resolvê-lo.

Bem, o erro que dá é o seguinte:

errof1uk3.jpg

Note que a posição dos pilotos fica completamente fora de ordem, de acordo com o tempo final de cada um.

Além de que, em alguns casos, como o do piloto Kovalainen na imagem, o tempo final fica completamente maluco.

Basicamente, é isso.

Eu sei que á absurdo eu pedir pra você tentar entender qual é o problema, já que para isso, tem que relembrar de tudo o que foi feito até agora, sendo que nem eu mesmo consigo fazer isso.

Mas se estiver disposto a ajudar, ficarei agradecido.

Eu decidi não passar o Project para você até receber o seu conssentimento.

Então é isso.

Até mais.

Link para o comentário
Compartilhar em outros sites

  • 0

opa você passou onde em??

na verdade achei q você já tinha resolvido todos os problemas e finalizado o projeto ehehhehe

ai tipo, como você pode ver, estou viajando e não tenho acesso a internet todos os dias, então pode mandar la sim, se eu não tiver o codigo todo fica dificil de entender.

mas tipo, antes do final do mes não tenho certeza de quando vo conseguir olhar q to fazendo tratamento medico aqui na cidade, então não sei quando volto.

mas enqto isso vai tentando ai, quando eu tiver de volta, te aviso e ai vo te ajudando, agora não ta dando pra acessar o forum com frequencia.

quanto a esse erro, agora fica dificil de lembrar, mas tipo, de uma olhada nos posts antigos desse tópico q acho q pode ser parecido com outros problemas q já tivemos. quando eu tiver de volta aqui, ai você me manda o projeto se ainda tiver dificuldades, falou.

Link para o comentário
Compartilhar em outros sites

  • 0

Opa!

Passei na PUC-MG.

Não é grande coisa, eu sei. hahaha

Mas ainda tem UFMG no fim do ano.

Quanto ao jogo, milagrosamente, consegui resolver o problema.

Impressionante! Da última vez eu fiquei dias quebrando a cabeça, sem sucesso.

De qualquer maneira, valeu.

Se precisar eu mando o projeto pra você então. =p

E boa sorte com esse tratamento médico que está fazendo.

Não sei o que é, mas espero que não seja nada grave.

Até mais.

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...