quinta-feira, 28 de julho de 2011

2ª Aula de vJass - Primeiras Noções

Bom essa será nossa segunda aula, sugiro que leiam ela como muita atenção.
Antes de tudo voce deve saber que vJass é "case sensitive", ou seja, letras maiusculas e minusculas fazem diferença. Unit, é diferente de UnIt ou uNiT ou unit ou uniT e etc. Desta maneira os comandos if e loop, por exemplo, só podem ser escritos em letras minusculas senão o compilador irá interpretá-los como variaveis.

Primeiro Código

Vejamos esse código escrito em vJass:
library Exemplo1
 struct MyStruct
     // Meu primeiro código
     static method onInit takes nothing returns nothing
         call BJDebugMsg("Hello World!")
     endmethod
  endstruct
endlibrary

Este codigo exibirá a messagem Hello World! na tela quando seu mapa iniciar.

Vamos entender o codigo

    A linha library Exemplo1 cria uma library nomeada Exemplo1. Uma library é como se fosse um bloco de notas com codigos. Por enquanto é apenas isso que voce precisa saber. Caso queira saber mais leia este tutorial que eu fiz. Quando voce quiser terminar sua library, voce deve apenas escrever a linha (vista no final do código) endlibrary. Esta linha é obrigatória, nunca se pode deixar uma library aberta (sem o seu endlibrary).
    Quando fazemos um código, uma boa idéia é usar comentarios que ajudem a explicar partes dele. No nosso código temos o comentario // Meu primeiro código, viu né? O compilador desconsidera qualquer coisa que esteja escrito depois do // naquela linha.
    A linha struct MyStruct cria uma struct e nomeia ela de MyStruct. Uma struct é um objeto e como um objeto, ela pode ter varias caracteristicas. Nas proximas aulas voces entenderam melhor. Assim como na library, o compilador precisa saber onde termina sua struct, para isso apenas escreva endstruct depois de escrever os códigos da sua struct.
    O static method onInit takes nothing returns nothing é nosso method que sempre vai iniciar junto com o mapa. O method onInit (escrito desse jeito, lembre-se do case sensitive) de uma struct sempre será executado quando seu mapa iniciar, sempre deve ser static e takes nothing returns nothing. O termo static vocês entederam mais tarde. A parte takes nothing diz que o method não precisa de nenhuma variavel para ser executado. Quando voce quiser que um method use alguma variável você pode passar o valor dela pra essa function. E returns nothing significa que esse method não retorna nenhum valor. Um method pode retornar um valor (move speed de uma unit, por exemplo) e você pode preferir guardar esse valor em uma variável. O onInit é o nome do method, esse nome pode ser qualquer um. Contando que não se repita ou comece com números. Aé, methods também precisam ser encerrados. Apenas coloque endmethod no final dele.
    Única coisa que esse código faz é exibir a messagem Hello World!. 
function BJDebugMsg takes string msg returns nothing
    Olha ai, essa function (que é quase a mesma coisa que um method) requer uma string: takes string msg. Uma string é um conjunto de caracteres, quem conhece de trigger editor sabe disso. O comando BJDebugMsg exibe a string msg na tela por um minuto. Só!
    Antes do comando pode ver que tem a palavra call, que significa chamar. Ele que chama/executa o comando. Uma string sempre deve ser escrita entre aspas (" "), sempre. Um exemplo:
Faz de conta que voce quer mostrar mostrar a messagem Game Over. Então ficaria assim:

call BJDebugMsg("Game Over")
    As coisas escritas dentro dos parenteses são os parametros do comando, o takes dela. Quando um comando tem takes nothing você precisa apenas deixar os parenteses vazios.
Exemplo:

call CreateTimer() // um comando que cria um countdown timer.
call CreateTimer // assim daria erro, faltou os parenteses.
Quando um comando tem algum returns, voce pode preferir guarda o valor do retorno dela. O comando CreateTimer, por exemplo, é takes nothing returns timer. Ou seja ele retorna um timer, um timer que acabou de ser criado. Faz de conta que voce tem uma variável chamada TempTimer e você quer guarda um novo timer nela:

set TempTimer = CreateTimer()
// O comando CreateTimer foi chamado e seu valor de retorno
// foi guardado na variavel TempTimer


Primeiramente, desculpe pelas aulas serem semanais. Tentarei faze-las em um periodo mais curto. Espero que tenham entendido sobre esse inicio, voce ainda estará confuso, mas é assim mesmo. Logo logo voce estará entendendo a sintexe do vJass.

Abraços.

11 comentários:

  1. so nao to usando vjass ainda, pq meu JNPG nao funciona mas nem f****** pelo jeito, nunca simula o map ¬¬

    ResponderExcluir
  2. Acho que quando tiver tempo farei um post explicando os causadores de erro no JNPG.

    ResponderExcluir
  3. consegui colocar o jnpg pra rodar...
    agora vou passar pro vjass de vez ^^

    ResponderExcluir
  4. Ae, isso ae man. Quando tiver duvidas, pode me perguntar sem medo =D

    Assim que der eu farei novos tutoriais também.

    ResponderExcluir
  5. ai bills, de novo jnpg nao ta querendo testar, parece mais que o jhelper nao roda
    nao mostra a jenelinha dizendo que ta rodando pjass, pegando o commom e blizzard .j
    aff ¬¬
    tu tem ideia do que é?
    (uso windows 7 ultimate 64b)

    ResponderExcluir
  6. Vê se te ajuda:
    http://editmyworld.blogspot.com/2011/09/download-do-jngp.html

    ResponderExcluir
  7. deixa-pra la, questao de noob, firewall ativado
    vlw bills

    ResponderExcluir
  8. rafabrum5:

    Hello world é quando tu inicia uma nova linguagem de programação '-'

    Isso eh muito parecido com Java .-.

    ResponderExcluir
  9. @rafabrum

    Hehe, "hello world" é o clássico da programação. E é mesmo, vjass é bem parecido com java.

    ResponderExcluir
  10. estou tendo problemas '-'
    eu tento de todo jeito mas dá erros
    no código '-'
    eu escrevi, e deu erro, copiei e deu
    erro...
    dá 23 erros '-'

    ResponderExcluir
  11. Você já baixou o JNGP?
    http://editmyworld.blogspot.com/2011/09/download-do-jngp.html

    ResponderExcluir