jueves, 5 de agosto de 2010

Picaladrillos

Bueno, hoy os presento el Picaladrillos. Es el típico Arcanoir de toda la vida pero echo por mi.

http://pensarescompartir.com/lahsoft/lahsoftcorp/?direc=fenix/&id=2010-08-05_Picaladrillos.rar

Instrucciones de uso:
Lo descomprimís todo en la misma carpeta. Y le dais a "ejecutar.bat".

Controles:
--> : Mueve la pala a la derecha.
<-- : Mueve la para a la izquierda. Ctrl: Crea una nueva bola.
Crear una nueva bola cuesta 1 punto.
Romper un ladrillo da 2 puntos (creo recordar).

Para cerrar del juego hay dos formas:
  • Acabar con todos los ladrillos.
  • Alt + tabulador, y cuando cambie de pantalla, cerrar la consola que veais.
Aunque en ese ".rar" viene el código os lo pongo aquí. Siento que no esté tabulado, pero esque es mucho código como para ponerme a hacer ñoñerías. Buscaré un sistema mejor para subirlo:

import "mod_map";
import "mod_key";
import "mod_text";
import "mod_grproc";
import "mod_proc";
import "mod_math";
import "mod_screen";
import "mod_video";
import "mod_rand";

global
int blocksleft;//Contará la cantidad de ladrillos que hay aún
int aux=4;
int punt=0;
end

process main()
private
int i,j;//Variables para los bucles
int tes;
int aux2=1;
end
begin
set_mode(640,480,32, mode_fullscreen);
load_fpg("breakout.fpg");
paddle(320,460); //Raqueta

/*Los dos for siguientes sirven para dibujar en pantalla los ladrillos que tendremos que
destruir. La estructura es sencilla: el primer bucle sirve para darle 10 posiciones
horizontales diferentes a los ladrillos, y el segundo sirve para dar 3 posiciones
verticales. Así que cada vez que lleguemos a la llamada al proceso block, dibujaremos un
ladrillo en una de las 10 posiciones horizontales posibles y en una de las 3 posiciones
verticales posibles, con lo que al final tendremos 30 ladrillos distribuidos en 3 filas y
10 columnas*/
for(i=0;i<20;i++)
for(j=0;j<5;j++)

//Como creamos un ladrillo,tenemos que añadirlo al contador
blocksleft++;

/*Dibujamos el ladrillo propiamente dicho.Los números están para ajustar la posición a
las medidas de la pantalla.Recuerda que para que cuadre el gráfico del ladrillo ha de
tener unas dimensiones de 28x138*/
block(i*32+16,j*16+8);
end
end
write(0,180,230,5,"Ladrillos que faltan: ");
write_var(0,180,230,3,blocksleft);
write(0,180,430,5,"Tu puntuación: ");
write_var(0,180,430,3,punt);
tes=write(0,180,245,5,"Pulse CTRL para empezar");
loop

//Puedes crear una bola cuando quieras
if(key(_control))
if(aux2==1)
delete_text(tes);
aux2=0;
end

//Esperar hasta que la tecla se suelte
while(key(_control))
frame;
end
aux+=1;
if (aux==8)
aux=4;
end
ball(320,180,aux);
punt-=1;
end

if(blocksleft==0)//Fin de la partida
delete_text(0);
write(0,420,235,5,"¡Has ganado! (Pulsa ENTER para salir)");
while(not key(_enter))
aux+=1;
if (aux==8)
aux=4;
end
ball(rand(20,620),rand(240,460),aux);
frame;
end
exit();
end
frame;
end
end

process block(x,y)
begin;
graph=2;
loop
frame;
end
end

process paddle(x,y)
begin
graph=3;
loop
if(key(_left))x=x-25;end
if(key(_right))x=x+25;end
if(x<15)x=15;end
if(x>625)x=625;end
frame;
end
end

process ball(x,y,int grap)
private
int vx=0;//Su velocidad inicial (cambiará) en la dirección X e Y
int vy=5;
int paddle;
int block;
int ball;
end
begin
vx+= rand(-10,10);
graph=grap;
loop

//Para no tener que escribir tanto después en los ifs
paddle=COLLISION(type paddle);
block=COLLISION(type block); //Lo mismo
ball=collision(type ball);

//Si la bola choca contra un ladrillo
if(block!=0)

//Comprobamos que hemos chocado contra la parte inferior o superior de un ladrillo...
if(abs(block.y-y+vy)>8)
vy=-vy;//...e invertimos la velocidad vertical
end

//Comprobamos que hemos chocado contra la parte izquierda o derecha de un ladrillo...
if(abs(block.x-x+vx)>16)
vx=-vx;//...e invertimos la velocidad horizontal
end

/*La bola no nesariamente choca sólo contra un ladrillo a la vez, sobretodo cuando incide
de forma horizontal sobre ladrillos superpuestos, donde choca con todos ellos a la vez.*/
while(block!=0)
blocksleft--;
signal(block,s_kill);
punt+=2;

/*Vemos si hay otro ladrillo con el que haya colisionado.(Recordad que cada vez que se
llama a "collision", se da el siguiente item con el que se ha colisionado, hasta que se
haga un frame, momento en el que se "resetea" la lista de objetos colisionantes y se
empieza otra vez*/
block=COLLISION(type block);
end
end
//Si la bola choca contra la raqueta...
if(paddle!=0)
vy=-vy;//...invertimos la velocidad vertical...

/*...y alteramos la velocidad horizontal dependiendo de en qué punto de la raqueta se
haya colisionado..*/
vx=vx+(x-paddle.x)/2;
end

if(ball!=0)//Si choca contra otra bola
vx=-(vx+10);
vy=-(vy+10);
END

//Si la bola choca contra los límites de la pantalla (excepto el inferior)
if(x<=2 or x>=638)vx=-vx;end
if(y<=2)vy=-vy;end //Limitamos la velocidad horizontal un poco (para que no se embale mucho)... if(vx>20)vx=20;end
x=x+vx;//y la bola se mueve
y=y+vy;
if(y>480 or y<0)return;end //Si perdemos la bola, matamos el proceso
frame;
end
end

miércoles, 4 de agosto de 2010

Programando en Bennu/Fénix

Bueno, hace ya unos dias os comenté que había empezado a programar en Fénix. La verdad es que no avanzaba nada, porque la mitad de los códigos de ejemplo que había encontrado no funcionaban correctamente.

La cosa es que hace dos días, buscando un creador de archivos ".fpg" encontré lo que decía ser una suite de programas para programar en Fénix. Enorme fué mi emoción cuando descubrí todo lo que llevaba:
  • Compilador para Bennu/Fénix.
  • Un tutorial para Bennu/Fénix que es una maravilla.
  • Herramientas para 2D.
  • Herramientas para 3D.
  • Editor de FNT.
  • Editor de FPG.
  • Editor de gráficos.
  • Generador de instaladores.
  • Notepad++ preparado especialmente para el desarrollo en Fénix (colorea código, tiene accesos directos al compilador y al intérprete, etc...).
Vamos, una verdadera suite.

A todo esto, os estaréis preguntando qué es Bennu/Fénix. Está claro que algo tiene que ver con Fénix, pero veamos que dice la señora Wikipedia:
BennuGD o simplemente Bennu es un lenguaje de programación, orientado al desarrollo de videojuegos en 2 y 3 dimensiones. Es la continuación de Fénix y se distribuye bajo licencia GNU General Public License. Es ideal para aquellos que quieren iniciarse en el mundo de la programación de videojuegos por su sencillez a la hora de programar, pero también es una herramienta muy completa, que gracias a la posibilidad de importar bibliotecas de enlace dinámico programadas en C prácticamente no tiene límites. BennuGD presenta una gran cantidad de bugs corregidos respecto a Fénix además de una serie de importantes innovaciones. A pesar de esto, se mantiene la compatibilidad entre ambos lenguajes.
Mmm... parece interesante. Sigamos leyendo:

Características

  • Lenguaje interpretado, mezcla de C y Pascal, muy sencillo y potente.
  • Completamente modular.
  • Multiplataforma:
    • Windows 9x/ME/2000/XP (x86/x64)/Vista (x86/x64)/7 (x86/x64)
    • Linux (x86/x64/ARM/PPC/...)
    • FreeBSD[1]
    • Mac OS X[2]
    • Consolas: Wiz[3] , XBox, Wii[4] , GP2X

Los programas compilados pueden ser intercambiados entre cualquiera de esas plataformas sin necesidad de recompilación.

  • Procesos (programación multihilo).
  • Motor de render 2D por software.
  • Altamente Portable.
  • Expresiones regulares.
  • Modos gráficos 8, 16 y 32 bits, entre otras cosas permite rotación de sprites, escalado, alpha blending, blendops, blit aditivo y sustractivo, etc.
  • Reproducción de sonidos en formato WAV,PCM y Ogg Vorbis.
  • Soporte de librerías DLL en las plataformas que así lo permiten.
Para leer más dirijíos a la Wikipedia.

Bueno, pues como bien ha dicho nuestra amiga Wikipedia, es un lenguaje sencillo y fácil. Para poner imágenes no hay que dibujarlas píxel a píxel. Sólamente tienes que asignarle una serie de propiedades y decirle.... ¡¡¡ FRAME; !!!

Para que podáis ver un poco lo que he ido desarrollando tanto en Fénix como en Bennu, os dejo un enlace a mi web de descargas de proyectos:

http://pensarescompartir.com/lahsoft/lahsoftcorp/

martes, 3 de agosto de 2010

Angela Aki

Conozco esta cantante desde hace relativamente bastante tiempo, pero el día pasado vi un homenaje de youtube a esta chica que me hizo pensar que debía hablaros de ella. Antes de nada, y para que sepáis quién es esta chica, os pongo un extracto de Wikipedia (con la gramática y la otrografía convenientemente corregida):
Angela Aki (アンジェラ・アキ, Anjera Aki), nació el 15 de septiembre de 1977 en un pueblo de la Prefectura de Tokushima, llamado Itano, en la Isla de Shikoku, Japón. De padre japonés y de madre italo-norteamericana. Es cantautora y su nombre real en japonés es Aki Kiyomi (安芸 聖世美, Aki Kiyomi). Su padre es Aki Kiyoshi (安藝清, Aki Kiyoshi), y es el fundador y presidente de Aeon, una gran Eikaiwa en Japón. Tiene una hermana, Kyla Aki, un año menor que ella.
Angela Aki es completamente bilingüe. Habla inglés y japonés, ya que se crió en Japón donde aprendió a tocar el Piano clásico a los tres años, aunque también estudió Violín, Guitarra y Tambor más tarde. En 1992, a los quince años se trasladó a Hawái, donde se graduó en la escuela Iolani. Aquí cambió su nombre a Angela, relegando Kiyomi a un segundo plano.

De aquí se marchó a la Universidad George Washington, dónde combinó estudios de Relaciones internacionales y Jazz. Después de ver a Sarah McLachlan en concierto, decidió convertirse en cantautora como ella. Mientras estudiaba era musicalmente activa, frecuentemente actuaba en una cafetería llamada Jam'n Java. Era aquí donde el productor musical Tony Alany trabajaba, y colaboró con Angela produciendo el disco indies These Words, que se puso a la venta en enero de 2000.

Durante su estancia en Washington, fue la telonera de artistas como Ricky Martin, Judy Collins y Sixpence None the Richer. Además actuó en la fiesta de Navidad de Al Gore. Se graduó en George Washington en mayo de 2000. Angela mostró su música en directo en el Luna Park Grille en el condado de Arlington, Virginia, el 29 de noviembre de 2001 y fue acreditada como "Angela y su banda". Más tarde, aun en 2001, dio otro concierto en Washington D.C., y fue escuchada por el productor japonés de la CM "K", que le preguntó si quería cantar comercialmente, ella aceptó y a principios de 2002 editó una versión de la canción de Jimmy Scott, New Day para Yakult 400 CM. En 2002 compuso dos canciones para "Let It Fall" de Dianne Eclar, una joven cantante pop de Filipinas.
Ahora lo que importa xD:



Traducción de la canción:

Estimada persona
que está leyendo esta carta,
¿dónde estás y qué estás haciendo?

En cuanto a mí, a mis quince años,
tengo preocupaciones
que a nadie se las puedo contar.

Pero si mando esta carta,
a mi "yo" del futuro,
seguro que será fácil,
poder contármelas con sinceridad.

Ahora parece que me rendiré, parece que lloraré,
por un "yo" a punto de desaparecer.
¿en las palabras de quién...
...debería confiar?

Este único y solitario corazón,
se ha roto ya demasiadas veces.
Pero en medio de todo este dolor,
aún continúo viviendo.
Aún continúo viviendo.

Estimada persona, gracias.
A tu "yo" de quince años,
hay algo que quiero decirle.

Si aún te continúas preguntando,
qué hacer y dónde deberías estar,
te aseguro que hallarás la respuesta.

Los mares de la juventud...
...pueden ser difíciles de navegar,
pero dirige siempre tu barco lleno de sueños,
hacia la orilla del mañana.

Ahora no te rindas, no llores.
Cuando parezca que estás a punto de desaparecer,
son las palabras de tu propia voz...
...en las que debes confiar.

Mi "yo" adulto también puede herirse,
habiendo noches en las que el dolor no me permite dormir.
Pero incluso en los momentos dulces o amargos,
aún continúo viviendo.

Todo en esta vida tiene algún sentido,
así que construye tus sueños sin ningún temor.

Continúa creyendo.
Continúa creyendo.
Continúa creyendo.
Continúa creyendo.

Parece que me rendiré, parece que lloraré,
por un "yo" a punto de desaparecer.
¿en las palabras de quién...
...debería confiar?

No te rindas, no llores.
Cuando parezca que estás a punto de desaparecer,
son las palabras de tu propia voz...
...en las que debes confiar.

Nada importa el dónde estemos.
No se puede simplemente huir de la tristeza.
Así que muestra tu mayor sonrisa,
y continúa viviendo.
Continúa viviendo.

Estimada persona
que está leyendo esta carta,
deseo de corazón que seas feliz.