XCreator fórum
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» Novo endereço da XCreator
[Resolvido] Duvida com lógica de tiros EmptyQua 16 Mar 2011, 08:49 por vinians

» C++? ajuda
[Resolvido] Duvida com lógica de tiros EmptyQui 17 Fev 2011, 16:42 por Henrique_GJ

» dúvida em centralizar arma e player
[Resolvido] Duvida com lógica de tiros EmptyDom 30 Jan 2011, 17:08 por AndersonXD

» GO linguagem de programação da Google !!
[Resolvido] Duvida com lógica de tiros EmptyQui 27 Jan 2011, 21:04 por vinians

» [Duvida]esqueci o código pra mudar o tamanho da room
[Resolvido] Duvida com lógica de tiros EmptyQui 13 Jan 2011, 15:12 por mystery_boy_maker

» show_message_ext duvida
[Resolvido] Duvida com lógica de tiros EmptyQua 22 Dez 2010, 21:36 por mystery_boy_maker

» Testes com C & Allegro
[Resolvido] Duvida com lógica de tiros EmptySeg 13 Dez 2010, 14:31 por vinians

» FreeBasic - Código completo Snake
[Resolvido] Duvida com lógica de tiros EmptySeg 13 Dez 2010, 11:13 por tblima123

» Me apresentando...
[Resolvido] Duvida com lógica de tiros EmptySáb 11 Dez 2010, 22:26 por vinians

» URL Reverse
[Resolvido] Duvida com lógica de tiros EmptySáb 11 Dez 2010, 22:23 por vinians

Parceiros
Seja nosso parceiro, adicione nosso button em seu portal!


• • •

• • •

• • •
[parceiro 3]

[Resolvido] Duvida com lógica de tiros

2 participantes

Ir para baixo

[Resolvido] Duvida com lógica de tiros Empty [Resolvido] Duvida com lógica de tiros

Mensagem por tblima123 Seg 04 Out 2010, 19:19

Olá denovo gentem!!!

Pessoal, négocio seguinte, eu quero saber como eu posso atirar a cada vez que uma tecla for precionada, é mais dificil do que eu pensava.

Eu consegui com uma função e arrays fazer tiros infinitos, porem a memoria desse jeito vai acumulando sem se limpar!!!

Tudo que eu quero é uma dica de como atirar a cada vez que uma tecla for precionada, só isso, mas sem ser com uma só "bala" e sem ficar pesado(no Game Maker era tão fácil...).

Desde já, valeu.


Última edição por tblima123 em Ter 05 Out 2010, 14:43, editado 1 vez(es)
tblima123
tblima123
Ocasional

Mensagens : 54
Data de inscrição : 06/11/2009

Ir para o topo Ir para baixo

[Resolvido] Duvida com lógica de tiros Empty Re: [Resolvido] Duvida com lógica de tiros

Mensagem por vinians Seg 04 Out 2010, 21:55

E ae amigão blz?
Bom, é feito com arrays ou com variaveis simples ou com listas. Pra fazer isso, voce precisa de um marcador pra dizer quando uma variavel se torna novamente disponivel. Por exemplo vamos supor que voce tenha um array de 4 posicoes que pode usar para ser seus tiros ou seja, voce atira, depois atira novamente, gastou entao 2 posicoes até agora, quando voce for dar o terceiro tiro pode ser que o primeiro ja tenha acertado algo ou chagado ao final da tela, com isso ele pode ser usado novamente. Em código ficaria mais ou menos assim:
Código:

#Include "fbgfx.bi"

Using FB

Const DISABLED  = -999999 'se for DISABLED pode ser usado
Const MAX_TIRO  = 10 'Maximo de tiros ao mesmo tempo
Const MAX_ENEMY = 15 'Maximo de inimigos ao mesmo tempo

Type TObject
  As Integer x, y  'Posicao do tiro/nave
End Type
Declare Sub Novo_tiro(x As Integer, y As Integer)       'Prepara novo tiro
Declare Sub Atira()                                     'Move todos os tiros

Declare Sub Novo_inimigo(x As Integer, y As Integer)   'Prepara novo inimigo
Declare Sub Ataca()                                     'Move todos os inimigos
Declare Sub Hud()                                      'Desenha o HUD

Dim Shared Tiros(1 To MAX_TIRO)  As TObject    'Declara um vetor para os tiros
Dim Shared Inimigos(1 To MAX_ENEMY) As TObject    'Decalra um vetor para os inimigos
Dim Shared Nave As TObject             'Declara a nave

Dim i As Integer                        'Variavel contadora geral
Dim Shared Pode_atirar As Integer      'Tempo entre um tiro e outro

Dim Shared game_over As Byte = 0         'Fim de jogo?
Dim Shared pontos As Integer = 0         'Pontos
Dim cmd As String
'----------------------------
'Programa Principal
'----------------------------
Windowtitle "Ataque Mortal"
Screenres 640, 480, 32, 2, 0

For i = 1 To MAX_TIRO:Tiros(i).y = DISABLED:Next
For i = 1 To MAX_ENEMY:Inimigos(i).y = DISABLED:Next

Nave.x = 320
Nave.y = 340
Pode_atirar = 0
Screenset 1, 0 'Trabalha na 1 e Mostra a 0
While (game_over = 0)
   Cls
   cmd = "BM" + Str(Nave.x) + "," + Str(Nave.y) + "L10E10F10L20S10"
   Draw cmd
   If Int(Rnd() * 100) < 2 Then Novo_inimigo(Int(Rnd() * 580) + 40, -10)
   Atira()
   Ataca()
   Hud()
   If (Pode_atirar > 0) Then Pode_atirar -= 1
   
   Screencopy
   If (Multikey(SC_ESCAPE))  Then game_over = 1
   If (Multikey(SC_LEFT))     Then Nave.x -= 1
   If (Multikey(SC_RIGHT))    Then Nave.x += 1
   If (Multikey(SC_SPACE) And Pode_atirar = 0)    Then Novo_tiro(Nave.x, Nave.y - 10)
  Sleep(5)
Wend

Sub Novo_tiro(x As Integer, y As Integer)
  Dim i As Integer
  For i = 1 To MAX_TIRO
     If Tiros(i).y = DISABLED Then 'Achou um slot vazio? Pega e vaza!
         Tiros(i).y = y
         Tiros(i).x = x
         Pode_atirar = 20
         Exit Sub
     EndIf
  Next
End Sub

Sub Atira()
  Dim i As Integer
  For i = 1 To MAX_TIRO
     If Tiros(i).y <> DISABLED Then 'Atira!
         Tiros(i).y -= 3
         Circle(Tiros(i).x, Tiros(i).y), 2, Rgb(255,0,0)
         If (Tiros(i).y < -10) Then Tiros(i).y = DISABLED 'Proto para usar novamente
     EndIf
  Next
End Sub

Sub Novo_inimigo(x As Integer, y As Integer)
  Dim i As Integer
  For i = 1 To MAX_ENEMY
     If Inimigos(i).y = DISABLED Then 'Achou um slot vazio? Pega e vaza!
         Inimigos(i).y = y
         Inimigos(i).x = x
         Pode_atirar = 20
         Exit Sub
     EndIf
  Next
End Sub

Sub Ataca()
  Dim As Integer i, j, d
  For i = 1 To MAX_ENEMY
     If Inimigos(i).y <> DISABLED Then 'Atira!
         Inimigos(i).y += 1
         Line(Inimigos(i).x - 5, Inimigos(i).y - 5)-(Inimigos(i).x + 5, Inimigos(i).y + 5), Rgb(255,255,255), B
         If (Inimigos(i).y > 490) Then Inimigos(i).y = DISABLED 'Proto para usar novamente
         For j = 1 To MAX_TIRO
            d = Sqr((Inimigos(i).x - Tiros(j).x)^2 + (Inimigos(i).y - Tiros(j).y)^2)
            If (d < 10) Then
               Inimigos(i).y = DISABLED
               Tiros(j).y = DISABLED
               pontos += 10
            EndIf
         Next
     EndIf
  Next
End Sub

Sub HUD()
      Draw String (10, 10), "Pontos: " + Str(pontos)
End Sub
Este é um exemplo funcional a nave é feita com draw e o tiro uma bola, mais da pra exemplificar.
Da uma olhada nesse exemplo e veja que eu reaproveito o vetor e assim não gasta memoria.
Duvidas? Posta ai!
vinians
vinians
Editor

Masculino
Mensagens : 85
Data de inscrição : 24/08/2009
Localização : Rio de Janeiro

http://www.xcreator.com.br

Ir para o topo Ir para baixo

[Resolvido] Duvida com lógica de tiros Empty Re: [Resolvido] Duvida com lógica de tiros

Mensagem por tblima123 Ter 05 Out 2010, 08:08

Valeu Vinians, mais uma vez você nos surpreendendo Smile

Deu super certinho, era exatamente o que eu queria!!!

Logo estou de volta, Ok?


Very Happy Laughing Cool Razz Wink
tblima123
tblima123
Ocasional

Mensagens : 54
Data de inscrição : 06/11/2009

Ir para o topo Ir para baixo

[Resolvido] Duvida com lógica de tiros Empty Re: [Resolvido] Duvida com lógica de tiros

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo


 
Permissões neste sub-fórum
Não podes responder a tópicos