juego pinball
Publicado por Gloria (5 intervenciones) el 05/04/2007 01:33:32
Hola buenas. Pues escribo en el foro para ver si alguien podría ayudarme con este programa de una práctica de laboratorio que tengo que entregar. He puesto en la url todo el enunciado, pero bueno comento un poquillo de qué va el asunto. Se trata de hacer como un videojuego de pinball que tiene una bola que se mueve por una matriz N x M casillas. La matriz está formada por casillas en blanco (' ') por las que se puede mover la pelota, y casillas obstáculo (carácter ASCII) en las que la bola rebota, tb los extremos de la matriz hacen rebotar la bola.
El movimiento de la bola consta de 6 direcciones cardinales, N,S,E,O,NO,NE,SO,SE, manteniendo dicha direccion hasta encontrar un obstaculo o el borde de la matriz.
Cuando el movimiento de la bola se ve interrumpido por un obstaculo o el borde de la matriz, ésta rebota aleatoriamente en cualquiera de las 6 direcciones cardinales, siempre y cuando pueda hacerlo.
Bueno pues este es el enunciado más o menos.
Ahora os comento las ideas que tengo...Bueno la matriz tiene q ser de 8 filas y 5 columnas
la bola hay q inicializarla en el (1,1) con direccion E,SE o S. El programa tiene que mostrar el recorrido de la bola por la tabla y el juego finaliza cuando la bola se coloca en el punto (8,3). El usuario puede elegir el nº de obstáculos.
Pues bien lo que llevo hecho de codigo es esto:
program P3A(input,output);
uses crt; {lo he puesto con el objetivo de usar gotoxy}
const
limitefilas=8;
limitecolumnas=5;
type
filas= 1..limitefilas;
columnas=1..limitecolumnas;
matriz= array[filas,columnas] of integer;
var
tabla:matriz;
pelota,obstaculo:char;
borde,obs,salida:boolean;
procedure movimiento;
{determina el movimiento de la bola}
type
movi=(Norte,Sur,Este,Oeste,NEste,NOeste,SEste,SOeste);
var
N,S,E,O,NE,NO,SE,SO:matriz;
begin
case movi of
Norte: N[filas,columnas] + [1,0];
Sur: S[filas,columnas] + [-1,0];
Este: E[filas,columnas] + [0,1];
Oeste: O[filas,columnas] + [0,-1];
NEste: NE[filas,columnas] + [-1,1];
NOeste: NO[filas,columnas] + [-1,-1];
SEste: SE[filas,columnas] + [1,1];
SOeste: SO[filas,columnas] + [1,-1];
end;{procedure}
procedure calculadir;
{calcula la direccion de la bola}
var
x,y:Integer;
begin
randomize;
repeat
begin
x:=random(1);
y:=random(1);
end;
until (not ((x=0) and (y=0)));
while
end;{procedure}
procedure escribirtabla;
{saca por pantalla el tablero}
const
limitefilas=8;
limitecolumnas=5;
var
fila,columna:Integer;
begin
for fila:=1 to limitefilas do
for columna:=1 to limitecolumnas do
write(' ');
end;{procedure}
procedure obstaculos;
{coloca aleatoriamente los obstaculos en el tablero}
var
obstaculo:char;
i,num:Integer;
begin
obstaculo:=chr(48);
writeln('Introduce el numero de osbtaculos: ');
readln(num);
randomize;
end;{procedure}
{----------------------PROGRAMA PRINCIPAL---------------------}
begin
escribirtabla;
borde:=true;
obs:=true;
readln;
end.
--------------------------------------------------------------------------------------
Pero como soy novata en esto de la programación, no sé por qué me da error en el case del procedure movimiento y tb no sé cómo tienen que salir de los procedures los parámetros si por variable o por valor o cómo...Así que si alguien me puede echar una manita con este programa se lo agradecería, esque ando muy perdida en este mundillo. Por favor se acepta cualquier idea que os surja. Muchas gracias :D.
El movimiento de la bola consta de 6 direcciones cardinales, N,S,E,O,NO,NE,SO,SE, manteniendo dicha direccion hasta encontrar un obstaculo o el borde de la matriz.
Cuando el movimiento de la bola se ve interrumpido por un obstaculo o el borde de la matriz, ésta rebota aleatoriamente en cualquiera de las 6 direcciones cardinales, siempre y cuando pueda hacerlo.
Bueno pues este es el enunciado más o menos.
Ahora os comento las ideas que tengo...Bueno la matriz tiene q ser de 8 filas y 5 columnas
la bola hay q inicializarla en el (1,1) con direccion E,SE o S. El programa tiene que mostrar el recorrido de la bola por la tabla y el juego finaliza cuando la bola se coloca en el punto (8,3). El usuario puede elegir el nº de obstáculos.
Pues bien lo que llevo hecho de codigo es esto:
program P3A(input,output);
uses crt; {lo he puesto con el objetivo de usar gotoxy}
const
limitefilas=8;
limitecolumnas=5;
type
filas= 1..limitefilas;
columnas=1..limitecolumnas;
matriz= array[filas,columnas] of integer;
var
tabla:matriz;
pelota,obstaculo:char;
borde,obs,salida:boolean;
procedure movimiento;
{determina el movimiento de la bola}
type
movi=(Norte,Sur,Este,Oeste,NEste,NOeste,SEste,SOeste);
var
N,S,E,O,NE,NO,SE,SO:matriz;
begin
case movi of
Norte: N[filas,columnas] + [1,0];
Sur: S[filas,columnas] + [-1,0];
Este: E[filas,columnas] + [0,1];
Oeste: O[filas,columnas] + [0,-1];
NEste: NE[filas,columnas] + [-1,1];
NOeste: NO[filas,columnas] + [-1,-1];
SEste: SE[filas,columnas] + [1,1];
SOeste: SO[filas,columnas] + [1,-1];
end;{procedure}
procedure calculadir;
{calcula la direccion de la bola}
var
x,y:Integer;
begin
randomize;
repeat
begin
x:=random(1);
y:=random(1);
end;
until (not ((x=0) and (y=0)));
while
end;{procedure}
procedure escribirtabla;
{saca por pantalla el tablero}
const
limitefilas=8;
limitecolumnas=5;
var
fila,columna:Integer;
begin
for fila:=1 to limitefilas do
for columna:=1 to limitecolumnas do
write(' ');
end;{procedure}
procedure obstaculos;
{coloca aleatoriamente los obstaculos en el tablero}
var
obstaculo:char;
i,num:Integer;
begin
obstaculo:=chr(48);
writeln('Introduce el numero de osbtaculos: ');
readln(num);
randomize;
end;{procedure}
{----------------------PROGRAMA PRINCIPAL---------------------}
begin
escribirtabla;
borde:=true;
obs:=true;
readln;
end.
--------------------------------------------------------------------------------------
Pero como soy novata en esto de la programación, no sé por qué me da error en el case del procedure movimiento y tb no sé cómo tienen que salir de los procedures los parámetros si por variable o por valor o cómo...Así que si alguien me puede echar una manita con este programa se lo agradecería, esque ando muy perdida en este mundillo. Por favor se acepta cualquier idea que os surja. Muchas gracias :D.
Valora esta pregunta


0