ProdutosNewsComprarDownloadsDownloadsDownloadsTutoriaisSuporteNão disponívelGaleriaForumContato  

DarkBASIC Pro
Versão de Avaliação
Patch 5.4
USB Dongle
Forum
Indique
Lista de Email
  Diário Antigo
Outros Produtos
Cartography Shop
DarkMatter
Curso 3D Studio
Combinados
Local DBPro Sites
Italy
UK

Proposta: mostrar como criar um jogo com um monstro para servir de alvo

Neste tutorial nós iremos criar uma mira e também um método para a mira e determinar onde o jogador está.

rem Cria bala do monstro
Make Object Sphere 102,2
texture object 102,2
Hide Object 102

Este código é adicionado antes do laço principal. Ele cria uma esfera para servir como projétil do monstro. Note que nós estamos usando a textura 2 como textura do objeto. Esta é a mesma textura que nós usamos para o projétil e efeitos. Reusar textura economiza uma grande quantidade de memória que nosso programa usa.

rem Cria explosão do monstro
Make Object Sphere 130,20
texture object 130,2
ghost object on 130
Hide Object 130
Make Object Sphere 131,20
texture object 131,2
ghost object on 131
Hide Object 131

Este código também é adicionado antes do laço principal. Ele cria os objetos de explosão para o projétil dos monstros.

rem Carregar partículas do monstro
Load Image "fire.bmp",2
For x =100 to 110
Make object plain x+10,5,5
Texture object x+10,2
Set object x+10,1,0,0
Ghost object on x+10
Hide object x+10
Next x
MPn=110

Você já deve conhecer este bloco de código a partir do efeito de partícula. O código é o mesmo, somente os números dos objetos foram modificados. Nós iniciamos o contador de partículas do monstro, "MPn" como 110, o número da primeiro objeto na série de partículas.

Load 3Dsound "fireball2.wav",102
Load 3Dsound "Explode.wav",103

Este código foi adicionado para carregar os efeitos de som para o projétil do monstro. Note, nós não reutilizamos os sons para os efeitos do jogador. Nós criamos novos sons pois os sons do jogador e os sons dos monstros devem ser executados ao mesmo tempo.

If MonsterBulletLife > 0 then Gosub MonsterShootBullet
If MonsterExplode > 0
    Gosub MonsterExplodeRocket
else
    Gosub MonsterAI
endif

Este código está em nosso laço principal. Aqui nós checamos pelo tempo de vida da bala do monstro e executamos a respectiva sub-rotina como as usadas pelo jogador. A adição é a sub-rotina "MonsterAI". Nós não queremos que o monstro atire uma nova bala enquanto há alguma sendo explodida ainda. Nós usamos a comparação "If Then Else" para ter certeza que isto não ocorre.

Rem IA simples para o míssel guiado pelo monstro
MonsterAI:

Point object 3,X#,Y#,Z#
PDist=Sqrt((mX# - X#)^2 + (mY#+25 - Y#)^2 + (mZ# - Z#)^2)
if PDist<1500
    if MonsterBulletLife=0 or 
       MonsterBulletLife < 500-PDist/10
        Point object 3,X#,Y#-25,Z#
        Position object 102,mX#,mY#+25,mZ#
        Set object to object orientation 102,3
        MonsterBulletLife =500
        show object 102
        Loop sound 102
    Endif
endif
Return

Esta é a sub-rotina "MonsterAI". Quando esta sub-rotina é chamada, o objeto do monstro é apontado diretamente aos jogadores. A distância entre o monstro e o jogador é calculada. Se a distância for menor que 1500 então o código continua. Se o jogador está fora de alcance nada acontece e a sub-rotina retorna para o laço principal. Se o jogador está no alcance, o código checa se a bala ainda está "viva" ou se a bala errou o jogador. A maneira de checar se a bala acertou ou não o jogador é através do uso deste pedaço de código "500-PDist/10". A bala do monstro anda a 12 unidades no espaço a cada vez que ela se move. Ela tem uma vida de 500, e por isto a bala pode viajar uma distância de 6000 unidades. Se nós dividirmos a distância ou o valor da variável "PDist" por 12 nós obtemos o número de unidades de vida que a bala dos monstros viajou em direção ao jogador. Se a distância fosse 1200 as unidades de vida do monstro seriam 100. Se nós subtrairmos este valor do valor total de unidades de vida nós obtemos 400. Se este número for maior do que o valor da variável "MonsterBulletLife" então nós sabemos a bala errou seu alvo. Ao invés de 10 nós usamos o 12 para dividir a distância, isto permite que a bala viaje um pouco mais do que antes. Ele adiciona mais o efeito da bala errando o jogador. Se o valor de "MonsterBulletLife" passar, o teste para uma outra bala ser atirada é acionado e nós apontamos o monstro diretamente à posição do jogador. Nós posicionamos e orientamos o objeto bala para o monstro. Nós configuramos o tempo de vida da bala para 500, mostramos o projétil e iniciamos o som da bala.

Rem Atira a bala do monstro
MonsterShootBullet:

Dec MonsterBulletLife
Move object 102,12
MbX#=Object position X(102)
MbY#=Object position Y(102)
MbZ#=Object position Z(102)
inc MPn
if MPn=121 then MPn=110

Scale object MPn,100,100,100
Position object MPn,MbX#,MbY#,MbZ#
Position sound 102,MbX#,MbY#,MbZ#
point object MPn,X#,Y#,Z#
Zrotate object MPn,rnd(180)

Show object MPn
    for x = 1 to 10
    scale object int((Wrapvalue((MPn-9+x)*36))/36)+110,
    100+x*25,100+x*25,100+x*25
next x
if MbY# < Get Ground height(1,MbX#,MbZ#) then MonsterBulletLife=0
Pdist=Sqrt((X# - MbX#)^2 + (Y#+25 - MbY#)^2 + (Z# - MbZ#)^2)

if Pdist<50
    GoSub PlacePlayer
    MonsterBulletLife = 0
endif

Rem míssil guiado
if Pdist <500 and Pdist>250 then Point object 102,X#,Y#,Z#
if Pdist < 100 then point object 102,X#,Y#,Z#

if MonsterBulletLife = 0
    Hide object 102
    stop sound 102
    for x=110 to 120
        hide object x
    next x
    MonsterExplode = 20
endif

Return	

A sub-rotina "MonsterShootBullet" é muito semelhante a sub-rotina "ShootBullet", mas nós adicionamos algumas linhas para fazer com que o tiro do monstro seja guiado. Isto cria um desafio ainda maior ao jogador.

Rem tiro guiado
if Pdist <500 and Pdist>250 then Point object 102,X#,Y#,Z#
if Pdist < 100 then point object 102,X#,Y#,Z#

Este é o código para o tiro guiado. Se a bala estiver num alcance entre 500 e 250 unidades do jogador, a bala é apontada ao jogador. Se a bala está no alcance de 100 unidades, novamente ela aponta para o jogador. Isto dá um pequeno tempo para o jogador poder esquivar-se.

Rem Explosão da bala do monstro
MonsterExplodeRocket:
Position object 130,MbX#,MbY#,MbZ#
Show object 130
Position object 131,MbX#,MbY#,MbZ#
Show object 131
EScale=20*(30-MonsterExplode)
Scale object 130,EScale,EScale,EScale
Yrotate object 130,WrapValue(MonsterExplode*37)
Scale object 131,EScale/1.5,EScale/1.5,EScale/1.5
Yrotate object 131,WrapValue(359-MonsterExplode*37)
Dec MonsterExplode

If MonsterExplode = 0 then hide object 130: Hide object 131
If MonsterExplode=18
    position sound 103,X#,Y#,Z#
    play sound 103
endif

If MonsterExplode < 15 then position sound 103,X#,Y#,Z#
Return

Esta é a sub-rotina "MonsterExplodeRocket". Você deve conhecer o código pois ele é o mesmo usado na sub-rotina "ExplodeRocket". As únicas diferenças entre elas estão nas variáveis de posição da bala do monstro e no número de objetos e sons.

Promoção de Lançamento

Clique aqui para comprar o 
DBPro R$220,00

Clique aqui para comprar o 
DBPro para Universitários R$150,00


clique aqui para comprar o Upgrade a partir da versão clássica por R$150,00

Nova pagina 1

Esta é a barra de navegação para explorar todos os tutoriais da série "A Caça Aos Monstros" 

1.1   1.2   1.3   1.4   1.5   2.1   2.2   2.3   2.4   2.5   3.1   3.2   3.3   3.4   3.5   3.6   3.7   3.8   3.9   3.10   3.11   3.12   3.13   3.14