Anuncios

Bienvenidos sean a este post, en el post anterior terminamos nuestro primer juego y en el siguiente comenzaremos con el lenguaje interno del GameMaker pero antes veremos algunas nociones basicas.

Anuncios

Antes de comenzar vamos a aclarar un par de nociones basicas, el lenguaje se llama GameMaker Language por lo tanto para abreviarlo muchas veces lo llamare GML, la sintaxis del lenguaje es similar a C++ pero un poco mas simple, por ejemplo las lineas siempre deben terminar con el punto y coma (;) y los bloques iran siempre entre llaves ({}), hablemos del primer tema.

Anuncios

Variables

Las variables son el metodo mas universal que dispondremos para poder almacenar informacion en la memoria, basicamente lo unico que hace es reservar un espacion en memoria y en este guardara l ainformacion que le pasemos, a diferencia de C++ pero de igual forma que Javascript no es necesario definir cual es el tipo de dato de la misma, su sintaxis es la siguiente:

<var> nombreVariable = valor;
Anuncios

La palabra var es opcional aunque la buena practica es utilizarla, despues podemos usar el nombre que queramos pero como en todos los lenguajes debemos evitar usar las palabras reservadas como for, switch, if, etc., obviamente esto sucede mas en las personas de habla anglosajona pero nosotros usaremos otras nomenclaturas, para reasignar el valor de una variable es simplemente usar el nombre de la variable el igual y el nuevo valor.

Anuncios

Tambien el lenguaje posee algunas variables internas para los objetos, cuando trabajamos con el proyecto anterior vimos algunas:

  • x, se usa para el eje X de nuestro objeto
  • y, es para el eje Y de nuestro objeto
  • hspeed, la velocidad de desplazamiento horizontal
  • vspeed, la velocidad de desplazamiento vertical
  • health, se almacena la salud del jugador
Anuncios

Como estos hay muchos mas pero estos son los que mas usamos y usaremos en los proximos proyectos, por ultimo al igual que en el resto de los lenguajes las variables pueden ser globales o locales, cuando hablamos de globales quieren decir que seran accedidas por todo el programa, las de tipo local son solamente para el objeto y GameMaker tambien puede crear variables pueden ser de instancias pero de esto hablaremos mas adelante, antes de pasar al siguiente vamos a hablar de un tipo de variable muy especial.

Anuncios

Este tipo de variable es conocido como array o arreglo o matriz, dependiendo del libro del profesor, pero como su nombre original es array tiendo a estandarizarlo de esa forma, por eso menciono los otros dos, pero que tiene de distinto? El array nos permite almacenar mas de un dato a traves de distintas posiciones o ubicaciones en la misma, su sintaxis sera:

nombreArray[posicion] = valor
Anuncios

Donde posicion sera un valor numerico que comenzara desde 0 en adelante, todos los lenguajes a excepcion de Lua comienzan desde 0, por ejemplo para crear un array e ingresarle informacion seria de la siguiente manera:

var misDatos;
misDatos[0] = "Tinchicus";
misDatos[1] = "Masculino";
misDatos[2] = "Guerrero";
Anuncios

En este caso tenemos un array que almacena algunos datos basicos de nuestro personaje, donde por medio de una sola variable guardaremos mas de un dato que luego simplemente recuperaremos por medio de la posicion, por ejemplo si tenemos una variable llamada miNombre y le queremos asignar el nombre del personaje seria asi:

miNombre = misDatos[0];
Anuncios

En este ejemplo asignamos el valor almcenado en la primera posicion a la variable miNombre, mas adelante y con practica veran la comodidad de trabajar con este tipo de variable.

Anuncios

Dos detalles finales, el primero es que el tipo en el array debe ser siempre el mismo, es decir si son de tipo cadena todos deben ser cadena, si son de tipo numerico todo de tipo numerico, booleano de tipo booleano, no se pueden mezclar los tipos y este tipo de variable tambien es denominada Coleccion y entra en la misma categoria que otro tipo como son Vector, List, Map, etc dependiendo del lenguaje, pasemos al siguiente tema.

Anuncios

Condicionales

Los condicionales son funciones que se dedican a buscar que una condicion sea verdadera para poder ejecutar un bloque de instrucciones, entre los mas utilizados existen dos, hablemos del primero que es if.

Anuncios

El condicional if verifica si una condicion es verdadera y procede a ejecutarla, veamos su sintaxis:

if (condicion)
{
    ... instrucciones ...
}
else if (condicion)
{
    ... instrucciones ...
}
else
{
    ... instrucciones ...
}
Anuncios
Anuncios

El primer if evaluara una condicion y si es verdadera ejecutara todas las instrucciones que existan entre las primeras llaves, luego podemos usar un else if donde en caso de fallar el primer condicional verifica por medio de este una nueva condicion y en caso de ser verdadera procede a ejecutar el nuevo bloque de instrucciones, y por ultimo si ninguna condicion se cumple se utiliza un else para ejecutar unas instrucciones en caso de que todas fallen.

En este caso a else if lo podemos usar todas las veces que necesitemos con distintas condiciones y el else siempre sera uno solo, estara al final de todas las condiciones y es opcional, es decir que no es obligatorio su uso pero si es recomendable usarlo, tambien podemos anidar otros if dentro de los bloques de las condicionales pero esto ultimo es poco recomendable porque un uso excesivo de condicionales if y else if puede terminar en errores logicos y no solamente creara errores sino que a la hora de solucionarlos tendremos muchisimos dificultades de interpretarlos.

Anuncios

El siguiente condicional es una evolucion de if pero no lo reemplaza, es mas las dos se complementan entre si pero veamos su sintaxis:

switch (variable)
{
    case valor1:
        ... instrucciones ...
        break;
    case valor2:
        ... instrucciones ...
        break;
    ...
    case valorN:
        ... instrucciones ...
        break;
    default:
        ... instrucciones ...
        break;
}
Anuncios
Anuncios

La funcion switch recibe una variable, no una condicion, despues por medio de la palabra case evaluaremos los posibles valores que puede adoptar la variable que informamos, si es el caso ejecutara las instrucciones debajo de cada case y lo hara hasta encontrar el break correspondiente, podemos usar todos los case que necesitemos, por ultimo tenemos un default que trabaja como else donde se ejecuta si no se encontro ninguna coincidencia.

Un par de temas, switch no maneja condiciones sino simplemente compara el valor que informemos en el case con respecto a la variable, pero podemos usar el if dentro del case para evaluar una condicion X, obviamente si lo piensan un poco la funcion switch lo usamos para los menu, pero no se puede hacer lo mismo con if? Tecnicamente sí pero si utilizamos a if, el programa pasara por todos los condicionales sin importar si coincidio o no, en cambio el switch una vez que coincidio no seguir evaluando mas condiciones, esto nos ahorrara ciclos de CPU y en proyectos chicos no nos afectara pero en proyectos mas grandes se necesita cada uno de estos ciclos como las hogueras en Dark Souls. =D

Anuncios

Por este motivo es muy util pensar que condicional sera mejor para nuestras necesidades pero repito ninguno reemplaza al otro sino que se complementan entre si para lograr darle a nuestros programas de cierta “inteligencia”, pasemos al siguiente tema.

Anuncios

Bucles

Los bucles son unas funciones muy interesantes porque nos permiten repetir un proceso la cantidad de veces que necesitemos, por ejemplo nosotros podemos necesitar el incremento de un variable X y para esto podemos usar el bucle universal por excelencia como es for.

Anuncios

La funcion for es un bucle que se repetira mientras una condicion se cumpla y una vez cumplida terminara el ciclo, su sintaxis es la siguiente:

for(inicio; condicion; expresion)
{
    ... instrucciones ...
}
Anuncios

En la parte llamada inicio sera la encargada de crear e iniciar una variable, la parte de condicion es donde se evalua hasta cuando se repite el bucle y la expresion es la encargada de una accion para cumplir la condicion, dentro del bloque tendremos todas las instrucciones que se deben repetir, vamos a ver un ejemplo para entenderlo mejor:

for(var i=0; i < 5; i++)
{
    arreglo[i] = i * 2;
}
Anuncios

Observen como primero creamos una variable llamada i con el valor de 0, lo siguiente sera la condicion donde lo haremos mientras i sea menor a 5, por ultimo utilizamos un operador que incrementara en 1 a i por cada pasada, ya hablaremos despues sobre esto, por ultimo vamos a suponer que tenemos un array llamada arreglo y usaremos a i para decir en que posicion del array debemos guardar el resultado de i multiplicado por 2, ya veremos el tema de operadores, esto lo hara hasta que se cumpla condicion.

Anuncios

Esta funcion tambien puede ser infinita con una simple modificacion:

for(;;)
{
    ... instrucciones ...
}
Anuncios

En este caso eliminamos todas las condiciones y variables del bucle por lo tanto este bucle no terminara nunca y para salir de este debemos usar al condicional if y el break para que se ejecute cuando se cumpla la condicion.

Anuncios
Nota: La palabra break y continue son para salir de ciclos, el primero saldra completamente del ciclo y el segundo omitira esa pasada.
Anuncios

Una forma mas practica de crear un ciclo infinito o casi es por medio de do…until o while, veamos ambas sintaxis:

while
while(condicion)
{
    ... instrucciones ...
}
Anuncios
do…until
do
{
    ... instrucciones ...
} 
until (condicion);
Anuncios

Ambos trabajan de la misma forma pero solo cambia su sintaxis la cual tampoco son muy diferentes, basicamente ambos bucles se haran mientras la condicion X se cumpla, es decir que podemos hacerlo mientras un valor sea distinto a, se ingrese un valor en una variable, se presione una tecla, etc, la diferencia entre ambos va a radicar que en while primero verifica la condicion y si se cumple ejecuta el bloque, en cambio para el do primero ejecuta el bloque y luego verifica si debe repetir la operacion o terminar, parece una tonteria pero hay veces que nuestro programa necesitara una de estas conductas para determinadas circunstancias, por eso dependera de las necesidades del momento, pasemos al siguiente tema.

Anuncios
Nota: Puede suceder que hoy no noten la diferencia porque las CPUs son tan rapidas que no la veremos pero antiguamente era muy importante esta diferencia.
Anuncios

Operadores

Los operadores seran los que usaremos para realizar operaciones de varia indole, veamos a los operadores mas basicos como son los matematicos:

OperadorDescripcion
+Adicion
Sustracion
*Multiplicacion
/Division
%Devuelve el resto de la division
Anuncios

Como pueden darse cuenta estos operadores los usaremos para hacer nuestras cuentas, pero tambien tendremos unos operadores especiales:

OperadorDescripcion
++Incrementa el valor de la variable en 1
Decrementa el valor de la variable en 1
+=Toma el valor de la variable y lo incrementa con un nuevo valor
-=Idem al anterior pero lo disminuye en base al valor informado
*=Idem al anterior pero con la multiplicacion
/=Idem al anterior pero con la division
Anuncios

Para entender mejor el concepto vamos a ver el siguiente ejemplo donde tenemos una variable con un valor de 10:

valor = 10;
valor + 1;      // El nuevo valor es de 11.
valor - 1;      // El nuevo valor es de 9.
valor++;        // El nuevo valor es de 11.
valor--;        // El nuevo valor es de 10.
valor += 10;    // El nuevo valor es de 20.
valor -= 10;    // El nuevo valor es de 10.
valor *= 10;    // El nuevo valor es de 100.
valor /= 10;    // El nuevo valor es de 10.
Anuncios

Observen como se modifica el valor de una manera muy simple, esto que hicimos recien equivale a hacer una formula como la siguiente:

Formula         Equivale a:

valor++     =>  valor = valor + 1;
valor += 10 =>  valor = valor + 10;
Anuncios

Podriamos decir que estos operadores son como abreviaturas de formulas porque el resultado es exactamente el mismo, si se preguntan porque los valor de la variable no cambiaron en los primeros dos operadores es debido a la inmutabilidad de lo cual hablaremos pronto pero continuemos con los siguiente operadores:

OperadorDescripcion
!Negador logico (invierte el valor informado)
&&Operador AND Logico
||Operador OR Logico
==Equivale a
!=Distinto que
<Menor que
>Mayor que
<=Menor o igual que
>=Mayor o igual que
Anuncios
Anuncios

Estos seran operadores que usaremos principalmente para los condicionales ya que nos permitiran trabajar de tal forma que obtengamos un resultado logico, por ejemplo el negador (!) invertira un valor booleano es decir que si el valor informado es true (verdadero) lo transforma en false (falso) y viceversa, el siguiente operador toma dos valores y los compara entre si y si ambos son del mismo valor, true o false, este operador devuelve true de lo contrario devuelve false, el siguiente operador devuelve un true solamente si alguno de los dos valores es true de lo contrario siempre devuelve false, cuando trabajemos con condicionales veremos como funciona perfectamente.

El siguiente operador devuelve true solo si ambos valores son iguales, el siguiente lo hace si ambos valores son distintos, el siguiente si el valor de la izquierda es menor que el de la derecha, el siguiente si el de la izquierda es mayor que el de la derecha, y los ultimos dos trabajan de la misma forma que los anteriores pero tambien verifica si los valores son iguales para devolver un true, con esto cubrimos los operadores bases o los que mas usaremos durante nuestros desarrollos, pasemos a los ultimos temas.

Anuncios

Literalidad e Inmutabilidad

Cuando hablamos de literalidad nos referimos a la forma que informamos un valor y este no se puede modificar, por ejemplo:

show_message("Mensaje Literal");
Anuncios

En este caso lo literal es el mensaje entre comillas porque no podremos modificarlo de ninguna forma externa y solamente en el codigo, es decir que todo valor que pasemos directamente de esta forma no podran ser modificados, pasemos al siguiente tema como es la inmutabilidad.

Anuncios

Cuando hablamos de inmutabilidad nos referimos a que las variables siempre tendran el mismo valor hasta que le asignemos uno nuevo, por ejemplo en el caso de los operadores tuvimos esta operacion:

valor + 1;
Anuncios

En este caso dijimos que se incrementa el valor en 1 y pasaria a ser 11 pero como no lo asignamos a ninguna parte esta operacion se perdera al volver a utilizar la variable valor, esto es lo que llamamos inmutabilidad pero se quebraria con la siguiente modificacion:

nuevo = valor + 1;
Anuncios

En este caso no se pierde el nuevo valor pero se almacena en otra variable (nuevo) y valor seguira con el mismo valor de antes, tambien se lo podemos asignar para modificarlo pero en ese cambio convendria mas usar:

valor++;
Anuncios

La cual como dijimos antes equivale a:

valor = valor + 1;
Anuncios

Parece complicado pero no lo es siempre y cuando recuerden almacenar los cambios que hacemos, antes de finalizar vamos a hablar sobre el ultimo tema de este post.

Anuncios

Comentarios

El ultimo tema que nos falta tocar son los comentarios, el comentario tiene dos funcionalidades; la primera es comentar en una forma mas completa una parte de nuestro codigo, veamos los dos tipos de comentarios:

Anuncios

Comentario de una sola linea:

// Es un comentario
var miVar = "Tinchicus"; // Esto es un comentario tambien

Comentario de varias lineas:

/* Todo esto es un bloque 
de comentario que servira 
para hacer una descripcion
mas especifica */
Anuncios
Anuncios

El primer tipo sirve para describir una linea, puede estar arriba o abajo, tambien por detras del punto y coma porque todo lo que este detras de la doble barra sera ignorado por el lenguaje, en cambio el segundo tipo nos permite comentar en un bloque de lineas sin importar la cantidad siempre y cuando este entre /* y */, todo lo que haya ahi sera ignorado por el lenguaje, y aca entra la segunda funcionalidad como es anular una parte del codigo, en general van a descubrir que casi nadie comenta el codigo sino que lo usan para anular una parte del codigo ya sea para depuracion o porque tenemos una funcion mejorada pero no queremos perder la funcion vieja, sea cual sea el motivo es muy raro que se comente el codigo para su finalidad sino mas bien para omitir esa parte del programa, pero recuerden que un comentario puede ayudarnos a recordar no solamente que hacia esa parte del codigo sino tambien es ideal para que alguien pueda continuarlo por nosotros pero es muy probable que en determinados momentos eliminen o comenten un bloque porque lo reemplazaremos por otro, cuando digo esto me refiero a lo dicho anteriormente.

Anuncios

Ahora con esto hemos concluido las nociones basicas mas basicas que utilizaremos al momento de utilizar el lenguaje GML que veremos a partir del proximo post.

Anuncios

En resumen, hoy hemos visto todas las nociones basicas del lenguaje, como se finalizan las lineas, como se establecen los bloques, como son las variables, los arrays, que es y como trabaja dos tipos de condicionales, lo mismo hemos hecho con los tipos de bucle que mas usaremos, por ultimo hemos visto algunos de los operadores que mas usaremos, asi como es la literalidad y la inmutabilidad, y por ultimo los comentarios para que fueron pensados y para que se usan realmente xD, espero les haya gustado sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Donación

Es para mantenimento del sitio, gracias!

$1.00