Você está na página 1de 19

#================================================================== # O melhor jeito de aprender RGSS | Por: Mendesx #-----------------------------------------------------------------# Este script contm comentrios em todas as partes, para

auxiliar # o maker iniciante a entender a lgica dos scripts. #================================================================== # 17\4\11 | Verso 1.0 # 26\4\11 | Verso 2.0 # 29\4\11 | Verso 3.0 # 02/05/11 | Verso 4.0 # 05/07/11 | Verso 5.0 # 26/07/11 | Verso 6.0 # 29/07/11 | Verso 7.0 # 04/08/11 | Verso 8.0 # 07/08/11 | Verso 9.0 # 30/08/11 | Verso 10.0 #----------------------------------------------------------------# OBSERVAES # No dia em que a parte 6 foi escrita (26/07/11) o cdigo das # outras partes tambm foi revisado. # # 1) Classe # # # # # # # A classe o nome do script. Serve para que scripts diferentes tenham nomes diferentes, e no fique tudo misturado. Usamos o comando class para criar uma nova classe. Voc pode botar o nome que preferir, desde que comee com letras masculas, isso por que classes so constantes, por exemplo: Classe # Correto classe # Incorreto PARTE 1

class Minha_Classe # Incio de uma nova classe # 2) Mtodo # # # # # # # # # O mtodo uma subdiviso da classe, e a maioria dos comandos so colocados dentro dele. Mtodos geralmente se chamam: initialize, refresh, update, main, dispose. Como estamos comeando o nosso script, vamos usar um mtodo chamado initialize. Lembre-se que um mtodo pode ter qualquer nome, mas as vezes devemos usar nomes padro, para nos organizarmos melhor, como o caso agora. Mtodos tambm podem ser escritos fora de classes, os chamados mtodo globais, e para "rod-los" s escrever o nome deles. def initialize # Crio um novo mtodo # 3) Variveis # # # # Variveis voc ja deve saber o que . Caso no saiba, eu recomendo que estude isso, mas so basicamente palavras que representam valores. Agora vai aprender que em RGSS existem vrios tipos de variveis. Sendo assim: @nome = 1 # Varivel local, s pode ser usada nesta classe. $nome = 4 # Varivel global, accessvel de qualquer script # Assim, dizemos que o texto @nome igual ao valor 1. # Sempre preceda de @ variveis locais, e de $ as globais.

# # # #

Existem outros tipos, mas estes os so mais usados. Lembre-se: @ = local $ = global

# Variveis podem ter qualquer nome, inclusive com nmeros: @var123 = 515 # 4) end # # # # # # # # Este comando muito usado. Sempre que voc declara uma coisa, um mtodo, uma condio, um ciclo... prescisa dizer ao RGSS aonde esta coisa termina. Para usar so escrever 'end' sem as aspas. end # Aqui ns terminamos o mtodo initialize Ainda falta outro 'end', que o da classe. mas esse ns botaremos depois, por que ainda tem mais coisa para botar nesta classe. Mas se voc quiser, pode fazer isso, s botar um end a mais.

# Obs: # Excesso ou falta de "end" pode ser a causa de um "Syntax Error" #================================================================ # PARTE 2

# Antes de tudo, criaremos um novo mtodo, chamado 'update' def update # 1) Condies # # # # # # Condies voc j sabe o que , pois muito utilizado em eventos, e no o contrrio no caso dos scripts. Se no sabe, uma verificao se algo verdadeiro (ou falso, as vezes), caso seja, executa uma ao. Por RGSS, quando quer criar uma condio, use o comando "if" sem as aspas, e terminamos a condio com um "end".

# A sintaxe, ou seja, o jeito que agente escreve uma condio, # o seguinte: # if termos # o que acontece # else # o que acontece # end # # # # # # Condio # # Caso contrrio # # Terminamos com end.

"Termos" a condio em si. Como por exemplo, ter 50 moedas, uma varivel ter um valor, ter tais itens, etc... Bom, nossa primeira condio ser de que as variveis que criamos antes (@nome e $nome) tenham certos valores. Como faremos isso? simples! if @nome == 1 # Condio

# Explicando as linhas: # if # Nova condio

# @nome # Varivel sendo analizada (Termo) # == # verifica se igual a.. # 1 # Valor verificado # # # # # # # Alm de verificar se igual, podemos verificar se : > Maior que < Menor que >= Maior ou igual que <= Menor ou igual que != Diferente de =~ Aproximadamente (Este no ser usado agora)

# Agora, podemos botar para o script fazer alguma coisa se a # varivel @nome for 1. Para isso, s adicionar mais comandos # dentro da estrutura "if". # Como j criamos o if al em cima, s escrever o que acontece. p @nome.to_s # p # Mtodo (Global) para chamar uma janela de pop-up # @nome # Varivel que vai ser escrita na janela # .to_s # Mtodo utilizado para transformar variveis em textos. # A linha 139 faz uma caixa de mensangens, em que aparece o # valor da var @nome, mas s se ela for igual a 1, se no, # rodada a excesso (Caso essa exista). # Agora, vamos criar uma excesso. Excesso o que ocorrer # caso a condio no seja cumprida, neste caso, se a @nome for # diferente de 1. # Para criar uma excesso, utiliazmos o comando 'else' else # Excesso (Caso a condio no seja cumprida) # E depois, o que acontecer. @nome += 1 # # # # # # # # # # # Explicando: Se @nome for igual a 1, mostrado uma janela com o valor. Se @nome for diferente de 1, @nome ganha 1 em seu valor. Finalmente, fechamos com um "end" end # Fim Acima eu utilizei o "+=" para adicionar um valor a @nome, mas tambm posso usar: -= # Subtrair *= # Multiplicar = # Substituir (Mudar o valor) /= # Dividir Ainda existem outros comandos, os acima so os mais bsicos.

# Outras Condies: # possvel usar o 'if not', que ao contrrio do 'if', busca # valores falsos. if not @nome == 1 # Se @nome NO for igual a 1. end

# Tambm possvel fazer condies de apenas uma linha. @nome *= 2 if @nome == 1 # (@nome multiplicado por dois caso seja igual a 1) # Nas condies de uma linha no presciso o end. # Ainda h mais um tipo de condio, que tambm usa uma linha, # porm, permite excesses. Essa pode parecer complicada, mas # facil. @nome == 1 ? @nome = 2 : @nome += 1 # Condio # Explicando: # @nome # Termo # == 1 ? # Condio ( igual a 1 ?) # @nome = 2 # "@nome" passa a valer 2. # : # Caso contrrio # @nome += 1 # Adicionar 1 a "@nome" # Em condies com ponto de interrogao '?', obrigatrio criar # uma excesso. Caso no queira usar a excesso, use: @nome == 1 ? @nome = 2 : nil # Aquele "nil", na excesso, no vai fazer nada. # 2) Switches # # # # # # # # # # # Se vamos aprender condies e variveis, teremos que saber switches. Primeiro, se voc no sabia, vou lhe fazer uma revelao: Switches SO Variveis!! Pera! Como assim? Sim, elas so variveis, porm, especiais. Switches, mais conhecidas como variveis booleanas, pois s podem ter dois valores. 1 = falso, off, sim 2 = verdadeiro, on, no Ou seja, uma Switch s pode ser verdadeira ou falsa.

# Por RGSS, acessamos uma switch usando o comando: # $game_switches[id] # # # # Sendo 'id' o Id da switch. Lembre-se que em rgss: Se a switch est ligada, seu valor "true" Se estiver desligada, seu valor "false" (Sem aspas)

# Ento, para "ligar" uma switch, use: $game_switches[1] = true # Sendo que aquele '1' o Id da switch # Para "desligar" uma swicht, substitua 'true' por 'false' $game_switches[2] = false # Assim "desligamos" a swicht N 2 # Depois, finalmente fechamos esta classe com um end, pois # comearemos outra classe na prxima parte, que ser mais # difcil. Ah, antes disso, temos que fechar o mtodo update. end # Fim (do mtodo update) end # Fim (da classe)

#================================================================ #================================================================ # PARTE 3 # # # # # # 1) Janelas Hoje estudaremos algo um pouco mais avanado, mas que a base para qualquer scripter. As janelas so blocos que contm informao, exemplos so as janelas do menu, a janela de status, etc..

# Para chamar a janela criada nesta aula, crie um evento com # chamar script e ponha: # @window = Window_Minha.new # S para lembrar, por onde comea? Ah, sim, pela classe: class Window_Minha < Window_Base # Mas pera a.. tem algo errado: o que esse "Window_Base" ? # Window_Base a classe "pai" de todas as janelas do RMXP. # Procure aqui no editor de scripts por esta classe... # Quando, numa classe, usamos um "<", dizemos que a classe # esquerda (Window_Minha) filha da classe direita, ou seja, # herda TODAS as caractersticas da classe pai. # O principal uso disso o comando "super", que vamos aprender, # e a possibilidade se rodar mtodos da classe pai pela classe # filha. # Se voc no entendeu muito bem, pode me contatar... # S lembre-se disso: # # # # class Window_Minha < Window_Base # # # # Nova classe Nome "Filha" de Classe pai.

# Sem def # # #

mais explicaes, crie o mtodo de incio. initialize Em uma janela, sempre use o comando "super" para criar o grfico.

x, y, larg, altu super(0, 0, 300, 100) # O que o comando faz? # O super vai rodar o mtodo da classe pai (Window_Base) que # tem o nome igual a esse, ou seja, o comando vai rodar o # mtodo "initialize" da superclasse. # Agora, criaremos o Bitmap, outra parte grfica, que no # ser muito estudada por enquanto. # fcil, s copiar a linha abaixo no seu script. self.contents = Bitmap.new(width - 32, height - 32) # o Bitmap o lugar onde so desenhados textos e imagens da

# janela. # Em RGSS, podemos chamar um novo mtodo (def) se escrevermos # o nome dele. # Para quem eventer, isso seria meio que uma "label" # Vamos chamar um mtodo chamado refresh. refresh # Terminamos o mtodo initialize end # Agora comeamos o mtodo refresh, que chamamos antes. # Este o nome padro para o desenho de textos e imagens # em uma janela. def refresh # Prescisamos "limpar" a janela sempre que formos escrever # algo, para no correr o risco de escrever uma coisa sobre # a outra. Isso tambm vale para imagens. # Para isso, use o comando abaixo, que limpa todas os textos e # imagens da janela. self.contents.clear # Obs: # Lembre-se que self.contents o nosso Bitmap (Linha 299) # e "clear" um mtodo da classe Bitmap, que a "limpa". # Para escrever um texto na janela, use o comando abaixo. # (x, y, larg, alt, texto, alinhamento) self.contents.draw_text(0, 0, 256, 32, "Meu 1 texto!", 0) # Obs: # O draw_text outro mtodo da classe. # O alinhamento opcional, pode ser colocado ou no. # 0 = Texto esquerda (Padro) # 1 = Centralizado # 2 = Texto direita # Agora terminamos o mtodo e a classe. end end # 2) Comandos de uma janela # Em uma janela, podemos fazer vrias coisas. Escrever textos, # imagens, variveis, etc... abaixo vai alguns comandos, alguns # outros voc pode procurar na Window_Base # Lembre-se que todos estes comandos so mtodos da classe Bitmap. # Para escrever um texto comum: # self.contents.draw_text(x, y, larg, alt, "texto", alinhamento) # Para escrever uma varivel: (Sendo @nome uma varivel qualquer) # self.contents.draw_text(x, y, larg, alt, @nome.to_s) # Para escrever o nome de um item:

# self.contents.draw_text(x, y, larg, alt, $data_items[id].name.to_s) # Para escrever o Hp do heri, por exemplo: # self.contents.draw_text(x, y, larg, alt, $game_actors[1].hp.to_s) # Para mudar o tamanho do texto: # self.contents.font.size = tamanho (Um nmero inteiro) # Para mudar a fonte do texto: # self.contents.font.name = "nome" (Uma fonte do seu computador) # Tambm existem outros comandos, e outros jeitos de faz-los, # mas isso vai depender de voc. Na prxima aula talvez ns # aprofundemos o estudo destes comandos. # Obs: # Para isso, um Bitmap tem que ter sido criado, pois estes # comandos fazem parte da classe Bitmap, como j mencionei. #================================================================ # class Mendesx def initialize # 1) Ciclos # Nas prximas aulas, aprenderemos o que so e como fazer CENAS, # Mas para isso, vamos ter que saber de cor algumas coisas. # Ciclos so estruturas que ficam se repetindo at voc dizer que # parem. Existem vrios tipos, estudaremos dois. # a) loop # b) for # 1.a)loop # O loop uma estrutura simples, e costumamos usar s 3 comandos. # loop do # Inicia o loop # break # Para de executar o loop # end # Fim do loop # Outros loops, como while, each e times sero estudados depois. # Ento, vamos fazer um loop loop do # Somaremos 1 varivel de Id 1 $game_variables[1] += 1 # Ficaremos fazendo isso infinitamente, a no ser que # A varivel tenha valor igual a 100 if $game_variables[1] == 100 # Condio (Variavel == 100) break # Paramos o loop end # Fim da condio # Fim do loop end # Obs: # $game_variables[id] # So as variveis dos eventos. PARTE 4

# Ento, fizemos um ciclo que aumenta a varivel 1, at ela # chegar em 100, a mesma coisa que escrever... $game_variables[1] += 1 $game_variables[1] += 1 $game_variables[1] += 1 # ...100 Vezes. Ou seja, ocupa muito espao, mais prtico # usar um loop. # Claro que voc tambm poderia fazer assim: $game_variables[1] += 100 # 1.b) for # A estrutura for um pouco mais complicada, mas mais til. # Preste ateno nesta parte: for i in 1.. 100 # # # # # for i in 1.. 100 # # # # # Comeamos o ciclo Variavel usada. (Veremos depois) Parte da sintaxe Valor inicial de i Valor final de i

# A estrutura for leva uma varivel, neste caso, chamada "i". # (A varivel pode ter qualquer nome). # O For um ciclo, e, no caso acima, vai aumentar a varivel # i em 1 cada vez que chamado. # O valor inicial (1) o valor inicial de i. # O valor final (100) o valor final de i, quando i tiver # este valor, o for deixar de ser executado automaticamente. # Agora, o que acontee? $game_variables[2] += 1 # Somamos 1 varivel de Id 2 # Terminamos o for end # Ou seja, a varivel 2 vai ganhar 1 de valor at que "i" seja # igual a 100. Quando "i" for igual a 100, ela para. # Podemos fazer um jeito bem mais legal, assim: for i in 1.. 4 # i comea em 1, termina em 4 $game_variables[i] += 1 # # # # # Assim, a varivel que Por exemplo, se i for ganhar 1 de valor. Se i for igual a 4, a Isso tudo porque o id tiver o id igual a i, vai ganhar um. igual a 3, a varivel de id 3 ir varivel de id 4 ganhar 1. da varivel, que est entre [], i.

# Fim do for end # Seria o mesmo que a gente fazer isso: $game_varaibles[1] += 1 $game_varaibles[2] += 1

$game_varaibles[3] += 1 $game_varaibles[4] += 1 # Obs: # possvel fazer a # exemplo: for var in [0, 4, 1, # A varivel "var" # Quando chegar em end varivel assumir valores que voc quer, 3] vai valer 0, depois 4, 1 e 3. trs, o ciclo termina.

# Fim do metodo e classe. end end #---------------------------------------------------------------# Parte 5 # Hoje teremos uma aula mais terica, ser meio que uma reviso # de tudo que j vimos nas outras quatro aulas. Isso tudo para # podermos comear a estudar a cenas, muito mais complicadas. # Bom, ao chegar aqui, voc tem que saber como criar uma classe class Relembrando # E um mtodo... def initialize # Vamos revisar o uso de variveis. Vamos criar algumas: @variavel_um = 102 @variavel_dois = 214 # Vamos mudar o valor de uma varivel do jogo, o id dela ser # definido por outra, varivel, ou seja: @id = 3 # Id da varivel (Pode modificar vontade) $game_variables[@id] == 20 # Vamos trabalhar com switches. Mudaremos o valor de uma # delas. @id_da_switch = 5 # Id @valor = true # true = ON, false = OFF $game_switches[@id_da_switch] = @valor # Vamos criar um loop? Ok, voc deve lembrar como fazer um: loop do # Este loop quebra automaticamente se a switch de id 5 # estiver ativada. if $game_switches[5] == true break else # Caso contrrio $game_switches[5] = true # Ativar a switch end # Fim da condio end # Fim do loop # Vamos trabalhar com estruturas for. @var = 1 # Criando uma nova varivel for i in 0.. 50 # Repetiremos ela 50 vezes @var += i # Somamos i a @var end # Fim da estrutura for

end # Fim do mtodo initialize end # Fim da classe criada. # # # # Ento, esta foi a nossa reviso, creio que tenha sido til, para voc no se perder futuramente. Aguarde, na prxima aula criaremos nossa scene! Nosso primeiro script pra valer.

# At l! :D #====================================================================== # Parte 6 # # # # # Cenas: meio difcil explicar o que uma cena. Pois bem, falando de um modo geral, so conjuntos de classes que interagem entre si por uma classe principal (a cena). Exemplos de cenas; O menu, O mapa, a Batalha, a Loja

# Para mudar a cena atual, use: # $scene = Nome_da_Cena.new # Alguns exemplos: # $scene = Scene_Menu.new = Vai pro menu # $scene = Scene_Battle.ne = Vai para a batalha # # # # # Nesta aula vamos criar nossa cena, mas no vamos acabar ela. Acedite, nossa cena SER UM MENU!! Para chamar o menu criado aqui, use (Chamar Script): $scene = Scene_Mendesx_Menu.new Parece difcil? Vamos comear do comeo, de um nome para a cena

class Scene_Mendesx_Menu # Toda cena tem um mtodo principal, chamado "main". Ao fazer # uma cena, a prescena do main obrigatria. def main # Mtodo principal (Corpo da cena) # # # # Nosso menu ter escolhas, ento, vamos cri-las com vars. Usaremos as variveis de instncia, que ao serem criadas, s podem ser usadas no mesmo mtodo que foram criadas, no caso, o main.

# Para criar vars assim, s escrevre o nome delas. esc_a = "Itens" esc_b = "Status" esc_c = "Salvar" # Ento, criamos nossas trs escolhas do menu. # Vamos criar uma janela que contenha as escolhas. No RM, # existe uma janela que faz isso, a Window_Command @comandos = Window_Command.new(160, [esc_a, esc_b, esc_c]) # # # # # # Explicando: @comandos = Window_Command.new 160 [esc_a, b, c] = = = = = Varivel que cria a janela Igual Janela de comandos Largura da janela Comandos (definidos antes)

# Se no entendeu, leia de novo, se entendeu, continuemos # Este comandos prepara os grficos para o loop (ciclo)

Graphics.transition # Comeamos um novo loop loop do # Esperamos 1 Frame para nao travar Graphics.update # Atualizamos o teclado Input.update # Chamamos o mtodo update update # Caso a cena tenha mudado, paramos de atualiz-la if $scene != self break # Quebra o loop end # Fim da condio end # Fim do loop # Quando o loop tiver acabado (for outra cena) # Deletar a janela de comandos @comandos.dispose end def update # Mtodo de atualizao chamado no loop # Atualizar a janela de comandos @comandos.update # Se presionar a tecla X if Input.trigger?(Input::B) # Voltar ao mapa $scene = Scene_Map.new end # Caso aperta a tecla C (Enter) if Input.trigger?(Input::C) # A varivel @comandos representa a janela de comandos. # Para saber a posio do cursor da janela de comandos, # (aquele que movido ao apertar para baixo e para cima), # usamos: @comandos.index if @comandos.index == 0 # Se o cursor for 0 (Primeiro) # Vai para a cena dos itens $scene = Scene_Item.new elsif @comandos.index == 1 # Caso o cursor for 1 # Vai para a cena dos status $scene = Scene_Status.new elsif @comandos.index == 2 # Caso o cursor for 2 # Vai para a cena de salvar $scene = Scene_Save.new end end end # S tem um problema, depois de ir para a cena dos itens, status # ou save, e apertar X, voltamos ao menu original, e no ao menu # que fizemos. # O cdigo abaixo resolve isso xD end # Cdigo para resolver o bug do menu class Scene_Menu # Acesso ao menu original def main # Mtodo principal

$scene = Scene_Mendesx_Menu.new # Vai para o nosso menu xD end end # Mas o nosso menu est meio fraco, no? S uma janela de comandos... # porque na prxima aula vamos melhorar este menu. Aguardem! #================================================================= # PARTE 7 # Opa, finalmente melhoraremos o nosso menu xD, esta vai ser a # ltima aula sobre o assunto, ento, se depois dela ainda tiverem # alguma dvida em relao a cenas, podem me contatar. class Scene_Mendesx_Menu # Classe do menu (Que ja foi criada) # Nesta aula ns vamos trabalhar em uma classe j criada, e # vamos modific-la. Isso porque ns criamos o menu na aula # passada, e nesta s vamos melhor-lo. # 1) alias # Este um comando bem importante na hora de editar alguma # classe j criada, como o nosso caso. Veja o exemplo: alias nome_do_alias main # main um mtodo do menu. Lembra? def main # Vamos alterar o main! nome_do_alias # Estranho... end # Ok, agora voc se pergunta, o que fizemos? # Quando mudamos um mtodo (def), o primeiro apagado. # Ou seja, se eu s criasse um novo mtodo main aqui, o antigo # no ia valer nada. # Para me ajudar eu uso o alias, ele salva as informaes # do mtodo (no caso, main) para no apag-lo, e poder fazer # modificaes. alias nome_qualquer main # Novo alias para o mtodo main. def main # Mtodo main nome_qualquer # Mtodo antigo salvo. xD # Lembre-se que o nome_qualquer o nome do alias. end # Ja aprendemos o alias, agora vamos modificar os mtodos. # Comeando pelo main. Voc pode botar comandos adicionais # antes ou depois do alias, mas lembre-se que o alias vai # rodar todos os comandos do mtodo que est salvando. alias para_valer main def main # Vamos criar mais janelas para o menu. Primeiro, uma # janela que exibe o dinheiro. Ela existe no rmxp, e se # chama: Window_Gold @janela_de_gold = Window_Gold.new # Cria a janela @janela_de_gold.x = 160 # Coordenada X @janela_de_gold.y = 0 # Coordenada Y # Agora criaremos uma janela que exibe o tempo de jogo. # Essa janela tambm existe, se chama: Window_PlayTime @janela_de_tempo = Window_PlayTime.new @janela_de_tempo.x = 480 # Coordenada X @janela_de_tempo.y = 384 # Coordenada Y # Lembra que o fundo do menu era preto? Pois ento, agora

# Esse fundo ser o mapa! Para isso, usamos: @fundo_mapa = Spriteset_Map.new # Cria o fundo do mapa # Vamos criar agora uma janela que exibe o nome do mapa! # O nico problema que essa janela no existe no RMXP, # ento vamos ter que escrev-la. @janela_mapa = Window_MapName.new @janela_mapa.x = 0 # Coord X @janela_mapa.y = 384 # Coord Y # Bem mais abaixo voc poder ver o cdigo da janela. para_valer # Mtodo original rodado. # Se voc observar o mtodo original, ver que no incio # tudo criado (as janelas), e no final, tudo deletado # (Caso tenha mudado de cena), xomo eu expliquei. # Portanto, os comandos aqui so para deltar as janelas # quando sair do menu. @janela_de_gold.dispose # Deleta a janela de Gold @janela_de_tempo.dispose # A de tempo @fundo_mapa.dispose # O fundo do mapa @janela_mapa.dispose # O nome do mapa end # Agora, um novo alias para o mtodo de atualizao. alias novo_alias update # Modifica o mtodo update def update # Atualizar cada janela @janela_de_gold.update @janela_de_tempo.update @fundo_mapa.update @janela_mapa.update novo_alias # Roda comandos do update (Todos) end end # Fim da classe # Agora criaremos a janela que exibe o nome do mapa. class Window_MapName < Window_Base def initialize # As coordenadas X e Y so especificadas na Cena, ento no # necessrio bot-las, deixe em 0. # x, y, lar alt super(0, 0, 480, 96) # Criamos o Bitmap self.contents = Bitmap.new(width - 32, height - 32) # Chamamos o refresh refresh end def refresh # Limpamos a janela self.contents.clear # Este comando cria uma varivel que representa diversos # dados do mapa, inclusive nome, id, etc... @mapa = load_data("Data/MapInfos.rxdata") @id = $game_map.map_id # Este comandos pega o id do mapa atual @nome = @mapa[@id].name # Desenha o texto do mapa self.contents.draw_text(0, 15, 480, 32, "Mapa atual: " + @nome.to_s, 1) end end

# O comando abaixo serve para que d para pegar o ID do mapa, # necessrio para criar nossa janela. Pode ignor-lo se quiser. class Game_Map attr_accessor :map_id end # isso, voc criou seu primeiro menu. xD # Enfim, pode melhor-lo quanto quiser, e acho que voc deve ter # alguma dvida, se tiver, contate-me. # Na prxima aula comearemos a "brincar" mais com o rgss, e # voc ver o quanto poderosa (e divertida) esta linguagem. # At l! #================================================================ #================================================================ # PARTE 8 # 1) Arrays # O que so Arrays? So variveis que contm vrios valores. Pense # nas variveis que vimos at agora, elas podem ter um valor 2, 9, # "Texto", true, false, enfim... # Agora, os arrays, sendo uma s varivel pode ter vrios valores # (iguais ou diferentes entre si). Para cria um novo array, usamos # os colchetes: [ ] class Aula_Oito def initialize @novo_array = [] # o mesmo que: @novo_array = Array.new $array_global = [] # o mesmo que: $array_global = Array.new # Poderamos criar j botando direto os valores. Sendo que # os valores devem ser divididos por vrgulas: @array_com_valor = [0] # Acima eu s coloquei um valor, mas posso botar mais: @array_com_mais = [0, 1, 2, 90] # Separar com vrgulas # Um array pode conter valores muito diferentes, por exemplo, # textos, nmeros, e booleanas (true e false) @array_com_tudo = [1, "Texto", true] # Acima ns s criamos os Arrays, agora vamos poder acessar os # valores criados acima, observe: @valor = @array_com_tudo[0] # Valor = 1 p @valor.to_s # Print no valor (1) # Como assim? Bom, a varivel array_com_tudo tem trs valores, # sendo o primeiro 1, o segundo "Texto", etc... # # # # # Para acessar um valor de um array, s escrever: @nome_da_var[id] Sendo id o id no array, ou seja: O primeiro valor, (no caso, 1) tem id 0, o segundo valor ("Texto"), tem id 1, o terceiro valor, (true), tem id 2.

# Entendeu? Se no, leia o pargrafo acima de novo. # O id o nmero do valor desejado menos 1. # Vamos a mais um exemplo: @exemplo = [false, "Hey hey", 80, true, 'Palavra'] primeiro = @exemplo[0] # false segundo = @exemplo[1] # "Hey hey"

terceiro = @exemplo[2] # 80 quarto = @exemplo[3] # true quinto = @exemplo[4] # 'Palavra' # Acho que esta parte est bem explicada, agora vamos a alguns # mtodos (def) da classe Array. (Que no conta neste editor, # por acaso.) # O mtodo .push adiciona um novo valor ao array. @exemplo.push("Valor") # Array ganhou o valor "Valor". # O mtodo .include? verifica se um valor est no array. @exemplo.include?("Valor") # Geralmente usado em condies. # Assim podemos verificar se o "Valor" est presente no Array. # O mtodo .compact! retira todos os valores nulos do Array. # Exemplo: @array = [0, nil, 1] @array.compact! # @array = [0, 1] # Ou seja, o valor nulo foi retirado. # O mtodo .clear limpa o Array, o mesmo que redeclar-lo. @array.clear @array = [] # Mesma coisa # O mtodo .delete deleta todos os valores do array iguais # ao chamado, observe o exemplo: @array = [1, 2, 1, 3, 2, 3, 4, 2] @array.delete!(2) # Deletamos o 2. # @array = [1, 1, 3, 3, 4] # O mtodo .empty usado em condies, e verifica se o array # est o no vazio, ou eja, se ele igual ou no a: [ ] if @array.empty? # O array est vazio end # O mtodo .size retorna o tamanho do Array, veja o exemplo: @array = [0, "A", 2, 'B', 0.28] p @array.size # @array.size = 5 # # # # # # # # Enfim, nesta aulas vimos alguns mtodos da classe Array, mas no todos, vimos os mais utilizados. Na prxima aula aprenderemos mais sobre textos, eles tem alguns mtodos que voc nem imagina. Para quem est se perguntando onde est a tal classe Array, ela no consta no editor de scripts, apesar de poder ser acessada e modificada. Chamamos classes assim de classes Built-In.

end # Fim do mtodo end # Fim da classe #=============================================================== #=============================================================== # Parte 9

class Aula_Nove # Ol, hoje aprenderemos mais sobre a classe String. Esta classe # responsvel pelos textos do jogo. # texto = String.new # Para criar um novo texto, ou seja, criar uma nova string, podemos # usar as aspas duplas " ", ou simples ' ', logo estudaremos # as suas diferenas. def initialize @texto = "" $outro = '' @string = String.new # Ou seja, " ", ' ', String.new so praticamente as mesmas # coisas. # Voc tambm pode desenhar variveis em um texto usando o # #{var} # Isto s funciona em aspas duplas. num = 80 @var = "Nmero: #{num}" # Nmero: 80 @str = 'Nmero: #{num}' # Nmero: #{num} # Entendeu? Outra diferena entre as aspas duplas e simples, # que as simples geram menos lag, ento, sempre que possvel, # use as simples. # Strings de aspas simples so chamadas literais, e as duplas # de no-literais. # Visto isso, vamos aprender alguns mtodos da classe String. # Se no me engano, a maioria dos mtodos funciona somente # em aspas no-literais. (Duplas) # O mtodo .upcase transforma a string em letras maisculas: string = 'AbCdEfG' string.upcase # 'ABCDEFG' # J o mtodo .downcase transforma em letras minsculas: string.downcase # 'abcdefg' # S que estes mtodos s mudam a string no momento usado, # para mudar o valor da string para sempre, voc deve botar # um ! depois do mtodo. string.upcase! string.downcase! # Um mtodo .gsub um dos mais legais, ele substitui uma letra # da string por outra. Observe: string = "O tempo perguntou ao tempo que tempo o tempo tem" string.gsub("t") {"d"} # string = "O dempo pergundou ao dempo que dempo o dempo dem" # O mtodo == simples, usado em condies, verifica se a # string igual a outra string. if string == "teste" end # J o mtodo =~ mais complexo, vericia se a string tem um # valor aproximado a outro. Geralmente usado com Regexp,

# que algo bem mais avanado que estudaremos depois. # Por enquanto no aprenderemos o =~ # Ainda possvel "somar" strings, exemplos: string = "RPG" + " Maker" + "!" # RPG Maker! # Agora vamos aprender a converter strings. Podemos converter # um texto em outros valores usando os mtodos: # to_f = Converte em decimal # to_i = Converte em integer # to_s = Converte em string # Lembre-se que estes no so mtodos da classe String, mas # podem ser utilizados com textos. Observe: num = "280".to_f # num = 280.0 num = "219 est no incio do texto".to_i # num = 219 num = 28.to_s # num = "28" num = [2, 3, 4].to_s # num = "234" # # # # # # # # # # # # Para strings de aspas duplas, podemos fazer mais algumas coisas ainda: \n = Nova linha \r = Incio da linha \s = Espao em branco \t = Equivale a usar um tab Ento... esta foi a nossa aula sobre Strings, os textos tanto usados. Acho que estas aulas vo ser muito teis, pois se voc quer ser um grande scripter, vai ter que saber muito sobre Arrays, Strings, Numerics, Windows, Scenes, Modules, e enfim, tem muito material para a gente ver ainda.

# No sei do que vai ser a prxima aula, mas provavelmente # algo no to chato. xD # At l, qualquer dvida, entre em contato. end # Fim do mtodo end # Fim da classe #================================================================= # PARTE 9 # PROVA! # Nesta aula teremos uma prova, que testar todos os contedos # aprendidos nas aulas anteriores. Anote as respostas em algum # papel, e cheque no gabarito no final. # 1) O nome desta classe vlido? Explique? # class exemplo # end # 2) Quantos mtodos tem esta classe? Quais seus nomes? class Metodo def initialize @metodos = 4 end def metodo end end

# 3) O que uma varivel global? Como crio uma? # 4) Qual destas uma varivel local? Explique. @esta $ou_esta # 5) Ative a switch de Id 10. # 6) Faa a varivel (Dos eventos) de Id 3 ter valor 100. # 7) Crie uma condio: Se a Switch 5 estiver ativada, ela # desativada. # 8) Faa um loop que se repita 8 vezes. # 9) Crie uma janela de escolhas com no mnimo 3 comandos. class Menu def main # Crie aqui end end # 10) Use um alias no mtodo main acima, para adicionar um loop # que chame o mtodo update, e termine caso mude de cena. # 11) Usando trs variveis no mximo, faa uma varivel ser o # nome do mapa. Para ajudar, pode usar o cdigo abaixo: class Game_Map attr_accessor :map_id end # 12) O que um Array? # 13) Para que serve o mtodo compact? # 14) Para que serve o mtodo clear? # 15) Para que serve o mtodo size? # 16) Crie um array com no mnimo 3 valores. # 17) O que uma String? # 18) Para que serve o mtodo downcase? # 19) Para que serve o mtodo upcase? # 20) Para que serve o mtodo gsub? # 21) Crie uma String literal. # 22) Crie uma String no-literal. # QUESTO SEM CORREO # A questo abaixo (23) s para voc treinar, no ser # corrigida por ter vrios meios diferentes de fazer. # 23) Crie um menu com as seguintes caractersticas: # # # # # 5 Escolhas (No mnimo) Mapa no fundo. Janelas com dinheiro, tempo de jogo, nome do mapa e status. Se conseguir, faa as janelas se movimentarem quando entrar e sair do menu.

# GABARITO # 1) No, pois ele comea com letra minscula. # 2) A classe tem dois mtodos: "initialize" e "metodo" # 3) Uma varivel que pode ser acessada e modificada de qualquer # script. Para criar, use um cifro. ($) # 4) A varivel "@esta", pois ela comea com um arroba. (@) # 5) $game_switches[10] = true # 6) $game_variables[3] = 100 # 7) # if $game_switches[5] == true # $game_switches[5] = false # end # 8) # for i in 1.. 8 # end # 9) # s1 = "Comprar" # s2 = "Vender" # s3 = "Sair" # @janela = Window_Command.new(160, [s1, s2, s2]) # 10) class Menu alias m_main main def main m_main Graphics.transition loop do Graphics.update update if $scene != self break end end end end # 11) Exemplo usando trs variveis: # @mapa = load_data("Data/MapInfos.rxdata") # @id = $game_map.map_id # @nome = @mapa[@id].name # 12) uma varivel que pode ter mais de um valor ao mesmo tempo. # 13) Ele tira todos os valores nulos (nil) do array. # 14) O mtodo limpa todos os valores do array. # 15) Ele retorna o tamanho do array. # 16) @array = [0, "A", true] # 17) Um texto. # 18) Para deixar todas as letras da string minsculas. # 19) Para deixar todas as letras da string maisculas. # 20) Para trasnformar uma letra da string em outra. # 21) 'string' # 22) "string" # Qualquer erro na prova ou dvida em alguma questo, entrem em # contato. Prxima aula faremos uma tela de ttulo! #===============================================================