El mínimo programa posible que se puede realizar es:
public void procesa() { }
Fuera de esta función, se pueden declarar cualquier cantidad de funciones y variables goblales como si el programa estuviera enteramente escrito en C. Sin embargo, el lenguaje no admite la creación de estructuras ni de clases tipo C++.
En el directorio de trabajo se encuentran los códigos fuente de los enemigos de ejemplo: Random (aleatorio) Follower (seguidor) Healer (curador) Hunter (cazador)
La función procesa() se mandará llamar automáticamente en cada frame de animación de la batalla. Esta función puede mandar llamar a cualquier otra función definida en el programa, o puede cambiar el valor de cualquier variable que se desée, pero se debe tener en cuenta que la función debe ejecutarse en menos de 250 milisegundos. Si la ejecución excede este tiempo, el jugador correspondiente perderá la batalla automáticamente.
Dentro de la función procesa() puede haber más de una llamada a funciones de acción, (cura, bola, rayo o camina) sin embargo, sólo se ejecutará la primera de ellas.
Para crear arreglos, se utiliza una notación un poco distinta a la de C, en lugar de declararlos como int *a;, se declaran como int[] a;, mientras que la inicialización es igual: a = new int[n];, con la ventaja extra de que no es necesario liberar la memoria. Además, para crear matrices es posible hacer int[][] m; m = new int[r][c];.
La arena tiene tamaño de 900 x 700, siendo el punto (0, 0) la esquina superior izquierda, y el punto (899, 699) es la esquina inferior derecha.
Al comenzar, tienes 100 puntos de vida, y 100 puntos de magia. Pierdes cuando tus puntos de vida llegan a cero, y a partir de ese momento ya no se invocará a tu función procesa(). Además, si tratas de accesar a memoria que no te corresponde, (como por ejemplo al hacer enemigos[5]), inmediatamente perderás todos tus puntos de vida.
La única manera de curarte (subir tus puntos de vida) es por medio del conjuro cura(), y la única manera de recuperar tus puntos de magia es estar en el área de efecto de una piscina ("pool"). El aumento de una piscina se sumará a tu magia (hasta un máximo de 100) por cada instante (cuadro de animación) que pases en el área. Si te encuentras en el área de efecto de dos o más piscinas, ¡la ganacia es acumulativa!, así que si estás en el área de tres piscinas con aumento de 3, recuperarás 9 puntos de magia por cada instante.
Los conjuros tienen diferentes tiempos de lanzamiento y daños, en la siguiente tabla se encuentra esta información. El tiempo de lanzamiento es el tiempo que tarda lanzando el conjuto tu personaje. Durante todo este tiempo estás indefenso y no puedes moverte (es decir, no se manda llamar tu función procesa()). Esto puede ser aprovechado por otro personaje para, por ejemplo, lanzarte un conjuro.
Conjuro | Tiempo lanzamiento | Duración | Gasto de magia | Daño |
cura | 15 | Instantáneo | 35 | -10 |
rayo | 20 | 70 | 9 | 7 |
bola | 45 | 60 | 14 | 3 |
El daño es por cada instante (cuadro de animación) que se esté en el área de efecto del conjuro. Así, si un personaje está dentro del efecto de una bola de fuego por 10 instantes, se hará un total de 30 puntos de daño, mientras que un efecto completo 60 instantes * 3 daño = 180 daño!
Las condiciones para if, while, y for DEBEN ser booleanas, lo que significa que es necesario hacer una comparación del tipo ==, !=, >, <, >= o <=. En otras palabras, se debe usar if( activado( enemigos[i] ) == 1 ) en lugar de if( activado( enemigos[i] ) ).
Acciones | |
---|---|
void camina(int x,int y) | Camina un paso hacia el punto (x,y) y termina tu acción. |
int bola(int dir) | Lanza una bola de fuego a la direccion dir. La distancia lanzada es de 100 unidades y tiene un radio de 50. |
int rayo(int dir) | Lanza una rayo a la direccion dir. |
int cura(void) | Lanza la magia de curación. |
Funciones de posición y orientación | |
int posX(void) | Regresa la posición x en donde te encuentras parado. |
int posY(void) | Regresa la posición y en donde te encuentras parado. |
int posX(objeto w) | Regresa la posición x en donde se encuentra parado el objeto w. |
int posY(objeto w) | Regresa la posición y en donde se encuentra parado el objeto w. |
int direccion(void) | Regresa la dirección hacia donde estás mirando. |
int direccion(objeto w) | Regresa la dirección hacia donde está mirando el objeto w. |
int posicionAproximada(objeto w) | Regresa un entero indicando la dirección aproximada hacia donde está el objeto w, respecto a tu posición actual, es decir, si regresa un 0, quiere decir que el objeto está aproximadamente hacia el este. |
int distancia(objeto w) | Regresa la distancia en pixeles (entero) a la que está el objeto w de tu posición actual. |
Funciones de información | |
int activado(void) | Regresa cero o uno. Uno si estás vivo y cero si estás muerto. |
int activado(objeto w) | Regresa cero o uno. Uno si el objeto w esta activo (si es jugador significa que esta vivo, si es magia, significa que está activo) y cero si el objeto o magia están inactivas o muertos. |
int vida(void) | Regresa la cantidad de vida que te resta. El rango va de 0 a 100 |
int vida(objeto w) | Regresa la cantidad de vida que le resta al objeto w. El rango va de 0 a 100 |
int magia(void) | Regresa la cantidad de magia que te resta. El rango va de 0 a 100 |
int magia(objeto w) | Regresa la cantidad de magia que le resta al objeto w. El rango va de 0 a 100 |
int casteando(objeto w) | Regresa uno si el objeto w se encuentra casteando y cero en caso contrario. |
int numPiscinas(void ) | Regresa el numero de piscinas que hay. |
int numEnemigos(void ) | Regresa cuantos enemigos hay. |
int numConjuros(void ) | Regresa el numero de conjuros que hay. Los conjuros pueden estar activos o no. La lista se inicia desde el primer conjuro lanzado. |
Funciones Para Objetos | |
int afecta(objeto conj,int x,int y) | Regresa uno si el conjuro "conj" afecta el punto (x,y). Cero en caso contrario. |
int radio(objeto pool) | Regresa el radio de efecto de la piscina de mana "pool" pasada como argumento. |
int aumento(objeto pool) | Regresa la cantidad de magia que te incrementa la piscina "pool". |
Variables | |
objeto* piscinas | Arreglo que tiene la lista de las piscinas existentes. El arreglo tiene largo igual al valor regresado por la función numPiscinas(). Los objetos se accesan como los elementos de un arreglo (por ejemplo piscinas[i]). |
objeto* enemigos | Arreglo que tiene la lista de los enemigos existentes, vivos y derrotados. El arreglo tiene largo igual al valor regresado por la función numEnemigos(). Los objetos se accesan como los elementos de un arreglo (por ejemplo enemigos[i]). |
objeto* conjuros | Arreglo que tiene la lista de todos los conjuros existentes, activos y no activos. El arreglo tiene largo igual al valor regresado por la función numConjuros(). Los objetos se accesan como los elementos de un arreglo (por ejemplo conjuros[i]). |
Funciones misceláneas | |
int random(int) | Regresa un número aleatorio entre cero y el número especificado. |
int abs(int w) | Regresa el valor absoluto del parámetro, dado como entero. |
double abs(double w) | Regresa el valor absoluto del parámetro, dado como flotante de doble presición. |
int sqrt(int w) | Regresa la raíz cuadrada del parámetro, dado como entero. |
double sqrt(double w) | Regresa la raíz cuadrada del parámetro, dado como flotante de doble presición. |
double sin(double w) | Regresa el seno del parámetro en radianes, dado como flotante de doble presición. |
double cos(double w) | Regresa el coseno del parámetro en radianes, dado como flotante de doble presición. |
double ceil(double w) | Regresa el menor entero mayor que el parámetro, dado como flotante de doble presición. |
double floor(double w) | Regresa el mayor entero menor que el parámetro, dado como flotante de doble presición. |
double log(double w) | Regresa el logaritmo natural del parámetro, dado como flotante de doble presición. |
double exp(double w) | Regresa la exponencial del parámetro, dado como flotante de doble presición. |
Definiciones | |
direccion |
0 ESTE 1 NORESTE 2 NORTE 3 NOROESTE 4 OESTE 5 SUROESTE 6 SUR 7 SURESTE |