CURSO DE PROGRAMACION DE VIDEO JUEGOS: TEXTO #7.
---------------------------------------------------
Hola, aqui estamos empezando ya con el septimo capitulo de nuestro
curso. En el capitulo anterior aprendimos como fabricar nuestros
propios procedimientos, ahora, usando esto como base, vamos a
aprender a fabricar funciones.
1.- Fabricacion de funciones.
Como recordaran, una funcion es un tipo de procedimiento que devuelve
un valor despues de hacer sus calculos, comprobaciones, etc...
La palabra reservada que nos permite crear una funcion es FUNCTION
y se usa en forma similar a PROCEDURE.
FUNCTION nombre( parametros ): valor;
el nombre y los parametros se usan igual que en los procedimientos,
y valor corresponde al tipo de valor que devuelve. Este tipo de
valor es el mismo que ocupamos para definir las variables, es decir,
INTEGER, CHAR, BOOLEAN, etc...
Veamos un ejemplo: supongamos que queremos hacer una funcion que
devuelva la distancia que hay entre dos objetos que tenemos en la
pantalla:
FUNCTION Dist( x1, y1, x2, y2: integer ): real;
begin
Dist := sqrt( (x2-x1) + (y2-y1) );
end;
A la funcion le pusimos el nombre Dist, los parametros que devemos
pasarle son la ubicacion del primer objeto (x1, y1) y la ubicacion
del segundo objeto (x2, y2) todos de tipo entero, y el valor que
devuelve la funcion es de tipo real.
Luego para indicarle a la funcion el valor que debe devolver, este
valor es asignado al nombre de la funcion. En el ejemplo, la funcion
va a devolver la distancia entre los 2 puntos que no es mas que una
formula matematica.
Tal ves deba destacar que en la funcion se llama a otra funcion llamada
SQRT, cuya tarea es devolver la raiz cuadrada de un valor.
Veamos otro ejemplo para quedar aun mas claros. Supongamos que queremos
verificar si dos objetos chocan:
FUNCTION Hit( x1, y1, x2, y2 ): boolean;
begin
if (x1=x2) and (y1=y2) then Hit:=true
else Hit:=false;
end;
En este caso el nombre de la funcion es Hit, los parametros son los
mismos que en el ejemplo anterior, y el valor que devuelve la funcion
es de tipo boolean, es decir, verdadero o falso.
Lo que hace la funcion es chequear por medio de la instruccion if si
es que las cordenadas x e y de los objetos son las mismas, es decir, si
esta uno sobre otro, de ser asi la funcion devolvera el valor verdadero,
sino devuelve falso.
-- o --
2.- Un programa completo.
¨Se entiende como se fabrican las funciones?.
Ahora, hay muchas propiedades de las funciones similares a las de
los procedimientos: como el hecho de poder declarar variables y
constantes en su interior, el sistema para declarar los parametros
es el mismo, etc...
Veamos como ejemplo un programa completo.
------------------------------------------------------------------------------
uses crt;
var x1, y1, x2, y2: integer;
dx1, dy1, dx2, dy2: integer;
salir: boolean;
function Hit( x1, y1, x2, y2: integer ): boolean;
begin
if (x1=x2) and (y1=y2) then Hit:=true
else Hit:=false;
end;
procedure mover1( var dx, dy: integer );
begin
dx:=random( 3 );
dy:=random( 3 );
dec( dx, 1 );
dec( dy, 1 );
end;
procedure mover2( var dx, dy: integer );
var k: integer;
begin
if keypressed then
begin
k:=ord(readkey);
if k=ord('u') then dy:=-1
else
if k=ord('h') then dx:=-1
else
if k=ord('k') then dx:=1
else
if k=ord('j') then dy:=1
else
if k=27 then salir:=true;
end;
end;
procedure SetX( var x: integer );
begin
if x>78 then x:=78
else
if x<2 then x:=2;
end;
procedure SetY( var y: integer );
begin
if y>23 then y:=23
else
if y<2 then y:=2;
end;
procedure Dibujar;
begin
clrscr;
textcolor( 10 );
gotoxy( x1, y1 );
write( 'o' );
textcolor( 12 );
gotoxy( x2, y2 );
write( 'x' );
end;
begin
randomize;
salir:=false;
x1:=10; y1:=10;
x2:=60; y2:=15;
dx1:=0; dy1:=0;
dx2:=0; dy2:=0;
while not(salir) do
begin
dibujar;
delay( 50 );
mover1( dx1, dy1 );
mover2( dx2, dy2 );
inc( x1, dx1 ); inc( y1, dy1 );
SetX( x1 ); SetY( y1 );
inc( x2, dx2 ); inc( y2, dy2 );
SetX( x2 ); SetY( y2 );
if Hit( x1, y1, x2, y2 ) then
begin
sound( 100 );
delay( 100 );
nosound;
end;
end;
clrscr;
end.
------------------------------------------------------------------------------
-- o --
Bien, que les parece, ¨no son mas elegantes nuestros programas
cuando utilizados procedimientos y funciones en lugar de escribir
un largo programa hacia abajo?, ¨no es mas facil corregir los
errores?.
Ahora tenemos que nuestro programa se divide en 5 secciones:
- Declaracion de unidades.
- Declaracion de constantes.
- Declaracion de variables.
- Creacion de procedimientos y funciones.
- Programa principal.
Creo que es mejor dejar hasta aqui este capitulo para que practiquen
un poco, de manera de no saturarlos con tanto conocimiento y que
vayan investigando por ustedes mismo el uso de lo que llevamos
visto.
Espero que en el proximo capitulo empecemos ya con la programacion
en modo grafico, asi que sean pancientes y sigan programando.
Escribanme un lote de mails con todas sus dudas para que no queden
colgados.
Nos vemos.
JPLL
pc-jlopez@entelchile.net
www.geocities.com/SiliconValley/Bridge/1910
-- o --
               (
geocities.com/siliconvalley/bridge)                   (
geocities.com/siliconvalley)