
Darknnez
Membros-
Total de itens
216 -
Registro em
-
Última visita
Tudo que Darknnez postou
-
Bem, então retomando... Espero que não tenha nenhum problema mesmo. Mas se tiver, e tiver que fechar o tópico, não tem erro não, tudo bem pra mim. Vou só colar o que eu ia postar antes do tópico ser fechado ------------------------------------------------------------------------------------------- Eu até te entendo, mas e fosse para mudar, teria que refazer o programa todo de uma vez. O projeto todo está uma gambiarra. Cada hora eu invento uma coisa nova pra colocar e tenho que sair alterando tudo, todo o código. Mas voltanto aqui, eu devo adicionar o código na seguinte função, não é?: Public Function ClassificaçãoEquipe2(ByRef Vetor() As equipe, tam) Dim i, j, h, k Dim min Dim aux As equipe Dim aux1 As Motor 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 = xMotor(i) xMotor(i) = xMotor(min) xMotor(min) = aux1 Next i End Function E se for isso mesmo, não deu certo. Em um dos testes aqui, a Toyota, que tem o xMotor(3), comprou o xMotor(2), sendo que deveria existir apenas a possibilidade dela compra o xMotor(4). E nessa mesma ocasião, a McLaren ficou sem motor, acho. Só sei que no local onde deveria aparecer o nome do motor, não apareceu nada, ficou em branco.
-
Nenhum outro jeito diferente? Eu até entendi como evitar aquele erro, mas o problema é que eu teria que mudar muita coisa no programa. Por exemplo: Para mostrar o nome do motor de cada equipe, eu fiz: For i(0) = 0 To 7 For j = 0 To UBound(xEquipe) If xOpção = xEquipe(j).nome Then If xEquipe(j).Motor = xMotor(i(0)).nome Then lblMotor.Caption = xEquipe(j).Motor & " - " & xMotor(i(0)).potencia End If End If Next Next
-
Hmm.. é provável. Mas como eu faria para, evitar isso? Por que a Função que Ordena é chamada a cada corrida.
-
Pensando bem, eu nem precisava ter colocado essa linha For nMotor(j) = 0 To 7 Se você for ver direito, tirando essa linha, deveria ter dado certo. Mas não deu. O código ficou assim: No Module1 Public nMotor(21) As Integer Dentro do Private Sub_Main nMotor(0) = 6 nMotor(1) = 7 nMotor(2) = 5 ........... nMotor(10) = 0 No MenuEquipe For j = 0 To UBound(xEquipe) If h(j) = 1 Then If (nMotor(j) + 1) > 7 Then h(j) = 0 ElseIf 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 End If End If Next Por que será que ainda ta dando errado?
-
h é uma variável que gera um número aleatório. nMotor é o número do motor. Aí ficou assim: Motor(número do motor(de qual equipe) + 1) Motor(nMotor(j) + 1) Se h for igual a 1 então ___Se finanças da Equipe(j) for maior que custo do Motor(nMotor(j) + 1) então ______Equipe(j) compra Motor(nMotor(j) + 1) Ou seja, se o número gerado aleatoriamente for 1, existe a possibilidade da equipe comprar o motor. Mas ela só vai comprar se suas finanças forem maior que o custo do motor. Esse motor que ela pode comprar, é o número do motor que ela já tem, mais 1, ou seja, o próximo motor da lista (pior motor = 1; melhor motor = 7) Deu pra entender?
-
Resident Evil Rpg Versão 2.0 Definitiva
tópico respondeu ao evilbiel de Darknnez em Avaliações de Trabalhos
Que isso cara, parabéns! 120mil downloads é realmente muita coisa. Deve ser gratificante depois de tanto esforço. Já tentei mexer com o RPG Maker algumas vezes, mas nunca tive paciência para começar um jogo e levá-lo a sério. E mesmo se o tivesse, não teria atingido um nível tão alto quanto o seu. Mais uma vez, parabéns. -
Até o fim desse tópico você ainda vai aprender a gostar de F1 hahahahaha Bem, voltando ao projeto, eu estou tentando fazer com que, após cada temporada, as equipes controladas pelo computador possam comprar um motor diferente e melhor. Aí eu fiz da seguinte forma Se a EquipeX tiver dinheiro suficiente para comprar o primeiro motor melhor que o que ela já tem, ela compra. No Form MenuEquipe If etapa = 4 Then Randomize For j = 0 To UBound(xEquipe) h(j) = Int(2 * Rnd) + 1 Next For j = 0 To UBound(xEquipe) For nMotor(j) = 0 To 7 If h(j) = 1 Then If (nMotor(j) + 1) > 7 Then h(j) = 0 ElseIf 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 End If End If Next Next End If E defini os valores de nMotor para cada equipe no módulo: nMotor(0) = 0 nMotor(1) = 1 nMotor(2) = 5 ............. nMotor(10) = 7 De acordo com o motor que cada equipe tem. Mas não sei por que, uma equipe qualquer, a BMW por exemplo, não compra necessariamente o primeiro motor melhor que o dela, as vezes ela pula o motor seguinte, e compra o segundo melhor que o dela, e isso vale para cada equipe. Tem como corrigir?
-
Seria certo se uma equipe pudesse ter apenas um piloto. haha. Mas como na F1 cada equipe sempre tem 2 pilotos, seria talvez um pouco injusto definir como critério de desempate qual equipe teve um único piloto melhor colocado. Valeu!
-
Olha só o que eu fiz, e acho que deu certo, Criei um campo novo no Type Equipe: desempate As Variant Um campo novo no Type Piloto: pontos2 As Integer Mudei o SomaPontos: Public Sub SomaPontos(i As Integer, pontos As Integer, pontos2 As String) Dim j As Integer xPiloto(i).pontos = xPiloto(i).pontos + pontos xPiloto(i).pontos2 = xPiloto(i).pontos2 + pontos2 For j = 0 To UBound(xEquipe) If xEquipe(j).nome = xPiloto(i).equipe Then xEquipe(j).pontuaçao2 = xEquipe(j).pontuaçao2 + pontos xEquipe(j).desempate = xEquipe(j).desempate + pontos2 Exit For End If Next End Sub No Form Corrida, adicionei o valor para pontos2: SomaPontos 21, 10, 10 SomaPontos 20, 8, 8 SomaPontos 19, 6, 6 SomaPontos 18, 5, 5 SomaPontos 17, 4, 4 SomaPontos 16, 3, 3 SomaPontos 15, 2, 2 SomaPontos 14, 1, 1 SomaPontos 13, 0, 0.14 SomaPontos 12, 0, 0.13 SomaPontos 11, 0, 0.12 SomaPontos 10, 0, 0.11 SomaPontos 9, 0, 0.1 SomaPontos 8, 0, 0.09 SomaPontos 7, 0, 0.08 SomaPontos 6, 0, 0.07 SomaPontos 5, 0, 0.06 SomaPontos 4, 0, 0.05 SomaPontos 3, 0, 0.04 SomaPontos 2, 0, 0.03 SomaPontos 1, 0, 0.02 SomaPontos 0, 0, 0.01 E denovo no Module1, fiz com que a função ordenasse pelo valor do campo desempate, e não do pontuação2: Public Function ClassificaçãoEquipe2(ByRef Vetor() As equipe, tam) Dim i, j, h, k Dim min Dim aux As equipe 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 Next i End Function Só observando que eu fiz com que, a soma do pontos2 dos pilotos que não pontuaram na corrida, nunca seja maior do que a soma do pontos2 dos pilotos que pontuaram. A questão é, será que isso vai dar certo sempre? Pelo menos nas minhas tentativas aqui, deu certo.
-
Tem como eu fazer com que uma função ordene dois valores diferentes para cada equipe? Por exemplo, na função ClassificaçãoEquipe2, está ordenando pela pontuação2. Tem como fazer com que além da pontuação2, ordene também pelo pontos2? Isso facilitaria um pouco, acho.
-
Olha só, to com um problema. Se, por exemplo, os pilotos da EquipeX chegaram em 12° e 14°, e os pilotos da EquipeY chegaram em 16° e 18°, nenhum dos quatro pontuaram, certo? Ou seja, nenhuma das duas equipes pontuou nessa determinada corrida. Mas teoricamente, é para a EquipeX aparecer na frente da EquipeY no Form que mostra a pontuação de cada equipe na última corrida, já que seus pilotos chegaram na frente dos pilotos da outra equipe. Mas no programa, até agora, nesse mesmo form, as equipes que não pontuaram na última corrida, ou fizeram a mesma pontuação, são ordenados sem essa razão, ou seja, a equipe que merecia aparecer na frente da outra, mesmo que ambas não tenham pontuado, não aparece. Como eu faço pra corrigir isso?
-
Não entendi por que do 7 ao 21. Eu tenho que zerar a AI dos pilotos que não vão participar da segunda etapa, certo? Então eu não teria que colocar: For j = 0 To 5 xPiloto(j).força = 0 xPiloto(j).ai = 0 Next ? EDIT: É, fiz isso agora e parece que deu certo. A não ser que eu não tenha notado algum nome repetido. Valeu
-
É, acho que eu tinha feito isso ontem, mas não salvei. Mas ainda assim, tá repetindo, geralmente um piloto.
-
OK, vou mandar agora Só upar no RapidShare EDIT: Mandei no seu MP. Só um detalhe, como eu estou apenas testando ainda, não apliquei a qualificação no resto do jogo. Então é só rodar o programa, e no MenuEquipe apertar "Qualificação", ignorando o resto do jogo. E no form da qualificação é só apertar primeiro o Command1 e depois que todos os pilotos forem ordenados, apertar o Command2 para ordenar denovo, dessa vez apenas do 16° label pra frente. EDIT2: Ah! Normalmente apenas 1 ou 2 pilotos são repetidos na segunda vez que ordena. É até um pouco difícil de notar, portanto, é só olhar com um pouco de atenção.
-
Mudei o código. Ainda tá dando o mesmo erro, mas o que está agora é só pra representar como funcionaria o sistema de qualificação de F1, com a fase final também. Option Explicit Dim tempo As Variant Dim j As Integer Dim i As Integer Dim h As Integer Private Sub Command1_Click() Randomize For i = 0 To 21 xPiloto(i).ai = Int(xPiloto(i).força * Rnd) + 1 Next Colocação xPiloto(), 21 Timer1.Enabled = True End Sub Private Sub Command2_Click() For j = 0 To 5 xPiloto(j).força = 0 Next For i = 6 To 21 xPiloto(i).ai = Int(xPiloto(i).força * Rnd) + 1 Next For h = 1 To 16 Me.Controls("lbl" & h).Caption = "" Next Colocação xPiloto(), 15 Timer2.Enabled = True End Sub Private Sub Command3_Click() For j = 7 To 11 xPiloto(j).força = 0 Next For i = 12 To 21 xPiloto(i).ai = Int(xPiloto(i).força * Rnd) + 1 Next For h = 1 To 10 Me.Controls("lbl" & h).Caption = "" Next Colocação xPiloto(), 9 Timer3.Enabled = True End Sub Private Sub Timer1_Timer() tempo = tempo + 1 Me.Controls("lbl" & 22 - (tempo - 1)).Caption = xPiloto(tempo - 1).nome If tempo = 22 Then Timer1.Enabled = False tempo = 0 End If End Sub Private Sub Timer2_Timer() tempo = tempo + 1 Me.Controls("lbl" & 16 - (tempo - 1)).Caption = xPiloto(tempo + 5).nome If tempo = 16 Then Timer2.Enabled = False tempo = 0 End If End Sub Private Sub Timer3_Timer() tempo = tempo + 1 Me.Controls("lbl" & 10 - (tempo - 1)).Caption = xPiloto(tempo + 5).nome If tempo = 10 Then Timer3.Enabled = False tempo = 0 End If End Sub
-
Deu certo, valeu. EDIT: Se bem que eu só reparei agora, mas alguns nomes ainda se repetem no evento click do Command2. O código ficou assim: Option Explicit Dim tempo As Variant Dim j As Integer Dim i As Integer Private Sub Command1_Click() Randomize For i = 0 To 21 xPiloto(i).ai = Int(xPiloto(i).força * Rnd) + 1 Next Colocação xPiloto(), 21 Timer1.Enabled = True End Sub Private Sub Command2_Click() For j = 7 To 21 xPiloto(j).força = 0 Next For i = 0 To 6 xPiloto(i).ai = Int(xPiloto(i).força * Rnd) + 1 Next Colocação xPiloto(), 21 Timer2.Enabled = True End Sub Private Sub Timer1_Timer() tempo = tempo + 1 Me.Controls("lbl" & 22 - (tempo - 1)).Caption = xPiloto(tempo - 1).nome If tempo = 22 Then Timer1.Enabled = False tempo = 0 End If End Sub Private Sub Timer2_Timer() tempo = tempo + 1 Me.Controls("lbl" & 16 - (tempo - 1)).Caption = xPiloto(tempo + 5).nome If tempo = 16 Then Timer2.Enabled = False tempo = 0 End If End Sub
-
Tudo! hahahahaha Bem.... ta ordenando os 22 pilotos, e depois ordena denovo, apenas do 16° label pra frente. Só que ta ordenando com os mesmos pilotos, e na mesma ordem. Por exemplo: No Command1_Click, ele ordena os 22 pilotos, bunitinho, e aparece la: 22°: Piloto1 21° Piloto2 20° Piloto3 ..... 1° Piloto22 Aí depois, no Command2_Click, ele ordena, só que os pilotos 1, 2 e 3 é que são os primeiros a aparecer do label16 pra frente? Deu pra entender? hauhahaha Minha explicação ficou confusa pra caramba, mas é o que dá pra fazer. Só um detalhe, eu fiz algumas mudanças, e ficou mais próximo do que quero. Agora tá assim: Option Explicit Dim tempo As Variant Dim j As Integer Dim i As Integer Private Sub Command1_Click() Randomize For i = 0 To 21 xPiloto(i).ai = Int(xPiloto(i).força * Rnd) + 1 Next Colocação xPiloto(), 21 Timer1.Enabled = True End Sub Private Sub Command2_Click() For j = 7 To 21 xPiloto(j).força = 0 Next For i = 0 To 6 xPiloto(i).ai = Int(xPiloto(i).força * Rnd) + 1 Next Timer2.Enabled = True End Sub Private Sub Timer1_Timer() tempo = tempo + 1 Me.Controls("lbl" & 22 - (tempo - 1)).Caption = xPiloto(tempo - 1).nome If tempo = 22 Then Timer1.Enabled = False tempo = 0 End If End Sub Private Sub Timer2_Timer() tempo = tempo + 1 Me.Controls("lbl" & 16 - (tempo - 1)).Caption = xPiloto(tempo - 1).nome If tempo = 16 Then Timer2.Enabled = False tempo = 0 End If End Sub Mas ainda dá o mesmo erro.
-
O que eu tentei fazer agora foi o seguinte: Option Explicit Dim tempo As Variant Dim j As Integer Private Sub Command1_Click() Dim i As Integer For i = 0 To 21 xPiloto(i).ai = Int(xPiloto(i).chance * Rnd) + 1 Next Colocação xPiloto(), 21 Timer1.Enabled = True End Sub Private Sub Command2_Click() For j = 15 To 21 xPiloto(j).ai = 0 Next Timer2.Enabled = True End Sub Private Sub Timer1_Timer() tempo = tempo + 1 Me.Controls("lbl" & 22 - (tempo - 1)).Caption = xPiloto(tempo - 1).nome If tempo = 22 Then Timer1.Enabled = False tempo = 0 End If End Sub Private Sub Timer2_Timer() tempo = tempo + 1 Me.Controls("lbl" & 16 - (tempo - 1)).Caption = xPiloto(tempo - 1).nome If tempo = 16 Then Timer2.Enabled = False tempo = 0 End If End Sub Mas não deu certo
-
A qualificação de F1 funciona assim. Cada um dos 22 pilotos faz a sua volta, os 16 melhores tempos passam pra a próxima fase. Esses 16 fazem mais uma volta, e desses, 10 passam para a fase final, que funciona do mesmo jeito. Na fase final é decidido quem faz a pole position. Agora, se eu mudar na função para 16, aí muda tudo. Eu não quero mudar tudo, quero apenas fazer com que, dos 22 pilotos, apenas 16 passem para a próxima fase, e desses 16, apenas 10 passem para a fase final. Entendeu?
-
Hmm.. E além de tudo, acho que eu pulei muitas etapas haha. Já até fiquei de ler um livro de algoritmos e lógica de programação, mas acabei não lendo. E de repente meu amigo me chamou pra fazer um jogo em Visual Basic. Mas de qualquer forma... ta indo pra frente. Bem, agora voltando. Tem como em um único label ordenar os 22 pilotos, "guardar" os 6 últimos, e depois ordenar apenas os 16 que restaram?
-
Deu certo. Mas cada vez mais eu acho que os códigos estão ficando mais desorganizados. Valeu.
-
Cara, você ainda tem o projeto que eu te passei? Se tiver, da uma olhada pra mim, por favor, em um problema que estou tendo. Você vai notar que no MenuEquipe, quando roda o programa, aparece o nome e a potência do motor, do pneu, do chassi, etc, da equipe que você escolheu. Mas eu só fui perceber agora que depois de uma corrida, esses valores estão mudando. Por exemplo: se eu escolho a equipe McLaren, o motor no início aparece Mercedes, que é o correto, mas logo após uma corrida, ele muda para o motor de alguma outra equipe, como o Toyota. Se no projeto que eu te passei não tem isso, é por que eu ainda não tinha feito quando te passei, ai é só me avisar. Mas de qualquer jeito, aí vai o código: No Form NovoJogo, que é onde se escolhe a equipe Private Sub optMcLaren_Click() m = 0 End Sub Private Sub optFerrari_Click() m = 1 End Sub Private Sub optBMW_Click() m = 2 End Sub Private Sub optRenault_Click() m = 3 End Sub Private Sub optWilliams_Click() m = 4 End Sub Private Sub optRedBull_Click() m = 5 End Sub Private Sub optToyota_Click() m = 6 End Sub Private Sub optHonda_Click() m = 7 End Sub Private Sub optToroRosso_Click() m = 8 End Sub Private Sub optSuperAguri_Click() m = 9 End Sub Private Sub optSpyker_Click() m = 10 E no Form MenuEquipe, onde acontece o problema Dim i(4) As Integer lblNome.Caption = xJogador.nome lblIdade.Caption = xJogador.idade lblNacionalidade.Caption = xJogador.nacionalidade For i(0) = 0 To 7 If xEquipe(m).Motor = xMotor(i(0)).nome Then lblMotor.Caption = xEquipe(m).Motor & " - " & xMotor(i(0)).potencia End If Next For i(1) = 0 To 2 If xEquipe(m).Pneu = xPneu(i(1)).nome Then lblPneu.Caption = xEquipe(m).Pneu & " - " & xPneu(i(1)).força End If Next For i(2) = 0 To 4 If xEquipe(m).Combustível = xCombustível(i(2)).nome Then lblCombustível.Caption = xEquipe(m).Combustível & " - " & xCombustível(i(2)).força End If Next For i(3) = 0 To 21 If xEquipe(m).piloto(0) = xPiloto(i(3)).nome Then lblPiloto1.Caption = xEquipe(m).piloto(0) End If Next For i(4) = 0 To 21 If xEquipe(m).piloto(1) = xPiloto(i(4)).nome Then lblPiloto2.Caption = xEquipe(m).piloto(1) End If Next lblChassi.Caption = "Nível: " & xEquipe(m).chassi lblMecânicos.Caption = "Nível: " & xEquipe(m).mecânicos Valeu.
-
Mas eu coloco o backcolor de um botão da cor vermelha, por exemplo, mas ele continua com a cor padrão que é o Button Face.
-
Consegui, valeu. Tem como mudar as cores dos botões, ou criar botões customizáveis?