Introdução
Olá! Bem vindo a Bíblia do RGSS! Aqui você vai aprender muita coisa sobre a linguagem. Gostaria de agradecer a você que mostrou interesse para aprender e baixou este tutorial, ele foi feito com muita vontade para que muitos makers possam aprender esta grande linguagem de progamação! Muitos sabem que há um tempo, o RGSS era uma linguagem que poucos dominavam, mas hoje as coisas mudaram, já existem muitos tutoriais sobre o assunto pela internet. Espero que este tutorial seja definitivo para sua aprendizagem, pois deu muito trabalho organizar os documentos para reuni-los aqui. Fique atento para a próxima atualização! É importante dizer que este tutorial é comprometido para aqueles que têm uma noção mais avançada do RGSS, ou de nível básico-intermediário, mas não impede que seja estudado por iniciantes. Um tutorial voltado aos que não sabem nada será iniciado ainda. As pessoas que participaram deste documento são: Jão e DarkChocobo. Cada um cedeu seus materiais para que esta grande coletânea fosse feita. Desejo que isto sirva para você aprender bem mais! Vale lembrar que este tutorial não está completo, pegamos tudo que havíamos postado e juntamos, há certas aulas de classes que não precisam ser mostrados por serem pequenas e não tão importantes, para ver todo o conteúdo restante do RGSS, é só acessar o arquivo de ajuda já anexado.
Aula 1 – Considerações Iniciais
Índice de Tópicos: Tópico 1 – O que é Ruby? Tópico 2 – O que é RGSS? Tópico 3 – Sintaxe
Tópico 1 – O que é Ruby?
Ruby é uma linguagem de programação interpretada, com tipagem dinâmica e forte, orientada a objetos com vastas semelhanças com Perl, SmallTalk e Python. Projetada tanto para a programação em grande escala quanto para codificação rápida, tem um suporte a orientação a objetos simples e prático. A linguagem foi criada pelo japonês Yukihiro Matsumoto, que aproveitou as melhores idéias das outras linguagens da época. Esta linguagem possui vastos repositórios de bibliotecas disponíveis em sites como Ruby Forge e Ruby Application Archive (RAA). Existe, ainda, uma ferramenta bastante útil para instalação de bibliotecas, chamada Ruby Gems, o software mais famoso desenvolvido em Ruby é o Ruby on Rails
Tópico 2 – O que é RGSS?
RGSS (Ruby Game Scripting System) é uma biblioteca que usa a Linguagem de Script Ruby Orientada a objetos para desenvolver jogos 2D para a Plataforma Windows. RGSS leva você a construir inteiramente sistemas de jogos com originalidade mais facilmente que outras linguagens. Ruby é uma linguagem simples e de fácil aprendizado para os iniciantes, sendo esta uma poderosa e sofisticada ferramenta.
Tópico 3 – Sintaxe
Considerações Iniciais Ruby é uma linguagem que diferencia letras maiúsculas das minúsculas. Diferente de outras linguagens, em Ruby você pode usar comentários e espaços em qualquer local sempre que necessário. Quebras de linhas (quando aperta enter) podem ser usadas como espaços desde que esteja claro que o comando ainda não acabou, senão, elas serão consideradas uma finalização do comando. Identificadores Identificadores no Ruby podem ser comparados a „Comandos dos Eventos‟, eles representam cada ação do script e fazem com que ele funcione. Identificadores são representados por qualquer palavra desde que comecem com uma letra ou um underline(_). Exemplo:
Ruby_é_simples
Comentários Todo e qualquer comentário será totalmente ignorado, fazendo com que sirvam apenas para orientação. Comentários podem ser chamados de duas formas:
1 – Desde que o primeiro dígito da linha seja um „jogo da velha‟(#) toda a linha será um comentário. Exemplo:
# Este é um comentário de linha.
2 - É utilizado o comando „=begin‟ para representar o início de um comentário, e é utilizado o comando „=end‟ para representar o fim do mesmo. Exemplo:
=begin Este tipo de comentário pode durar quantas linhas quiser. Ele é muito utilizado para instrução de uso dos scripts. =end
OBS: O editor de scripts do RPG Maker XP e VX utiliza uma tonalidade verde de cor para representar comentários. Palavras Reservadas As palavras reservadas não podem ser utilizadas para nomear classes, variáveis, entre outros. Entretanto, variáveis com prefixo $ ou @(serão vistos mais adiante) não são consideradas reservadas. As palavras reservadas estão listadas abaixo:
BEGIN END alias and begin break case class def defined? do else elsif end ensure false for if in module next nil not or redo rescue retry return self super then true undef unless until when while yield
OBS: Não é necessário decorar todas as palavras reservadas, pois elas irão aparecer no editor em uma tonalidade de cor diferenciada das demais.
Aula 2 – As Variáveis e Suas Funções
Índice de Tópicos: Tópico 1 – O que são e para que servem as Variáveis? Tópico 2 – Os tipos de Variáveis Tópico 3 – Valores das Variáveis Tópico 4 – Trabalhando com as Variáveis
Tópico 1 – O que são e para que servem as Variáveis?
As variáveis carregam dados necessários para o funcionamento correto do jogo. As variáveis podem ser consideradas containers de dados, elas ficaram guardando seus dados até que você queira utilizá-los. Em Ruby, as variáveis têm o mesmo propósito das variáveis usadas pelos eventos do RPGMaker, guardar dados para que eles possam ser usados futuramente para um funcionamento correto do jogo, apesar de não serem usadas de mesma forma.
Tópico 2 – Os Tipos de Variáveis
Em Ruby, existem vários tipos diferentes de variáveis, e qualquer uma dela pode ter vários tipos de valores diferentes. Existem 4 tipos diferentes de variáveis, são elas: Variável Global, Variável de Instância, Variável Local, e Constantes. Variáveis Globais As variáveis globais são aquelas que poderão ser utilizadas por qualquer parte do programa (incluindo até mesmo pelos eventos). As variáveis globais são identificadas por conter um prefixo “$” em seu nome. Exemplo:
$global_variable # Esta é uma Variável Global.
Variáveis de Instância As variáveis de instância pertencem a um específico objeto , elas podem ser acessadas apenas pela classe a qual elas pertencem (classes serão vistas na próxima aula). As variáveis de Instância são identificadas por conter um prefixo “@” em seu nome. Exemplo:
@instance_variables # Esta é uma Variável de Instância.
Variáveis Locais As variáveis locais são aquelas que podem ser usadas apenas no método a qual ela pertence (métodos serão vistos na próxima classe). As variáveis locais não contém qualquer prefixo em seu nome, mas devem ser iniciadas por uma letra minúscula ou um underline(_). Exemplo:
local_variable # Esta é uma variável local.
Constantes Constantes são variáveis que pertencem a classes, classes que incluem modules e modules (serão vistos em aulas futuras). Constantes são identificadas por começarem seu nome com uma letra maiúscula.
Constante # Esta é uma Constante. CONSTANTE # Constantes também podem ter seu nome formado por letras maiúsculas.
Para chamar uma constante a partir de um objeto externo, utilize “::”
Module::Constante
OBS: Você pode não ter entendido este exemplo, pois modules serão visto somente em aulas futuras.
Tópico 3 – Valores das Variáveis
As variáveis podem ter vários tipos diferentes de valores, cada tipo de variável pode conter qualquer tipo de valor desejado. Os possíveis tipos de valores que as variáveis podem conter são: Valores Numéricos, Strings, Expressões Regulares, Arrays, Hashes, Ranges, Símbolos e Pseudo-variáveis. Valores Numéricos Valores Numéricos são aquelas variáveis que representam números, exatamente igual às variáveis do RPG Maker, elas podem representar números inteiros, decimais e até mesmo negativos. É importante lembrar que as variáveis do RPG Maker são alojadas numa variável global pelo RGSS, por isso que é possível a mudança do valor das variáveis através dos scripts, logo, tudo que o comando “Alterar Variáveis” dos eventos faz é mudar o valor de uma variável global (algo que também poderia ser feito pelo comando “Chamar Script”, já que tudo que ele faz é alterar o valor de uma variável). Exemplo:
0 16 -42 # Este é um valor Numérico dado às variáveis. # Este é um valor Numérico dado às variáveis. # Este é um valor Numérico dado às variáveis.
OBS: O Ruby ignora qualquer underline (_) que esteja no meio de um valor numérico, isso pode ser útil para separar valores grandes, como no exemplo a seguir:
1_000_000_000 1000000000 # Ambas as formas de escrever # resultarão em um valor de um bilhão.
Strings Strings são nada mais, nada menos que textos (expressões literárias). As sctrings podem ser usadas colocando-se aspas ou aspas-duplas („ e “) entre o texto. Exemplo:
„Esta é uma String‟ “Esta também é uma string”
A diferença de usar aspas ou aspas-duplas é que as aspas-duplas pode ser utilizados códigos dentro das strings, já textos em aspas comuns irão mostrar exatamente o que está dentro das aspas. Exemplo:
sabor = “doce.” „Suco #{valor}‟ Suco #{sabor} “Suco #{valor}” Suco doce. # O programa irá interpretar desta maneira: # O programa irá interpretar desta maneira:
OBS: Em aulas futuras irei explicar o exemplo acima, só quis explicar que ao usar aspas-duplas, o Ruby interpreta um texto com comandos dentro. Quando dois Strings estiverem separados por um espaço em branco, o Ruby interpretar como uma só string. Exemplo:
„Suco‟ „doce.‟ „Suco doce.‟ # O programa irá interpretar desta maneira:
Expressões Regulares Qualquer texto representado dentro de barras ( / ) são consideradas Expreções Regulares. Em RGSS as expreções regulares não são muito utilizadas, por tanto irei explicar este tipo de valor somente em aulas futuras. Exemplo:
/my name is dark chocobo/
Array Array é um tipo de valor muito intereçante, pois ela em si não tem qualquer valor, na verdade as Array servem para guardar vários valores em uma única variável, incluindo outras Arrays. As Arrays podem guardar uma quantidade ilimitada de valores em uma única variável, colocando estes valores numa ordem específica destro de chaves, cada valor é separado por uma vírgula. OBS: É importante lembrar, que cada valor da array pode conter qualquer tipo diferente de valor, incluindo outras Arrays. Exemplo:
[[0, 16, -42] [„Esta é uma String‟, “Esta também é uma string”, „Suco‟ „doce.‟] [16, “Suco doce.”, -42, 1_000_000_000] # Todas estas acima são Arrays. # Note como cada valor é separado por vírgula independente do tipo de valor.
Como os valores da Array ficam em grupo, cada um deles tem um ID (é o número de sua ordem na lista, começando do 0) Exemplo:
[0, 16, -42] # Nesta Array, 0 (zero) tem ID 0, pois é o primeiro da lista.
# 16 tem ID 1, pois é o segundo. # -42 tem ID 2, pois é o terceiro. # Agora vamos para uma outra Array: [16, “Suco doce.”, -42, 1_000_000_000] # Nesta Array, 16 tem ID 0, pois é o primeiro da lista. # “Suco doce.” tem ID 1 # -42 tem ID 2 # 1_000_000_000 tem ID 3
Exemplo:
[4, [0, 16, -42], „Suco doce.‟, 1_000_000_000] # Preste bem atenção no valor de ID 1 desta Array. # O valor de ID 1 é: [0, 16, -42] # É uma Array dentro da própria Array. # Neste caso ela funcionará do mesmo jeito, sem qualquer problema.
OBS: Note que, como as Arrays não têm limite de tamanho, uma Array pode conter quantas Arrays você quiser dentro dela, e estas Arrays podem, por sua vez, ter outras Arrays dentro de si e assim por diante (apesar de isso não ser nem um pouquinho comum de encontrar) Nota Final: Ainda há mais o que falar sobre Arrays, mas para entende-la melhor devemos primeiro concluir nossos estudos sobre variáveis, por tanto, vamos adiante. Hash Hashes são muito parecidas com as Arrays pelo fato delas também guardarem vários valores dentro de si, porém, as Hashes, diferente das Arrays, tão têm uma ordem fixa por IDs, Porém as Hashes são mais complexas de serem compreendidas, então vamos passar para o próximo valor e explicarei hashes em aulas futuras. Range Range são operadores utilizados entre dois valores para determinar um novo valor que seria todos os valores entre os dois valores determinados. Simplificando, uma range é todo o valor entre um início e um fim especificado. Uma range é identificado por reticências (...) ou dois pontos finais (..), no caso da reticências, a range terá o valor inicial até o final, mas nos dois pontos duplos a range terá o valor somente dos valores entre os dois especificados. (Eu sei que está meio difícil para entender, mas tudo ficará mais simples após o exemplo) Exemplo:
1 .. 20 1 ... 20 # Neste caso, a range terá todo o valor de 1 à 20 # Neste caso, a range terá o valor ENTRE 1 e 20 (de 2 à 19)
OBS: As ranges não são usadas como as outras variáveis comuns, são criadas especificamente para o comando for do Ruby. (Este, será explicado no próximo tópico desta aula.) Símbolos Símbolos são o único tipo de valor com que vocês não devem ter qualquer tipo de preocupação, eles são instâncias de uma classe interna do RGSS e são os únicos objetos (do RGSS) que irão voltar exatamente da forma que são sempre que forem chamados.
Exemplo:
:class :lvar :method :$gvar :@ivar :+
Pseudo-Variáveis Diferentes dos valores vistos acima, estes são valores especiais conhecidas como Pseudo-Variáveis. Pseudo-Variáveis não podem ser alteradas. As Pseudo-Variáveis são: self, nil, true e false. Self – Self é o próprio objeto, exemplo: as variáveis também podem representar classes (mas isso será visto na próxima aula), então quando você escreve „self‟ dentro desta classe, está se referindo à variável que está representando esta classe. Não irei me aprofundar neste tipo de valor, pois para isso, primeiro você deve saber sobre classes, que só serão dadas na próxima aula. Nil – Sempre que uma variável não declarada for chamada, ela será considerada Nil, logo, nil pode ser considerado como um NADA, como se a variável não tivesse nenhum valor (nem zero). True/False – São valores especiais que significam Verdadeiro (true) ou Falso (false), são usados em ocasiões especiais, como em condições para definir coisas como, por exemplo, se uma janela de comando estiver ativa ou não. Estes valores são utilizados em uma variável global para representar as Switches do RPG Maker (true = ON, false = OFF), logo, tudo que o comando “Alterar Switches” dos eventos faz eh alterar o valor de uma variável global de true para false(e vice-versa) do mesmo jeito que o comando “Alterar Variáveis” já citado acima.
Tópico 4 – Trabalhando com as Variáveis
Como você já sabe, as variáveis servem para alojar valores de diversas formas, esta parte da aula, lhe ensinará como criar as variáveis e alterar seus valores. As variáveis representam valores que podemos armazenar para usá-los em todas as coisas. Para atribuir propriedades, condições, etc. Antes de mais nada devemos declarar uma variável. Declarar, em Ruby, é uma expreção dada quando eu crio uma Variável. Para criar uma Variável simplesmente equaliza-a a um valor desejado, você pode dar qualquer nome e qualquer valor a Variável que estiver criando, dês de que siga as regras citadas para cada tipo de variável no começo da aula. Exemplo:
variável = 5
Com isso, eu acabo de criar uma variável local com nome de „variável‟, e seu valor é 5. Que tal começar a colocar as aulas em prática? Crie um novo script em seu jogo acima de todos os outros scripts, e cole o código já dito acima (variável = 5). Na linha abaixo coloque o comando:
p variável
O comando „p‟, criará uma janela padrão do Windows no jogo (que aparecerá logo ao iniciar o jogo, pois está no primeiro script) exibindo o valor de variável. Então dê OK no editor e teste o jogo, veja como apareceu o valor citado na variável 5. Agora apague o „p variável‟, vamos criar uma nova variável. Coloque o seguinte código:
teste = variável + 2 p teste
Agora dê um teste no jogo. Apareceu o número 6, pois se „variável‟ tem o valor de „5‟, e „teste = variável + 2‟, então „teste = 7‟. É simplesmente uma equação matemática de primeiro grau. Agora, apague o último código citado, vamos alterar o valor de „variável‟ sem precisar criar uma segunda variável. Logo abaixo de „variável = 5‟, coloque:
variável += 2
Com isso, o valor de variável, será adicionado em 2, este comando também pode ser substituído por „variável = variável + 2‟, pois em Ruby existe sempre várias formas de fazer cada coisa que você quiser, apenas optamos pelo caminho mais simples e curto. Abaixo segue uma lista dos comandos matemáticos que o Ruby consegue ler:
+, -, *, /, %, **, &, |, ^, <<, >>, &&, ||
OBS: Em outras aulas serão explicados o significado de cada operador, por hora, somente os que realmente importam são: +, -, * e /; que representam respectivamente: soma, subtração, multiplicação e divisão. Condições As condições do Ruby são geralmente usas juntamente com variáveis de todos os tipos. As condições do Ruby são utilizadas da mesma forma que as condições dos eventos do RPG Maker, porém com mais especificações e possibilidades. Em Ruby existem quatro formas diferentes de criar condições, são elas: Condição Completa, Condição de uma Linha, Condição Rápida e Condição de um Comando. OBS: Na verdade, as quatro formas de condições não têm nomes específicos, mas fica mais fácil ensinar, dando um nome a cada uma. Condição Completa: É a mais simples de fazer, e mais comum, apesar de ser a maior. Ela consiste no uso da palavra „if‟ no começo da estrutura, e logo depois da condição. Exemplo:
if variável == 5 p „sim‟ end
Agora vamos explicar o significado desta expreção: Na primeira linha, a palavra „if‟ representa o início de uma condição, e „variável == 5‟ representa a condição dada para que a próxima linha aconteça, note que é utilizado dois „=‟ já que é uma condição, pelo contrário, o programa iria pensar que você estava querendo mudar o valor de „variável‟ para 5. A segunda linha é o que irá acontecer no caso de variável ser 5, no caso, irá aparecer uma janela padrão do Windows com a mensagem „sim‟. A palavra „end‟, na terceira linha, representa o final da estrutura, caso a condição de „variável‟ ser 5, não seja cumprida (se „variável‟ não for 5) o programa irá pular a linha „p „sim‟‟ e irá direto para o „end‟, que é o final da estrutura. Cole isto logo abaixo daquele antigo comando „variável = 5‟ e dê um teste para ver o que acontece. Agora mude o „variável = 5‟ para „variável = 3‟ e dê um teste. Como variável não é 5, o programa não mostrou a mensagem sim, pois a condição de variável ser 5 não foi cumprida. Agora apague a condição criada (o último código citado) e cole esta nova condição abaixo:
if variável == 5 p „sim‟ else p „não‟ end
Agora altere o valor de variável para 5 e teste, depois para outro valor que não seja 5, e teste. „else‟ é uma palavra usada para representar uma exceção à condição da estrutura. Agora retire o „else‟ e coloque no lugar isto: „elsif variável == 3‟. Agora você está disendo ao programa que se variável for 5, a mensagem será „sim‟, “mas se” for 3, a mensagem será „não‟. Porém, como você não especificou uma exceção para suas duas condições, o programa pulará direto pro „end‟ no caso de variável não for 3, nem 5. Você pode usar quantos „elsif‟ você quiser por exceção, mas else, somente um, ou nenhum; e será sempre obrigatório um „end‟ em casa condição. Você também pode dar mais do que uma condição por estrutura com as palavras „and‟ e „or‟. Exemplo:
if variável == 5 or variável == 3 p „sim‟ end
Neste caso, se variável for 5 ou 3, a mensagem „sim‟ será exibida. Exemplo:
if variável == 5 and teste == 3 p „sim‟ end
Neste caso eu usei duas variáveis para a condição, a mensagem „sim‟ será exibida se „variável‟ for 5, e „teste‟ for 3. Lembre-se de que você deve sempre declarar a variável antes de usá-la (teste = 3), caso contrário acontecerá um erro, pois o programa não conseguirá encontrar a variável. Você pode também utilizar outros comandos ao invés de „==‟, os mais comuns e usados estão listados abaixo:
== > < >= <= !=
# # # # # #
igual à maior que menor que maior ou igual que menor ou igual que diferente de
Aula 3 – Classes, Módulos, Métodos e Herança
Índice de Tópicos: Tópico 1 – Classes Tópico 1.1 – Representação de Classes por Variáveis. Tópico 2 – Módulos Tópico 2.1 X Tópico 3 – Métodos Tópico 3.1 – Utilizando Métodos a Partir de Um Objeto Externo.. Tópico 3.2 X Tópico 4 – Superclasses / Herança Tópico 5 – Alias
Tópico 1 – Classes
Como foi visto na aula 01, Ruby é uma linguágem interpretada por objetos, as classes podem ser consideradas estes objetos. Para os iniciantes eu costumo diser que as classes são o que representam os próprios scripts, logo, cada classe representa um script, mas que só funcionam corretamente quando usados juntos. Da mesma forma que as variáveis, é necessário declarar uma classe antes de poder utiliza-la. Você declara uma classe quando utiliza a palavra „class‟ seguido do nome da classe(separado por um espaço). O nome da classe deve começar com uma letra maiúscula, e é necessário o uso da palavra „end‟ após a declaração da classe para determinar o término da classe. Exemplo:
class Nome_da_classe end
Ao declarar uma classe já declarada você poderá alterar a classe sem apaga-lá.
Tópico 1.1 – Representação de Classes por Variáveis
Algo não especificado na aula 02 foi que as variáveis também podem representar as classes como um valor, da mesma forma que strings, valores numéricos, arrays, etc.. Para declarar variáveis com valor de uma classe você deve equalizá-la ao nome da classe seguida de um método da superclasse, o „.new‟. Exemplo:
$game_temp = Game_Temp.new Scene_Tile, linha 115. # Trecho retirado da classe
OBS: Método e Superclasses serão vistos ainda nesta aula, portanto não se preocupem em entender isto agora, apenas quero explicar como representar uma classe por variáveis, pois isto será importante para o entendimento dos tópicos 2 e 3 desta aula.
Tópico 2 – Módulos
Módulos são objetos muito semelhantes às classes, a única diferença, é basicamente o modo de ser usada. Os módulos também devem ser declarados antes de seu uso, e seguem as mesmas regras que as classes, para serem declaradas, exceto pelo uso da palavra „module‟, ao invés de „class‟. Exemplo:
module Nome_do_módulo end
Ao declarar um módulo já declarado você poderá alterar o módulo sem apagá-lo. OBS: Os módulos não podem ser representados por variáveis pela forma com que são utilizados (será visto mais tarde)
Tópico 2.1 - Incluindo Módulos Classes
Módulos podem ser incluídos nas classes escrevendo, dentro das classes, a palavra include e o nome do módulo desejado, separados por um espaço. Ao incluir um módulo á uma classe, a classe herdará todos os métodos e variáveis de instância contidas no módulo. Variáveis e métodos já declarados serão apagados e substituídos pelos métodos e variáveis do módulo. Exemplo:
include Math # Math é o nome de um módulo.
OBS: Se o método do módulo a ser incluído já existir por meio de uma herança de uma superclasse, o método do módulo terá prioridade, logo, o método da superclasse será excluído.
Tópico 3 – Métodos
Os Métodos é o que fazem as classes e módulos funcionarem, sem eles, nada aconteceria. Os métodos podem ser comparados com os comandos dos eventos do RPGMaker, pôs é a través deles que tudo funciona, cada método tem uma função específica, como por exemplo: verificar se o jogador apertou alguma tecla, atualizar os valores das janelas a cada frame(frame é o tipo de contagem de tempo utilizado pelo RPGMaker), mudar valores de variáveis, etc.. OBS: Cada comando dos eventos do RPGMaker chama um método para realizar uma ação desejada. Os métodos são, geralmente, declarados dentro das classes e módulos, não existe nenhum método declarado fora de classes e métodos nos scripts padrões do RPGMakerXP & VX, apesar de ser possível declará-los fora das classes e métodos.
Para declarar os métodos é utilizado a palavra „def‟ e logo depois o nome do método(separado por um espaço), e um „end‟ para determinar o final do método. Exemplo:
def nome_do_método end
Cada método só poderá ser chamado a partir da classe ou módulo a qual ele pertence, se ele foi declarado de fora de uma classe e módulo, ele poderá ser chamado de qualquer lugar, incluindo pelos eventos. (porém, existe outra forma mais utilizada para chamar métodos por eventos) Chamando Métodos Os métodos poderão ser chamados simplesmente por escrever o nome do método desejado. Exemplo:
# Esté é um método def nome_do_método end # Para chamar este método se utiliza o comando: nome_do_método
Métodos carentes de valores Alguns métodos necessitam de determinados valores para seu correto funcionamento, estes valores devem ser determinados ao chamar o método. Para determinar os valores basta colocá-los dentro de parênteses logo após o nome do método, separados por vírgulas no caso de mais de um valor; os valores necessitados também devem estar especificados quando declarado o método. Exemplo:
# Esté é um método def nome_do_método(valor) end # Para chamar este método se utiliza o comando: nome_do_método # Neste caso ocorrerá um erro, pois não foi especificado o valor nome_do_método(5) # Neste caso, o método será chamado com o valor 5
Note no exemplo acima, que foi escrito „valor‟ dentro dos parênteses, assim, será declarada uma variável chamada „valor‟, dentro deste método. No caso acima „valor‟ será 5, já que o método foi chamado juntamente com o número 5. Outro Exemplo:
# Esté é um método def nome_do_método(valor1, valor2, valor3) end # Para chamar este método se utiliza o comando: nome_do_método(16, “String”, [4, 22]) # Note que qualquer tipo de valor pode ser utilizado.
Para encerrar o assunto, irei mostrar um método retirado de uma classe do RGSS.
Exemplo:
# # # # # Método „remove_actor‟ da classe Game_Party. Este método é utilizado para remover um herói do grupo. Ele é chamado sempre que nós utilizamos o comando mudar membro nos eventos e escolhemos expulsar um membro do grupo. note a variável „actor_id‟ na declaração do método def remove_actor(actor_id)
@actors.delete(actor_id) # Este comando exclui o membro do # grupo de ID definido ao chamar o método. $game_player.refresh aula. # Este comando será explicado nesta mesma
end # Este „end‟ determina que acaba aqui o método, ele já fez tudo que tinha que fazer.
OBS: Ao declarar um método já declarado, o novo método irá substituir o já declarado, a não ser que seja utilizado o comando „alias‟. (será visto ainda nesta aula)
Tópico 3.1 – Utilização de Métodos a partir de um Objeto Externo
Agora que já sabemos o que são classes, módulos e métodos; irei explicar como eles funcionam, pois as classes e módulos, como já foi explicado, não são nada sem os métodos. Chamando métodos de módulos. Como já foi explicado um método é chamado somente por escrever-mos seu nome, mas para isto o método deve ser chamado da mesma classe em que foi declarado, exemplo, eu não posso chamar o método „gain_gold‟(da classe Game_Player) utilizando seu nome na classe Game_Actor, ocorrerá um erro de „método não declarado‟ (undefined method). Porém, esta regra limita-se às classes, os módulos podem ter seus métodos chamados por escrever o nome do módulo, seguido do método desejado. (separados por um ponto) Exemplo:
Graphics.transition(10) # Trecho retirado da classe Scene_Base, linha 36.
„Graphics‟, é o nome de um módulo, „transition‟ é o nome de um método do módulo Graphics, e 10 é o valor requerido pelo método „transition‟. Chamando métodos de classes. Existe uma forma muito utilizada para chamar métodos das classes, a partir de uma outra classe ou de um módulo, é a utilização de uma variável para representar uma outra classe. Como já foi explicado no tópico 1.1, variáveis podem representar classes. Após equalizar a variável a uma classe, devem-se utilizar regras parecidas com o modo de chamar métodos de módulos, porém, como nós temos uma variável, para representar uma classe, deve ser citado o nome dessa variável ao invés do nome da classe.
Exemplo:
$game_player = Game_Player.new Scene_Tile, linha 125. # Trecho tirade da classe
# em outra parte do mesmo script encontramos a seguinte linha: $game_player.moveto($data_system.start_x, $data_system.start_y) # Linha 216. # Como a variável $game_player representa a classe Game_Player, # foi só utilizar um ponto e o nome do método para chamá-lo (.moveto) # note que foi necessário utilizar 2 valores neste método: # ($data_system.start_x, $data_system.start_y) # Eles representam as coordenadas x e y em que irá começar o jogo, # pois tirei esta linha de dentro do método da Scene_Title que faz o „new_game‟. # Note também que a variável $game_player, que representa a classe Game_Player, # É uma variável global, e pode ser acessada de qualquer lugar, incluindo dos eventos
Vamos fazer um teste, crie um novo evento, e utilize o comando „$game_player.moveto($data_system.start_x, $data_system.start_y)‟, e teste o jogo. O método utilizado é o que move o personagem até o seu local de origem, nas especificações $data_system.start_x, $data_system.start_y. Tente agora substituir estes valores por outros valores quaisquer, exemplo: „$game_player.moveto(6,4)‟. O método „moveto‟ é o método utilizado para fazer o „teleport‟ dos eventos, porém ele só move o personagem de posição no mapa, outros métodos são utilizados juntos para que isto aconteça, explore os métodos das classes Game_Player, Game_Party e Game_Actor e você encontrará alguns métodos bem legais.
Tópico 3.2 Métodos Privados
Através dos métodos privados são criadas as chamadas “Variáveis de Instância Públicas”, que são variáveis de instância da classe que podem ser acessadas mais facilmente de objetos externos. Para criar uma variável de instância pública utilize o comando de atributo dentro da classe a qual a variável de instância pertence (fora de qualquer método). Segue abaixo os 3 tipos existentes de comandos de atributos: attr_writer: Define uma variável de instância pública que poderá ser alterada a partir de qualquer classe ou módulo. attr_reader: Define uma variável de instância pública que poderá apenas ser lida por qualquer classe ou módulo. attr_accessor: Define uma variável de instância pública que poderá ser lida e alterada por qualquer classe ou módulo. Para definir a variável de instância a ser pública coloque o nome dela, sem o “@”, escrita em uma string, ou com um “:” no início, separada por um espaço do comando de atributo.
Exemplo:
# Trecho abaixo attr_reader attr_reader attr_accessor attr_accessor attr_accessor retirado a classe Game_Party, linhas 16 até 20. :gold :steps :last_item_id :last_actor_index :last_target_index
Olá! Bem vindo a Bíblia do RGSS! Aqui você vai aprender muita coisa sobre a linguagem. Gostaria de agradecer a você que mostrou interesse para aprender e baixou este tutorial, ele foi feito com muita vontade para que muitos makers possam aprender esta grande linguagem de progamação! Muitos sabem que há um tempo, o RGSS era uma linguagem que poucos dominavam, mas hoje as coisas mudaram, já existem muitos tutoriais sobre o assunto pela internet. Espero que este tutorial seja definitivo para sua aprendizagem, pois deu muito trabalho organizar os documentos para reuni-los aqui. Fique atento para a próxima atualização! É importante dizer que este tutorial é comprometido para aqueles que têm uma noção mais avançada do RGSS, ou de nível básico-intermediário, mas não impede que seja estudado por iniciantes. Um tutorial voltado aos que não sabem nada será iniciado ainda. As pessoas que participaram deste documento são: Jão e DarkChocobo. Cada um cedeu seus materiais para que esta grande coletânea fosse feita. Desejo que isto sirva para você aprender bem mais! Vale lembrar que este tutorial não está completo, pegamos tudo que havíamos postado e juntamos, há certas aulas de classes que não precisam ser mostrados por serem pequenas e não tão importantes, para ver todo o conteúdo restante do RGSS, é só acessar o arquivo de ajuda já anexado.
Aula 1 – Considerações Iniciais
Índice de Tópicos: Tópico 1 – O que é Ruby? Tópico 2 – O que é RGSS? Tópico 3 – Sintaxe
Tópico 1 – O que é Ruby?
Ruby é uma linguagem de programação interpretada, com tipagem dinâmica e forte, orientada a objetos com vastas semelhanças com Perl, SmallTalk e Python. Projetada tanto para a programação em grande escala quanto para codificação rápida, tem um suporte a orientação a objetos simples e prático. A linguagem foi criada pelo japonês Yukihiro Matsumoto, que aproveitou as melhores idéias das outras linguagens da época. Esta linguagem possui vastos repositórios de bibliotecas disponíveis em sites como Ruby Forge e Ruby Application Archive (RAA). Existe, ainda, uma ferramenta bastante útil para instalação de bibliotecas, chamada Ruby Gems, o software mais famoso desenvolvido em Ruby é o Ruby on Rails
Tópico 2 – O que é RGSS?
RGSS (Ruby Game Scripting System) é uma biblioteca que usa a Linguagem de Script Ruby Orientada a objetos para desenvolver jogos 2D para a Plataforma Windows. RGSS leva você a construir inteiramente sistemas de jogos com originalidade mais facilmente que outras linguagens. Ruby é uma linguagem simples e de fácil aprendizado para os iniciantes, sendo esta uma poderosa e sofisticada ferramenta.
Tópico 3 – Sintaxe
Considerações Iniciais Ruby é uma linguagem que diferencia letras maiúsculas das minúsculas. Diferente de outras linguagens, em Ruby você pode usar comentários e espaços em qualquer local sempre que necessário. Quebras de linhas (quando aperta enter) podem ser usadas como espaços desde que esteja claro que o comando ainda não acabou, senão, elas serão consideradas uma finalização do comando. Identificadores Identificadores no Ruby podem ser comparados a „Comandos dos Eventos‟, eles representam cada ação do script e fazem com que ele funcione. Identificadores são representados por qualquer palavra desde que comecem com uma letra ou um underline(_). Exemplo:
Ruby_é_simples
Comentários Todo e qualquer comentário será totalmente ignorado, fazendo com que sirvam apenas para orientação. Comentários podem ser chamados de duas formas:
1 – Desde que o primeiro dígito da linha seja um „jogo da velha‟(#) toda a linha será um comentário. Exemplo:
# Este é um comentário de linha.
2 - É utilizado o comando „=begin‟ para representar o início de um comentário, e é utilizado o comando „=end‟ para representar o fim do mesmo. Exemplo:
=begin Este tipo de comentário pode durar quantas linhas quiser. Ele é muito utilizado para instrução de uso dos scripts. =end
OBS: O editor de scripts do RPG Maker XP e VX utiliza uma tonalidade verde de cor para representar comentários. Palavras Reservadas As palavras reservadas não podem ser utilizadas para nomear classes, variáveis, entre outros. Entretanto, variáveis com prefixo $ ou @(serão vistos mais adiante) não são consideradas reservadas. As palavras reservadas estão listadas abaixo:
BEGIN END alias and begin break case class def defined? do else elsif end ensure false for if in module next nil not or redo rescue retry return self super then true undef unless until when while yield
OBS: Não é necessário decorar todas as palavras reservadas, pois elas irão aparecer no editor em uma tonalidade de cor diferenciada das demais.
Aula 2 – As Variáveis e Suas Funções
Índice de Tópicos: Tópico 1 – O que são e para que servem as Variáveis? Tópico 2 – Os tipos de Variáveis Tópico 3 – Valores das Variáveis Tópico 4 – Trabalhando com as Variáveis
Tópico 1 – O que são e para que servem as Variáveis?
As variáveis carregam dados necessários para o funcionamento correto do jogo. As variáveis podem ser consideradas containers de dados, elas ficaram guardando seus dados até que você queira utilizá-los. Em Ruby, as variáveis têm o mesmo propósito das variáveis usadas pelos eventos do RPGMaker, guardar dados para que eles possam ser usados futuramente para um funcionamento correto do jogo, apesar de não serem usadas de mesma forma.
Tópico 2 – Os Tipos de Variáveis
Em Ruby, existem vários tipos diferentes de variáveis, e qualquer uma dela pode ter vários tipos de valores diferentes. Existem 4 tipos diferentes de variáveis, são elas: Variável Global, Variável de Instância, Variável Local, e Constantes. Variáveis Globais As variáveis globais são aquelas que poderão ser utilizadas por qualquer parte do programa (incluindo até mesmo pelos eventos). As variáveis globais são identificadas por conter um prefixo “$” em seu nome. Exemplo:
$global_variable # Esta é uma Variável Global.
Variáveis de Instância As variáveis de instância pertencem a um específico objeto , elas podem ser acessadas apenas pela classe a qual elas pertencem (classes serão vistas na próxima aula). As variáveis de Instância são identificadas por conter um prefixo “@” em seu nome. Exemplo:
@instance_variables # Esta é uma Variável de Instância.
Variáveis Locais As variáveis locais são aquelas que podem ser usadas apenas no método a qual ela pertence (métodos serão vistos na próxima classe). As variáveis locais não contém qualquer prefixo em seu nome, mas devem ser iniciadas por uma letra minúscula ou um underline(_). Exemplo:
local_variable # Esta é uma variável local.
Constantes Constantes são variáveis que pertencem a classes, classes que incluem modules e modules (serão vistos em aulas futuras). Constantes são identificadas por começarem seu nome com uma letra maiúscula.
Constante # Esta é uma Constante. CONSTANTE # Constantes também podem ter seu nome formado por letras maiúsculas.
Para chamar uma constante a partir de um objeto externo, utilize “::”
Module::Constante
OBS: Você pode não ter entendido este exemplo, pois modules serão visto somente em aulas futuras.
Tópico 3 – Valores das Variáveis
As variáveis podem ter vários tipos diferentes de valores, cada tipo de variável pode conter qualquer tipo de valor desejado. Os possíveis tipos de valores que as variáveis podem conter são: Valores Numéricos, Strings, Expressões Regulares, Arrays, Hashes, Ranges, Símbolos e Pseudo-variáveis. Valores Numéricos Valores Numéricos são aquelas variáveis que representam números, exatamente igual às variáveis do RPG Maker, elas podem representar números inteiros, decimais e até mesmo negativos. É importante lembrar que as variáveis do RPG Maker são alojadas numa variável global pelo RGSS, por isso que é possível a mudança do valor das variáveis através dos scripts, logo, tudo que o comando “Alterar Variáveis” dos eventos faz é mudar o valor de uma variável global (algo que também poderia ser feito pelo comando “Chamar Script”, já que tudo que ele faz é alterar o valor de uma variável). Exemplo:
0 16 -42 # Este é um valor Numérico dado às variáveis. # Este é um valor Numérico dado às variáveis. # Este é um valor Numérico dado às variáveis.
OBS: O Ruby ignora qualquer underline (_) que esteja no meio de um valor numérico, isso pode ser útil para separar valores grandes, como no exemplo a seguir:
1_000_000_000 1000000000 # Ambas as formas de escrever # resultarão em um valor de um bilhão.
Strings Strings são nada mais, nada menos que textos (expressões literárias). As sctrings podem ser usadas colocando-se aspas ou aspas-duplas („ e “) entre o texto. Exemplo:
„Esta é uma String‟ “Esta também é uma string”
A diferença de usar aspas ou aspas-duplas é que as aspas-duplas pode ser utilizados códigos dentro das strings, já textos em aspas comuns irão mostrar exatamente o que está dentro das aspas. Exemplo:
sabor = “doce.” „Suco #{valor}‟ Suco #{sabor} “Suco #{valor}” Suco doce. # O programa irá interpretar desta maneira: # O programa irá interpretar desta maneira:
OBS: Em aulas futuras irei explicar o exemplo acima, só quis explicar que ao usar aspas-duplas, o Ruby interpreta um texto com comandos dentro. Quando dois Strings estiverem separados por um espaço em branco, o Ruby interpretar como uma só string. Exemplo:
„Suco‟ „doce.‟ „Suco doce.‟ # O programa irá interpretar desta maneira:
Expressões Regulares Qualquer texto representado dentro de barras ( / ) são consideradas Expreções Regulares. Em RGSS as expreções regulares não são muito utilizadas, por tanto irei explicar este tipo de valor somente em aulas futuras. Exemplo:
/my name is dark chocobo/
Array Array é um tipo de valor muito intereçante, pois ela em si não tem qualquer valor, na verdade as Array servem para guardar vários valores em uma única variável, incluindo outras Arrays. As Arrays podem guardar uma quantidade ilimitada de valores em uma única variável, colocando estes valores numa ordem específica destro de chaves, cada valor é separado por uma vírgula. OBS: É importante lembrar, que cada valor da array pode conter qualquer tipo diferente de valor, incluindo outras Arrays. Exemplo:
[[0, 16, -42] [„Esta é uma String‟, “Esta também é uma string”, „Suco‟ „doce.‟] [16, “Suco doce.”, -42, 1_000_000_000] # Todas estas acima são Arrays. # Note como cada valor é separado por vírgula independente do tipo de valor.
Como os valores da Array ficam em grupo, cada um deles tem um ID (é o número de sua ordem na lista, começando do 0) Exemplo:
[0, 16, -42] # Nesta Array, 0 (zero) tem ID 0, pois é o primeiro da lista.
# 16 tem ID 1, pois é o segundo. # -42 tem ID 2, pois é o terceiro. # Agora vamos para uma outra Array: [16, “Suco doce.”, -42, 1_000_000_000] # Nesta Array, 16 tem ID 0, pois é o primeiro da lista. # “Suco doce.” tem ID 1 # -42 tem ID 2 # 1_000_000_000 tem ID 3
Exemplo:
[4, [0, 16, -42], „Suco doce.‟, 1_000_000_000] # Preste bem atenção no valor de ID 1 desta Array. # O valor de ID 1 é: [0, 16, -42] # É uma Array dentro da própria Array. # Neste caso ela funcionará do mesmo jeito, sem qualquer problema.
OBS: Note que, como as Arrays não têm limite de tamanho, uma Array pode conter quantas Arrays você quiser dentro dela, e estas Arrays podem, por sua vez, ter outras Arrays dentro de si e assim por diante (apesar de isso não ser nem um pouquinho comum de encontrar) Nota Final: Ainda há mais o que falar sobre Arrays, mas para entende-la melhor devemos primeiro concluir nossos estudos sobre variáveis, por tanto, vamos adiante. Hash Hashes são muito parecidas com as Arrays pelo fato delas também guardarem vários valores dentro de si, porém, as Hashes, diferente das Arrays, tão têm uma ordem fixa por IDs, Porém as Hashes são mais complexas de serem compreendidas, então vamos passar para o próximo valor e explicarei hashes em aulas futuras. Range Range são operadores utilizados entre dois valores para determinar um novo valor que seria todos os valores entre os dois valores determinados. Simplificando, uma range é todo o valor entre um início e um fim especificado. Uma range é identificado por reticências (...) ou dois pontos finais (..), no caso da reticências, a range terá o valor inicial até o final, mas nos dois pontos duplos a range terá o valor somente dos valores entre os dois especificados. (Eu sei que está meio difícil para entender, mas tudo ficará mais simples após o exemplo) Exemplo:
1 .. 20 1 ... 20 # Neste caso, a range terá todo o valor de 1 à 20 # Neste caso, a range terá o valor ENTRE 1 e 20 (de 2 à 19)
OBS: As ranges não são usadas como as outras variáveis comuns, são criadas especificamente para o comando for do Ruby. (Este, será explicado no próximo tópico desta aula.) Símbolos Símbolos são o único tipo de valor com que vocês não devem ter qualquer tipo de preocupação, eles são instâncias de uma classe interna do RGSS e são os únicos objetos (do RGSS) que irão voltar exatamente da forma que são sempre que forem chamados.
Exemplo:
:class :lvar :method :$gvar :@ivar :+
Pseudo-Variáveis Diferentes dos valores vistos acima, estes são valores especiais conhecidas como Pseudo-Variáveis. Pseudo-Variáveis não podem ser alteradas. As Pseudo-Variáveis são: self, nil, true e false. Self – Self é o próprio objeto, exemplo: as variáveis também podem representar classes (mas isso será visto na próxima aula), então quando você escreve „self‟ dentro desta classe, está se referindo à variável que está representando esta classe. Não irei me aprofundar neste tipo de valor, pois para isso, primeiro você deve saber sobre classes, que só serão dadas na próxima aula. Nil – Sempre que uma variável não declarada for chamada, ela será considerada Nil, logo, nil pode ser considerado como um NADA, como se a variável não tivesse nenhum valor (nem zero). True/False – São valores especiais que significam Verdadeiro (true) ou Falso (false), são usados em ocasiões especiais, como em condições para definir coisas como, por exemplo, se uma janela de comando estiver ativa ou não. Estes valores são utilizados em uma variável global para representar as Switches do RPG Maker (true = ON, false = OFF), logo, tudo que o comando “Alterar Switches” dos eventos faz eh alterar o valor de uma variável global de true para false(e vice-versa) do mesmo jeito que o comando “Alterar Variáveis” já citado acima.
Tópico 4 – Trabalhando com as Variáveis
Como você já sabe, as variáveis servem para alojar valores de diversas formas, esta parte da aula, lhe ensinará como criar as variáveis e alterar seus valores. As variáveis representam valores que podemos armazenar para usá-los em todas as coisas. Para atribuir propriedades, condições, etc. Antes de mais nada devemos declarar uma variável. Declarar, em Ruby, é uma expreção dada quando eu crio uma Variável. Para criar uma Variável simplesmente equaliza-a a um valor desejado, você pode dar qualquer nome e qualquer valor a Variável que estiver criando, dês de que siga as regras citadas para cada tipo de variável no começo da aula. Exemplo:
variável = 5
Com isso, eu acabo de criar uma variável local com nome de „variável‟, e seu valor é 5. Que tal começar a colocar as aulas em prática? Crie um novo script em seu jogo acima de todos os outros scripts, e cole o código já dito acima (variável = 5). Na linha abaixo coloque o comando:
p variável
O comando „p‟, criará uma janela padrão do Windows no jogo (que aparecerá logo ao iniciar o jogo, pois está no primeiro script) exibindo o valor de variável. Então dê OK no editor e teste o jogo, veja como apareceu o valor citado na variável 5. Agora apague o „p variável‟, vamos criar uma nova variável. Coloque o seguinte código:
teste = variável + 2 p teste
Agora dê um teste no jogo. Apareceu o número 6, pois se „variável‟ tem o valor de „5‟, e „teste = variável + 2‟, então „teste = 7‟. É simplesmente uma equação matemática de primeiro grau. Agora, apague o último código citado, vamos alterar o valor de „variável‟ sem precisar criar uma segunda variável. Logo abaixo de „variável = 5‟, coloque:
variável += 2
Com isso, o valor de variável, será adicionado em 2, este comando também pode ser substituído por „variável = variável + 2‟, pois em Ruby existe sempre várias formas de fazer cada coisa que você quiser, apenas optamos pelo caminho mais simples e curto. Abaixo segue uma lista dos comandos matemáticos que o Ruby consegue ler:
+, -, *, /, %, **, &, |, ^, <<, >>, &&, ||
OBS: Em outras aulas serão explicados o significado de cada operador, por hora, somente os que realmente importam são: +, -, * e /; que representam respectivamente: soma, subtração, multiplicação e divisão. Condições As condições do Ruby são geralmente usas juntamente com variáveis de todos os tipos. As condições do Ruby são utilizadas da mesma forma que as condições dos eventos do RPG Maker, porém com mais especificações e possibilidades. Em Ruby existem quatro formas diferentes de criar condições, são elas: Condição Completa, Condição de uma Linha, Condição Rápida e Condição de um Comando. OBS: Na verdade, as quatro formas de condições não têm nomes específicos, mas fica mais fácil ensinar, dando um nome a cada uma. Condição Completa: É a mais simples de fazer, e mais comum, apesar de ser a maior. Ela consiste no uso da palavra „if‟ no começo da estrutura, e logo depois da condição. Exemplo:
if variável == 5 p „sim‟ end
Agora vamos explicar o significado desta expreção: Na primeira linha, a palavra „if‟ representa o início de uma condição, e „variável == 5‟ representa a condição dada para que a próxima linha aconteça, note que é utilizado dois „=‟ já que é uma condição, pelo contrário, o programa iria pensar que você estava querendo mudar o valor de „variável‟ para 5. A segunda linha é o que irá acontecer no caso de variável ser 5, no caso, irá aparecer uma janela padrão do Windows com a mensagem „sim‟. A palavra „end‟, na terceira linha, representa o final da estrutura, caso a condição de „variável‟ ser 5, não seja cumprida (se „variável‟ não for 5) o programa irá pular a linha „p „sim‟‟ e irá direto para o „end‟, que é o final da estrutura. Cole isto logo abaixo daquele antigo comando „variável = 5‟ e dê um teste para ver o que acontece. Agora mude o „variável = 5‟ para „variável = 3‟ e dê um teste. Como variável não é 5, o programa não mostrou a mensagem sim, pois a condição de variável ser 5 não foi cumprida. Agora apague a condição criada (o último código citado) e cole esta nova condição abaixo:
if variável == 5 p „sim‟ else p „não‟ end
Agora altere o valor de variável para 5 e teste, depois para outro valor que não seja 5, e teste. „else‟ é uma palavra usada para representar uma exceção à condição da estrutura. Agora retire o „else‟ e coloque no lugar isto: „elsif variável == 3‟. Agora você está disendo ao programa que se variável for 5, a mensagem será „sim‟, “mas se” for 3, a mensagem será „não‟. Porém, como você não especificou uma exceção para suas duas condições, o programa pulará direto pro „end‟ no caso de variável não for 3, nem 5. Você pode usar quantos „elsif‟ você quiser por exceção, mas else, somente um, ou nenhum; e será sempre obrigatório um „end‟ em casa condição. Você também pode dar mais do que uma condição por estrutura com as palavras „and‟ e „or‟. Exemplo:
if variável == 5 or variável == 3 p „sim‟ end
Neste caso, se variável for 5 ou 3, a mensagem „sim‟ será exibida. Exemplo:
if variável == 5 and teste == 3 p „sim‟ end
Neste caso eu usei duas variáveis para a condição, a mensagem „sim‟ será exibida se „variável‟ for 5, e „teste‟ for 3. Lembre-se de que você deve sempre declarar a variável antes de usá-la (teste = 3), caso contrário acontecerá um erro, pois o programa não conseguirá encontrar a variável. Você pode também utilizar outros comandos ao invés de „==‟, os mais comuns e usados estão listados abaixo:
== > < >= <= !=
# # # # # #
igual à maior que menor que maior ou igual que menor ou igual que diferente de
Aula 3 – Classes, Módulos, Métodos e Herança
Índice de Tópicos: Tópico 1 – Classes Tópico 1.1 – Representação de Classes por Variáveis. Tópico 2 – Módulos Tópico 2.1 X Tópico 3 – Métodos Tópico 3.1 – Utilizando Métodos a Partir de Um Objeto Externo.. Tópico 3.2 X Tópico 4 – Superclasses / Herança Tópico 5 – Alias
Tópico 1 – Classes
Como foi visto na aula 01, Ruby é uma linguágem interpretada por objetos, as classes podem ser consideradas estes objetos. Para os iniciantes eu costumo diser que as classes são o que representam os próprios scripts, logo, cada classe representa um script, mas que só funcionam corretamente quando usados juntos. Da mesma forma que as variáveis, é necessário declarar uma classe antes de poder utiliza-la. Você declara uma classe quando utiliza a palavra „class‟ seguido do nome da classe(separado por um espaço). O nome da classe deve começar com uma letra maiúscula, e é necessário o uso da palavra „end‟ após a declaração da classe para determinar o término da classe. Exemplo:
class Nome_da_classe end
Ao declarar uma classe já declarada você poderá alterar a classe sem apaga-lá.
Tópico 1.1 – Representação de Classes por Variáveis
Algo não especificado na aula 02 foi que as variáveis também podem representar as classes como um valor, da mesma forma que strings, valores numéricos, arrays, etc.. Para declarar variáveis com valor de uma classe você deve equalizá-la ao nome da classe seguida de um método da superclasse, o „.new‟. Exemplo:
$game_temp = Game_Temp.new Scene_Tile, linha 115. # Trecho retirado da classe
OBS: Método e Superclasses serão vistos ainda nesta aula, portanto não se preocupem em entender isto agora, apenas quero explicar como representar uma classe por variáveis, pois isto será importante para o entendimento dos tópicos 2 e 3 desta aula.
Tópico 2 – Módulos
Módulos são objetos muito semelhantes às classes, a única diferença, é basicamente o modo de ser usada. Os módulos também devem ser declarados antes de seu uso, e seguem as mesmas regras que as classes, para serem declaradas, exceto pelo uso da palavra „module‟, ao invés de „class‟. Exemplo:
module Nome_do_módulo end
Ao declarar um módulo já declarado você poderá alterar o módulo sem apagá-lo. OBS: Os módulos não podem ser representados por variáveis pela forma com que são utilizados (será visto mais tarde)
Tópico 2.1 - Incluindo Módulos Classes
Módulos podem ser incluídos nas classes escrevendo, dentro das classes, a palavra include e o nome do módulo desejado, separados por um espaço. Ao incluir um módulo á uma classe, a classe herdará todos os métodos e variáveis de instância contidas no módulo. Variáveis e métodos já declarados serão apagados e substituídos pelos métodos e variáveis do módulo. Exemplo:
include Math # Math é o nome de um módulo.
OBS: Se o método do módulo a ser incluído já existir por meio de uma herança de uma superclasse, o método do módulo terá prioridade, logo, o método da superclasse será excluído.
Tópico 3 – Métodos
Os Métodos é o que fazem as classes e módulos funcionarem, sem eles, nada aconteceria. Os métodos podem ser comparados com os comandos dos eventos do RPGMaker, pôs é a través deles que tudo funciona, cada método tem uma função específica, como por exemplo: verificar se o jogador apertou alguma tecla, atualizar os valores das janelas a cada frame(frame é o tipo de contagem de tempo utilizado pelo RPGMaker), mudar valores de variáveis, etc.. OBS: Cada comando dos eventos do RPGMaker chama um método para realizar uma ação desejada. Os métodos são, geralmente, declarados dentro das classes e módulos, não existe nenhum método declarado fora de classes e métodos nos scripts padrões do RPGMakerXP & VX, apesar de ser possível declará-los fora das classes e métodos.
Para declarar os métodos é utilizado a palavra „def‟ e logo depois o nome do método(separado por um espaço), e um „end‟ para determinar o final do método. Exemplo:
def nome_do_método end
Cada método só poderá ser chamado a partir da classe ou módulo a qual ele pertence, se ele foi declarado de fora de uma classe e módulo, ele poderá ser chamado de qualquer lugar, incluindo pelos eventos. (porém, existe outra forma mais utilizada para chamar métodos por eventos) Chamando Métodos Os métodos poderão ser chamados simplesmente por escrever o nome do método desejado. Exemplo:
# Esté é um método def nome_do_método end # Para chamar este método se utiliza o comando: nome_do_método
Métodos carentes de valores Alguns métodos necessitam de determinados valores para seu correto funcionamento, estes valores devem ser determinados ao chamar o método. Para determinar os valores basta colocá-los dentro de parênteses logo após o nome do método, separados por vírgulas no caso de mais de um valor; os valores necessitados também devem estar especificados quando declarado o método. Exemplo:
# Esté é um método def nome_do_método(valor) end # Para chamar este método se utiliza o comando: nome_do_método # Neste caso ocorrerá um erro, pois não foi especificado o valor nome_do_método(5) # Neste caso, o método será chamado com o valor 5
Note no exemplo acima, que foi escrito „valor‟ dentro dos parênteses, assim, será declarada uma variável chamada „valor‟, dentro deste método. No caso acima „valor‟ será 5, já que o método foi chamado juntamente com o número 5. Outro Exemplo:
# Esté é um método def nome_do_método(valor1, valor2, valor3) end # Para chamar este método se utiliza o comando: nome_do_método(16, “String”, [4, 22]) # Note que qualquer tipo de valor pode ser utilizado.
Para encerrar o assunto, irei mostrar um método retirado de uma classe do RGSS.
Exemplo:
# # # # # Método „remove_actor‟ da classe Game_Party. Este método é utilizado para remover um herói do grupo. Ele é chamado sempre que nós utilizamos o comando mudar membro nos eventos e escolhemos expulsar um membro do grupo. note a variável „actor_id‟ na declaração do método def remove_actor(actor_id)
@actors.delete(actor_id) # Este comando exclui o membro do # grupo de ID definido ao chamar o método. $game_player.refresh aula. # Este comando será explicado nesta mesma
end # Este „end‟ determina que acaba aqui o método, ele já fez tudo que tinha que fazer.
OBS: Ao declarar um método já declarado, o novo método irá substituir o já declarado, a não ser que seja utilizado o comando „alias‟. (será visto ainda nesta aula)
Tópico 3.1 – Utilização de Métodos a partir de um Objeto Externo
Agora que já sabemos o que são classes, módulos e métodos; irei explicar como eles funcionam, pois as classes e módulos, como já foi explicado, não são nada sem os métodos. Chamando métodos de módulos. Como já foi explicado um método é chamado somente por escrever-mos seu nome, mas para isto o método deve ser chamado da mesma classe em que foi declarado, exemplo, eu não posso chamar o método „gain_gold‟(da classe Game_Player) utilizando seu nome na classe Game_Actor, ocorrerá um erro de „método não declarado‟ (undefined method). Porém, esta regra limita-se às classes, os módulos podem ter seus métodos chamados por escrever o nome do módulo, seguido do método desejado. (separados por um ponto) Exemplo:
Graphics.transition(10) # Trecho retirado da classe Scene_Base, linha 36.
„Graphics‟, é o nome de um módulo, „transition‟ é o nome de um método do módulo Graphics, e 10 é o valor requerido pelo método „transition‟. Chamando métodos de classes. Existe uma forma muito utilizada para chamar métodos das classes, a partir de uma outra classe ou de um módulo, é a utilização de uma variável para representar uma outra classe. Como já foi explicado no tópico 1.1, variáveis podem representar classes. Após equalizar a variável a uma classe, devem-se utilizar regras parecidas com o modo de chamar métodos de módulos, porém, como nós temos uma variável, para representar uma classe, deve ser citado o nome dessa variável ao invés do nome da classe.
Exemplo:
$game_player = Game_Player.new Scene_Tile, linha 125. # Trecho tirade da classe
# em outra parte do mesmo script encontramos a seguinte linha: $game_player.moveto($data_system.start_x, $data_system.start_y) # Linha 216. # Como a variável $game_player representa a classe Game_Player, # foi só utilizar um ponto e o nome do método para chamá-lo (.moveto) # note que foi necessário utilizar 2 valores neste método: # ($data_system.start_x, $data_system.start_y) # Eles representam as coordenadas x e y em que irá começar o jogo, # pois tirei esta linha de dentro do método da Scene_Title que faz o „new_game‟. # Note também que a variável $game_player, que representa a classe Game_Player, # É uma variável global, e pode ser acessada de qualquer lugar, incluindo dos eventos
Vamos fazer um teste, crie um novo evento, e utilize o comando „$game_player.moveto($data_system.start_x, $data_system.start_y)‟, e teste o jogo. O método utilizado é o que move o personagem até o seu local de origem, nas especificações $data_system.start_x, $data_system.start_y. Tente agora substituir estes valores por outros valores quaisquer, exemplo: „$game_player.moveto(6,4)‟. O método „moveto‟ é o método utilizado para fazer o „teleport‟ dos eventos, porém ele só move o personagem de posição no mapa, outros métodos são utilizados juntos para que isto aconteça, explore os métodos das classes Game_Player, Game_Party e Game_Actor e você encontrará alguns métodos bem legais.
Tópico 3.2 Métodos Privados
Através dos métodos privados são criadas as chamadas “Variáveis de Instância Públicas”, que são variáveis de instância da classe que podem ser acessadas mais facilmente de objetos externos. Para criar uma variável de instância pública utilize o comando de atributo dentro da classe a qual a variável de instância pertence (fora de qualquer método). Segue abaixo os 3 tipos existentes de comandos de atributos: attr_writer: Define uma variável de instância pública que poderá ser alterada a partir de qualquer classe ou módulo. attr_reader: Define uma variável de instância pública que poderá apenas ser lida por qualquer classe ou módulo. attr_accessor: Define uma variável de instância pública que poderá ser lida e alterada por qualquer classe ou módulo. Para definir a variável de instância a ser pública coloque o nome dela, sem o “@”, escrita em uma string, ou com um “:” no início, separada por um espaço do comando de atributo.
Exemplo:
# Trecho abaixo attr_reader attr_reader attr_accessor attr_accessor attr_accessor retirado a classe Game_Party, linhas 16 até 20. :gold :steps :last_item_id :last_actor_index :last_target_index