1 Criando jogos em BYOND - Capítulo 5 Seg 12 Nov 2012, 18:49
Halt
Administrador
VIb. Cinco notas.
1.Eu coloquei comentários em praticamente todas as linhas do programa, mas não precisa fazer isso normalmente. Coloque comentários suficientes para que outro programador possa entender, o básico não será necessário comentar.
2.Note como colocamos o nome de variáveis relacionadas com seus propósitos. É altamente recomendado isso. Faça nomes de variáveis descritíveis e que sejam pequenas o suficientes para serem fáceis de escrever repetidas vezes.
3.Quando declaramos uma variável em uma proc, ela existe somente naquela proc. Uma vez que a proc retorna, a variável se perde. Se você quiser que outra proc use essa variável você deve passá-la. Você aprenderá mais disso quando você continuar com seus estudos com o BYOND.
4.Se você ver, nós temos uma linha dizendo “var/HP = 30” e uma linha dizendo “var/dano = rand(1,10)”. Se agente voltar e colocar HP = rand(1,10), invez de 30, você terá um erro.
Testworld.dm:6:error:=expected a constant expression
Isto é porque se algo não é conhecido quando você compila... como não sabemos que numero será... você deverá colocar dentro de um proc.
5.Você deve ter notado uma diferença entre Login(), uma proc interna, e rand(),também uma proc interna. Uma é maiúscula e a outra não. Isto é para indicar que Login() é a proc de um mob, enquanto rand é somente uma proc regular.
VIc. Procodilo Dundee (Declaração de procs; declaração de if; src)
Então agora podemos atacar mobs. Mas se realmente queremos mata-los, nós temos que ver se o HP deles chegam à 0 ou menos. A melhor hora de fazer isso é depois que o mob leva o dano. Coloque outra linha no fim do verb Atacar.
++M.ChecarMorte() //Checa se o mob morreu com uma proc
Você provavelmente sabe que ChecarMorte() é uma proc. O M. em frente diz para não chamarmos simplesmente essa ChecarMorte, mas ChecarMorte() que pertence a M. Então é melhor escrever a proc ChecarMorte(). Em mob, entre Login() e var, coloque isso:
+proc
++ChecarMorte() //Checar ataque mortal
+++if(HP<=0) //Se o HP for menor ou igual a zero....
++++world<<”[src] morreu!”//Mostra a mensagem de morte
Como ChecarMorte() não é uma proc interna como Login(), nós temos que declará-la digitando a “proc” primeiro, exatamente como tivemos que fazer com “var” sobre HP.
Na próxima linha temos a declaração de um if(Se). Isto não é exatamente como uma proc; você pode separar o “if” dos parênteses, e tudo o que aparecer em azul no seu editor de códigos. Neste caso, estamos checando se o HP de M é menor ou igual a 0. Se for, o programa vai executar o que estiver embaixo da declaração. Neste caso, uma instrução para mandar uma mensagem para o mundo.
A parte [src] é nova; src vem de “source(fonte)”, src significa qualquer coisa que proc é pertencida. Em nosso caso, ChecarMorte() vai sempre pertencer para a M no verb Atacar. Mas ChecarMorte() não sabe que nós estamos o chamando de M, então usamos o src, que sempre se refere ao dono da proc.
Por enquanto, nosso código junto deve estar assim:
//Este é um mundo Teste criado por Blake em 04/09/2008.
mob
+icon = ‘pessoa.dmi’
+var
++HP = 30
+Login()
++icon_state = gender
++..()
+proc
++ChecarMorte()
+++if(HP<=0)
++++world<<”[src] morreu”
+verb
++Atacar(mob/M as mob in oview(1))
+++usr<< “Você atacou [M]!”
+++oview()<<”[usr] atacou [M]!”
+++var/dano = rand(1,10)
+++world << “[dano] dano!”
+++M.HP -= dano
++Falar(msg as text)
+++world <<”[usr]: [msg]”
turf
+grama
++icon = ‘grama.dmi’
world
+turf = /turf/grama
Salve tudo, ou compile de novo.
Créditos:
Blake pelo tutorial
-KiRa por postar aqui na ARM
1.Eu coloquei comentários em praticamente todas as linhas do programa, mas não precisa fazer isso normalmente. Coloque comentários suficientes para que outro programador possa entender, o básico não será necessário comentar.
2.Note como colocamos o nome de variáveis relacionadas com seus propósitos. É altamente recomendado isso. Faça nomes de variáveis descritíveis e que sejam pequenas o suficientes para serem fáceis de escrever repetidas vezes.
3.Quando declaramos uma variável em uma proc, ela existe somente naquela proc. Uma vez que a proc retorna, a variável se perde. Se você quiser que outra proc use essa variável você deve passá-la. Você aprenderá mais disso quando você continuar com seus estudos com o BYOND.
4.Se você ver, nós temos uma linha dizendo “var/HP = 30” e uma linha dizendo “var/dano = rand(1,10)”. Se agente voltar e colocar HP = rand(1,10), invez de 30, você terá um erro.
Testworld.dm:6:error:=expected a constant expression
Isto é porque se algo não é conhecido quando você compila... como não sabemos que numero será... você deverá colocar dentro de um proc.
5.Você deve ter notado uma diferença entre Login(), uma proc interna, e rand(),também uma proc interna. Uma é maiúscula e a outra não. Isto é para indicar que Login() é a proc de um mob, enquanto rand é somente uma proc regular.
VIc. Procodilo Dundee (Declaração de procs; declaração de if; src)
Então agora podemos atacar mobs. Mas se realmente queremos mata-los, nós temos que ver se o HP deles chegam à 0 ou menos. A melhor hora de fazer isso é depois que o mob leva o dano. Coloque outra linha no fim do verb Atacar.
++M.ChecarMorte() //Checa se o mob morreu com uma proc
Você provavelmente sabe que ChecarMorte() é uma proc. O M. em frente diz para não chamarmos simplesmente essa ChecarMorte, mas ChecarMorte() que pertence a M. Então é melhor escrever a proc ChecarMorte(). Em mob, entre Login() e var, coloque isso:
+proc
++ChecarMorte() //Checar ataque mortal
+++if(HP<=0) //Se o HP for menor ou igual a zero....
++++world<<”[src] morreu!”//Mostra a mensagem de morte
Como ChecarMorte() não é uma proc interna como Login(), nós temos que declará-la digitando a “proc” primeiro, exatamente como tivemos que fazer com “var” sobre HP.
Na próxima linha temos a declaração de um if(Se). Isto não é exatamente como uma proc; você pode separar o “if” dos parênteses, e tudo o que aparecer em azul no seu editor de códigos. Neste caso, estamos checando se o HP de M é menor ou igual a 0. Se for, o programa vai executar o que estiver embaixo da declaração. Neste caso, uma instrução para mandar uma mensagem para o mundo.
A parte [src] é nova; src vem de “source(fonte)”, src significa qualquer coisa que proc é pertencida. Em nosso caso, ChecarMorte() vai sempre pertencer para a M no verb Atacar. Mas ChecarMorte() não sabe que nós estamos o chamando de M, então usamos o src, que sempre se refere ao dono da proc.
Por enquanto, nosso código junto deve estar assim:
//Este é um mundo Teste criado por Blake em 04/09/2008.
mob
+icon = ‘pessoa.dmi’
+var
++HP = 30
+Login()
++icon_state = gender
++..()
+proc
++ChecarMorte()
+++if(HP<=0)
++++world<<”[src] morreu”
+verb
++Atacar(mob/M as mob in oview(1))
+++usr<< “Você atacou [M]!”
+++oview()<<”[usr] atacou [M]!”
+++var/dano = rand(1,10)
+++world << “[dano] dano!”
+++M.HP -= dano
++Falar(msg as text)
+++world <<”[usr]: [msg]”
turf
+grama
++icon = ‘grama.dmi’
world
+turf = /turf/grama
Salve tudo, ou compile de novo.
Créditos:
Blake pelo tutorial
-KiRa por postar aqui na ARM