guia de lenguaje ruby para rpgmaker

Upload: theeriol

Post on 14-Jul-2015

833 views

Category:

Documents


26 download

TRANSCRIPT

GUA DE RUBYen base a

RPG MAKER XP(RGSS)por nemus

-2-

PrlogoEste tutorial est dedicado a todos aquellos que quieran iniciarse en el mundo de la programacin en Ruby orientado a RPG Maker XP, o lo que tambin es llamado RGSS (Ruby Game Scripting System: Sistema de Programacin para Juegos en Ruby). Antes de poner los contenidos aviso dos cosas: La primera, que esto no es una gua exhaustiva de programacin en RGSS, y que es posible que contenga errores, por lo cual, tras terminar de leer esta gua recomendara mirar cdigos para comprender mejor las cosas. La segunda es que no le resulta igual de fcil a todo el mundo programar, as que, si pasa el tiempo y no consiguen nada, no se desesperen, la constancia casi todo lo puede. A todos aquellos que, al intentar programar ven una pgina de cdigos y no comprenden, les comunico que Ruby es un lenguaje de programacin de nivel alto, y por tanto es muy similar al lenguaje humano. Como casi todos los lenguajes de programacin, se basa en el ingls para sus comandos, por lo que, unos bsicos conocimientos de ingls nos ayudarn. De todas maneras, en este tutorial se explica que significa, traducido al espaol, los comandos de habla inglesa. Por ltimo, comentarles que la programacin es un sistema muy bueno de potenciacin del cerebro, ayuda a la ramificacin del mismo y a mejorar sus interconexiones. Es decir, mejora su funcionamiento y potencia la velocidad de pensamiento. Ahora comienzo con el tutorial, les deseo suerte con su aprendizaje. Si tienen alguna duda, contacten conmigo desde esta pgina (bien desde los foros o desde la seccin contacta de la misma). http://anemusint.byethost7.com/ Gracias por confiar en este tutorial,

nemus

-3-

ndiceIntroduccin ....................................................................................................... Pg. 4 Entender el Sistema de colores del editor......................................................... Pg. 4 Operadores matemticos .................................................................................. Pg. 4 Variables............................................................................................................ Pg. 5 4.1. Introduccin................................................................................................. Pg. 5 4.2. Tipos segn su duracin ............................................................................. Pg. 5 4.3. Nmeros...................................................................................................... Pg. 6 4.4. Textos.......................................................................................................... Pg. 6 4.5. Booleanos ................................................................................................... Pg. 7 4.6. Arrays .......................................................................................................... Pg. 8 4.7. Tablas (Hash Tables).................................................................................. Pg. 8 4.8. Objetos ........................................................................................................ Pg. 8 5. Print ................................................................................................................... Pg. 9 6. Grficos ............................................................................................................. Pg. 10 6.1. Sprites ......................................................................................................... Pg. 10 6.2. Incrustados en ventanas ............................................................................. Pg. 11 6.3. Puntos y Lneas .......................................................................................... Pg. 12 7. Condicionales .................................................................................................... Pg. 13 7.1. If .................................................................................................................. Pg. 13 7.2. Unless ......................................................................................................... Pg. 14 7.3. Case ............................................................................................................ Pg. 14 8. Bucles ................................................................................................................ Pg. 15 8.1. For ............................................................................................................... Pg. 15 8.2. Next ............................................................................................................. Pg. 15 8.3. Loop do ....................................................................................................... Pg. 16 8.4. Break .......................................................................................................... Pg. 16 8.5. While ........................................................................................................... Pg. 16 9. Operadores lgicos > And Or Not ..................................................................... Pg. 17 10. Nmeros Aleatorios ........................................................................................... Pg. 18 11. Clases................................................................................................................ Pg. 20 11.1. Introduccin................................................................................................. Pg. 20 11.2. Definicin de clases y llamada.................................................................... Pg. 20 11.3. Mtodos de clase ........................................................................................ Pg. 20 11.4. Parmetros en los mtodos de clase.......................................................... Pg. 21 11.5. Superposicin de mtodos de clase ........................................................... Pg. 21 11.6. Frmulas de acceso a variables de una clase (attr) ................................... Pg. 22 11.7. Superposicin de clases ............................................................................. Pg. 22 11.8. Alias............................................................................................................. Pg. 22 11.9. Subordinacin de clases ............................................................................. Pg. 23 11.10. Clases-Ventana (Windows) ..................................................................... Pg. 24 11.11. Clases-Ventanas de comandos (Window_Selectables).......................... Pg. 25 11.12. Clases-Escena (Scenes) ......................................................................... Pg. 26 12. Clases ms importantes ....................................................................................... Pg. 28 12.1. Window_Base ............................................................................................. Pg. 28 12.2. Interpreter.................................................................................................... Pg. ?? 12.3. Scenes ...................................................................................................... Pg. ?? 12.4. Windows .................................................................................................... Pg. ?? 12.5. Games ........................................................................................................ Pg. ?? 12.6. Main (no es una clase)................................................................................ Pg. 29 1. 2. 3. 4.

-41. IntroduccinEl sistema de programacin del RPG Maker XP es Ruby, y se encuentra en los llamados scripts. Para acceder a los scripts pulsa F11 durante la edicin del juego, para que te salga la pantalla de scripts. A la derecha estn las pginas, y a la izquierda los contenidos de las mismas. Las pginas no son necesarias, pero, para mayor orden se recomienda que vaya una clase por pgina (ya explicar que es eso de clases), y que dicha pgina lleve el nombre de la clase, auque no es necesario, pero ayuda a encontrar cosas. El Ruby es un lenguaje de programacin orientado a objetos, es decir, que usa objetos para funcionar. Este sistema es uno de los ms rpidos, ya que hace que haya menos lneas de cdigo haciendo que no sean necesarias las definiciones de variables (ms abajo explicadas) y algunas otras cosas. Ruby posee la funcin de la identificacin de maysculas y minsculas, por lo que podemos definir una variable @hola, y otra @HOLA, que sern distintas. Tambin sucede con los comandos. No reconocer IF, ni If, ni iF, pero si if. Los comandos siempre en minscula a no ser que se especifique lo contrario.

2. Entender el sistema de colores del editorAzul oscuro: definiciones, clases y operadores lgicos (if, for, case), las referencias a objetos self, super y el valor nulo nil, y las constantes booleanas true y false NO ADMITEN MAYSCULAS. De todas maneras, ningn comando que se explique en este tutorial que vaya con minsculas se aceptar con maysculas. Hay unos pocos comandos que llevan maysculas, y solo sern reconocidos con esas maysculas. Granate: nmeros Azul claro: operadores matemticos, puntos, parntesis Verde: Reminders, notas, no se ejecutan, sirven para que lo leas, como anotaciones para decir que aqu va algo, y que es. Se ponen con # Morado (entre comillas): Son textos. Se usan para las variables de texto (string), imprimir mensajes, el nombre de archivos Negro: Nombres de variables, clases, definiciones, propiedades de clases, y el comando print (para mandar mensajes de error) Hay muchas palabras nuevasno se desanimen, se explicarn.

3. Operadores matemticosSon utilizados en las operaciones matemticas. Suelen ser parecidos a nuestra forma de expresar las matemtica. + : signo de suma - : signo de resta * : signo de multiplicacin / : signo de divisin ** : signo de potenciacin % : signo de resto de divisin

-5-

Hay algunas operaciones que no estn disponibles de forma tan simple, como el porcentaje o la raz. Ahora vienen explicadas: Raz: se usa la potenciacin de la siguiente manera: num** (1/raiz), siendo raiz el valor del exponente de la raiz que deseamos hacer (raz cuadrada 2, raz cbica 3 Porcentaje: se multiplica el valor por el nmero del porcentaje que se desea obtener, y se divide por cien (num* porcentaje/100). Tambin hay formas de abreviar algunas operaciones. Por ejemplo, estamos dando a una variable num su mismo valor sumndole 5, pues se escribira de esta manera siguiendo el cdigo normal: :: Cdigos :: num = num + 5 Pero se puede abreviar en la siguiente sentencia: :: Cdigos :: num += 5

Ruby tambin tiene la opcin de usar decimales, solo se ha de aadir a uno de los trminos de la operacin matemtica, una coma y tantos ceros como decimales quieres que use. Recomiendo no pasarse con los ceros.

4. Variables4.1 Introduccin Las variables de Ruby, son auto definidas (no hay que definirlas) y su tipo de valor es variable (igual pueden contener un nmero como un booleano (true, false)). A pesar de que sean variantes, no se puede decir, ahora eres de texto, ahora de nmero, para ello hay que definirlas nulas (vaciarlas /formatearlas) con la sentencia siguiente: :: Cdigos :: variable = nil Es preferible no usar maysculas (se puede) pero si usas maysculas y luego te refieres a la variable sin dichas maysculas, no funciona. Es decir: si t defines la variable Hola, y te refieres a ella mas tarde como hola, no funcionar.

4.2 Tipos segn su duracin Hay tres tipos de variables en orden a su duracin: Globales: se inician cuando son llamadas por primera vez, y se terminan cuando se cierra el programa. Se usaran para variables que no queremos que pierdan nunca su valor mientras el juego est activo. Para que el valor se guarde en un archivo se usar una sentencia que explicar mas tarde. Se diferencian en que son introducidas por el smbolo del dlar $.

-6 De Clase: se inician cuando son llamadas, y se terminan cuando la clase donde fueron llamadas se termina o vaca. Se diferencian en que son introducidas por el carcter del arroba @. De Mtodo: se inician cuando el mtodo se inicia, y se terminan cuando se sale del mtodo. No funcionan fuera de dicho mtodo. No van introducidas por ningn carcter.

4.3 Nmeros Las variables numricas se caracterizan por contener un nmero. Puede ser un entero desde unos 2 billones a menos ese mismo nmero. Pero tambin puede tener comas. Para definir una variable numrica has de darle un valor numrico a una variable liberada (cuyo valor es nil o no ha sido definida (segn su nivel (global, de clase o de mtodo)) :: Cdigos :: num = 5

OPERACIONES :: Cdigos :: m = 1 m += 1 m -= 1 m *= 2 m /= 2 #=>equivale a m = m + 1 #=>m = m 1 -> 1 -> 2

#=>m = m * 2

#=>m = m / 2 -> 1

Mtodos .chr: devuelve al carcter ASCII correspondiente al nmero Para ver el cdigo ASCII puedes hacerlo http://ascii.cl/es/. .empty? : devuelve true si la variable est vaca. .to_s: lo convierte en una cadena de texto.

4.4 Textos Las variables String contienen una cadena de texto. :: Cdigos :: #esta variable string no contiene texto, pero es de texto @variablestring1 = #esta variable string contiene un texto @variablestring2 = Hola a todos!

No puedes convertir directamente una variable de nmero en una de texto, para ello usa la siguiente sentencia:

-7-

:: Cdigos :: #esta es una variable de nmero @numero = 10 #esta es una variable de texto @texto = #{@numero} #esta variable tendr el valor del triple de @nmero @texto = #{@numero *3} Para unir dos variables de texto se usa el comando + entre las dos variables a sumar. :: Cdigos :: str1 = Hola, str2 = Qu tal? #esta variable de texto contendr la unin de las cadenas de #texto str1, y str2. @texto = str1 + str2 #ahora @texto contiene Hola, Qu tal?

Mtodos .size: nos devuelve el nmero de caracteres que tiene la cadena. .upcase: las letras se muestran maysculas. .downcase: las letras se muestran en minsculas. .gosub (patrn) {comando}: busca un patrn en el texto y ejecuta un comando. .insert (caracter, insercin): inserta un texto tras el carcter seleccionado. .empty? : devuelve true si la variable est vaca. .include? (string): devuelve true si la cadena string est en el texto donde se aplica este mtodo. .delete (string): elimina una cadena de texto string del texto donde se aplica este mtodo.

4.5 Booleanos Son variables que slo pueden adquirir 2 valores: true (verdadero, si, 1) o false (falso, no, 0). Su nombre viene de un matemtico llamado Boole, que invent una rama de las matemticas que se dedica a estudiar si es verdad o no. Se emplean con el llamado lgebra de boole, que aunque no es necesario conviene conocer. Se emplea con ceros y unos (como si fuera binario) pero aqu, para evitar los voy a sustituir el cero por el false y el uno por el true. Propiedades bsicas de lgebra de boole: Suma: true + false = true; true + true = true; false + false = false Multiplicacin: true * false = false; true * true = true; false * false = false Negacin: true (negado) = false; false (negado) = true El lgebra de boole es algo ms extenso y complicado, pero ocupara demasiado para incluirlo aqu. Mas adelante esto ser bastante til, cuando veamos los condicionales.

-84.6 Arrays Son variables excepcionales que pueden contener ms de un valor en su interior. Para poder usarlas hay que definirlas como arrays con: :: Cdigos :: array = [ ] #dentro de los corchetes pueden entrar algunas #ordenes como estas, #pero no es necesario para definirla. array2 = [hola, qu tal?, adis]

Los arrays pueden contener objetos tambin. Y como cosa excepcional, pueden contener ms de un tipo de valor: :: Cdigos :: array3 = [hola, 10, true] Mtodos .clear: vaca la variable. .compact: al usarlo junto a la variable, devuelve el Array sin espacios vacos .compact: borra todos los espacios vacos. .include? () busca un valor u objeto situado en los parntesis. Devuelve un true o un false. .push(): incluye como ltimo elemento del array lo que halla en los parntesis.

4.7 Tablas (Hash Tables) Tambin llamados Arrays Asociativos, este tipo excepcional de array permite relacionar una clave con un valor, en vez del ndice de los Arrays. Para poder usar un array asociativo necesitamos definirlo como tal aadindole una clave con su valor o diciendo que queremos que sea un array asociativo. :: Cdigos :: hash = { } #dentro de las llaves pueden entrar algunas #asociaciones, pero no es necesario para definirla. array2 = {Valor 1=>12, Valor 2=>3} # el vnculo de asociacin es => La llamada a los valores de un array asociativo se realiza de la siguiente manera: :: Cdigos :: print hash [Valor 1] # Mostrar 12 print hash [Valor 2] # Mostrar 3 print hash [Hola] # Mostrar nil Mtodos: .delete (string): elimina la clave que equivalga al valor del parmetro, y con ella su valor. .keys: devuelve un array normal con las claves. .values: devuelve un array normal con los valores.

-9-

4.8 Objetos Las variables tambin pueden contener objetos, los cuales se definen en clases (class). Hay una serie de variables objeto globales muy importantes en el desarrollo del juego y que deben de ser conocidas para su correcta utilizacin: $scene: contiene la clase de escena que se muestra en el preciso instante. Si por ejemplo estamos en el men de objetos, la variable $scene contendr el objeto Scene_Items. $data_actors: contiene a los actores o personajes principales del juego. $data_items: contiene los datos de los objetos utilizables. $data_weapons: contiene los datos de las armas. $data_armors: contiene los datos de los protectores y accesorios. $data_skills: contiene los datos de las habilidades. $data_animations: contiene los datos de las animaciones. $data_troops: contiene los datos de los grupos de enemigos. $data_classes: contiene los datos de las profesiones. $data_enemies: contiene los datos de los enemigos. $data_states: contiene los datos de los estados. $data_tilesets: contiene la informacin de los tiles. $data_comon_events: contiene la informacin sobre los eventos comunes. $data_system: contiene la informacin del sistema. :: Notas :: Todos las variables globales $data se cargan en el mtodo main de la clase Scene_Title, y hay que mencionar que no son objetos simples, si no arrays que contienen objetos. De tal manera que si queremos acceder a uno tendremos que poner su index. Tambin mencionar que las variables $data_... contienen puramente datos. $game_system: contiene la clase Game_System, contiene variables del sistema. $game_temp: contiene la clase Game_Temp, contiene variables temporales, como el formato de batalla u otras cosas. $game_switches: contiene la clase Game_Switches, contiene los interruptores del juego. Se accede a ellos de la siguiente manera: $game_switches[id] = true. Como veis, es un Array. $game_variables: contiene la clase Game_Variables, que contiene las variables numricas del juego. Se accede a ellas de idntica manera que los interruptores. Es un Array. $game_self_switches: contiene la clase Game_SelfSwitches, que contiene los valores de los interruptores locales. Es un Array. $game_screen: contiene la clase Game_Screen, que contiene la pantalla a mostrar, as como las imgenes, los efectos de clima, el tono... $game_actors: contiene la clase Game_Actors, que contiene los datos de los actores que estn en el grupo. Es un Array. Cada uno de los ndices de esta variable son el cdigo de la clase Game_Actor. $game_party: contiene la clase Game_Party, que incluye los cuatro personajes que tiene el grupo, y otras caractersticas del grupo, tales como el oro, los objetos, los pasos, los protectores... $game_troop: contiene la clase Game_Troop, en la cual se incluyen llamadas a la clase Game_Enemy, y que contiene las caractersticas de los grupos de enemigos o tropas. $game_map: contiene la clase Game_Map, en la cual se incluyen las opciones de los mapas. $game_player: contiene la informacin escrita en Game_Player, y esta contiene las caractersticas del personaje principal. :: Notas :: Todas estas variables se definen en el mtodo command_new_game de Scene_Title, y se pueden modificar en las pginas de cdigos de la parte de arriba.

- 10 -

En el fondo, los tipos de variables que estudiamos antes son tambin objetos.

5. PrintEste comando sirve para enviar un cuadro de mensaje con un texto que definiremos despus: :: Cdigos :: print Buenos das! Eso mostrar un mensaje que dice Buenos das!. Tambin podemos hacer que muestre cualquier variable, sea del tipo que sea. :: Cdigos :: booleano = true print booleano numero = 12 print numero texto = hola print texto

#=> true #=> 12 #=>hola

Esto ltimo, es especialmente til en la fase de desarrollo de un script, ya que sera la nica manera de mostrar valores de forma clara, pero cuidado con ponerlo en un mtodo update, pues se repetir eternamente si no ponis un lmite. Si intentis hacer print con una variable de objeto, os mostrar la almohadilla, el nombre del objeto y una serie de valores. Existe una variante de Print llamada p, pero muestra las comillas.

6. Grficos6.1 Sprites Para mostrar grficos, primero tenemos que definir una variable como un objeto bitmap, o Sprite, lo que no es ms que una variable objeto. :: Cdigos :: @imagen = Sprite.new Tras ello, hay que definir que sprite o imagen queremos que muestre. Para eso usamos lo siguiente: :: Cdigos :: @imagen.bitmap = ("Graphics/subcarpeta/archivo.png")

- 11 Donde pone subcarpeta hay que poner la carpeta donde se aloja. Si es un battler, la carpeta ser Battlers. Donde pone archivo ir el nombre del archivo. Hay una forma ms rpida que es usando la sentencia RPG::Cache que funciona de la siguiente manera. Se aplica sobre la propiedad bitmap del sprite que antes definimos. Tras poner RPG::Cache (son dos veces dos puntos) aadimos un punto, y el nombre de la carpeta con minsculas y en singular (quitando la s), y tras esto, entre parntesis y con comillas, el nombre del archivo sin la extensin. :: Cdigos :: @imagen.bitmap = RPG::Cache.battler("002-Fighter02") La ventaja de usar sprites, es que se pueden colocar en cualquier parte de la pantalla, y modificar su posicin con x e y (@imagen.x y @imagen.y), y con los mtodos ox y oy podemos definir el origen de la imagen (que punto de la imagen es donde se aplica que x se igual a la posicin dada). Son por tanto para escenas, como fondos e imgenes independientes. (el fondo del title es un Sprite, los battlers se usan como objetos sprite...). Esto no es lo mismo si usamos de otra manera los grficos.

6.2 Grficos incrustados en ventanas Si necesitamos un grfico que se muestre dentro de una ventana, y si esta se mueve, que el tambin se mueva, necesitamos incrustarlos. Para ello existen los Rectngulos (llamados rect). Primero definimos la imagen, no como sprite, sino como imagen dependiente:

:: Cdigos :: im = RPG::Cache.battler("003-Fighter03") Tras esto, la imagen no se mostrar, para que se muestre necesitamos crear un rectngulo donde aparecer la imagen. Con este sistema podemos seleccionar un cacho de la imagen que deseamos ver, sin tener que verla entera. Se usa con los Characters, por ejemplo en algunos mens de guardado, que mediante una operacin matemtica, hacen que se mueva. El cdigo del Rectngulo es el siguiente (recomiendo que el rectngulo sea una variable corta):

:: Cdigos :: src_rect = Rect.new(picx, picy, ancho, alto) Donde pone picx, ir la coordenada x desde donde aparecer la imagen, en picy, la coordenada y donde aparecer la imagen, y en ancho y alto el ancho y el alto. Cuando digo la coordenada donde aparecer la imagen, significa algo as como, si tenemos una imagen de 48x48, dividida en 4 sectores de 24x24, y queremos mostrar la de abajo a la izquierda, el picx ser 24, el picy ser 0 y el ancho y el alto sern 24. El ltimo paso es mostrar la imagen dentro del rectngulo:

- 12 :: Cdigos :: self.contents.blt(x, y, im, scr_rect, opacidad) En x ir la coordenada x donde se mostrar el rectngulo con la imagen dentro, en y la coordenada y, en im se pone la variable de la imagen, en scr_rect se pone el Rect que definimos antes (se puede poner como variable src_rect o como definicin Rect.new(24, 0, 24, 24)# esto es el ejemplo de antes) y por ltimo, en opacidad ir la opacidad, en un nmero de 8 bits (del 0 al 255), siendo 255 el mximo de opacidad, y 0 la invisibilidad. Si no ponemos nada en este ltimo parmetro, se usar el valor 255, es decir, opaco.

6.3 Puntos y lneas Poner un punto es fcil, y una lnea es igual. El comando es este: :: Cdigos :: self.contents.fill_rect (x, y, ancho, alto, color, opacidad) De esta manera con la x y la y, definimos la posicin del rectngulo relleno, que es lo que significa fill_rect; con el ancho y el alto definimos la altura y la anchura del rectngulo (un punto tiene ambos valores en 1); el color se define as: :: Cdigos :: Color.new =(red, green, blue, opacity) #Red=rojo, Green=verde, Blue=azul. #la opacidad es opcional, si no se pone adoptar el valor 255 (opaco) Y por ultimo queda la opacidad. Esta, como siempre, es opcional, y si no se pone adoptar el valor 255 (opaco). Para poner un punto, ancho y alto tienen que ser 1, el. Para hacer una lnea, uno de los dos ha de ser ms de 1 y el otro 1. Si le damos a los dos un valor superior a 1, nos saldr un rectngulo. Para hacer una lnea inclinada, habr que usar funciones (de matemticas) y una sentencia for. Ahora explicar en profundidad la sentencia Color.new. Existen ciertas constantes del juego que representan unos colores determinados. Estas constantes son modificables desde la clase Window_Base de los scripts. :: Cdigos :: def normal_color return Color.new(255, 255, 255, 255) end def disabled_color return Color.new(255, 255, 255, 128) end def system_color return Color.new(192, 224, 255, 255) end def crisis_color

- 13 return Color.new(255, 255, 64, 255) end def knockout_color return Color.new(255, 64, 0) end Al igual que puedes modificarlos, se pueden aadir ms. Slo hay que poner def (que indica comienzo de un mtodo), el nombre del color; en la lnea siguiente la palabra return (que devuelve al cdigo que la llam la variable que se encuentre detrs suyo) seguida de la Sentencia Color.new que explicamos antes (que contiene un color en RGBA (Rojo, Verde, Azul y Opacidad) siendo la opacidad un parmetro opcional que adopta el valor de 255 si se omite); y en la lnea siguiente la palabra end, que indica que el mtodo termina en ese punto. Con esto, un poco de imaginacin, y el paint al lado para buscar colores en RGB (Red, Green Blue (Rojo, Verde, Azul)) y para ver donde colocar cada pxel, podis hacer scripts que dibujen cosas.

7. Condicionales7.1 If (if then else elsif end) Se corresponde con la sentencia if. Es puesta en azul oscuro, por lo que NO ADMITE MAYSCULAS. Corresponde a los condicionales humanos. Su sintaxis es esta: if comparacin acciones si se cumple else acciones si no se cumple end else no es siempre necesario, solo se usa en el caso de que queramos usar excepciones. para la comparacin necesitaremos conocer los operadores de comparacin, que son: == : igual >: mayor que < : menor que >= : mayor o igual que