Conectar-se

Esqueci minha senha

Últimos assuntos
» Novo endereço da XCreator
Qua 16 Mar 2011, 08:49 por vinians

» C++? ajuda
Qui 17 Fev 2011, 16:42 por Henrique_GJ

» dúvida em centralizar arma e player
Dom 30 Jan 2011, 17:08 por AndersonXD

» GO linguagem de programação da Google !!
Qui 27 Jan 2011, 21:04 por vinians

» [Duvida]esqueci o código pra mudar o tamanho da room
Qui 13 Jan 2011, 15:12 por mystery_boy_maker

» show_message_ext duvida
Qua 22 Dez 2010, 21:36 por mystery_boy_maker

» Testes com C & Allegro
Seg 13 Dez 2010, 14:31 por vinians

» FreeBasic - Código completo Snake
Seg 13 Dez 2010, 11:13 por tblima123

» Me apresentando...
Sab 11 Dez 2010, 22:26 por vinians

» URL Reverse
Sab 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

Ir em baixo

[Resolvido] Duvida com lógica de tiros

Mensagem por tblima123 em 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)
avatar
tblima123
Ocasional

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

Voltar ao Topo Ir em baixo

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

Mensagem por vinians em 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!

_________________
we love to make games!
avatar
vinians
Editor

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

http://www.xcreator.com.br

Voltar ao Topo Ir em baixo

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

Mensagem por tblima123 em 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
avatar
tblima123
Ocasional

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

Voltar ao Topo Ir em baixo

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

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum