Pascal/Turbo Pascal - Ayuda con un ejercicio es muy urgente

 
Vista:

Ayuda con un ejercicio es muy urgente

Publicado por Pepa (6 intervenciones) el 07/02/2009 19:34:15
Hola tengo que hacer un ejercicio de unos coches, mas o menos como unos coches de choque, la profesora nos ha dado una parte del codigo echo y hay que completar lo restante, lo tengo que entregar mañana si alguien quiere intentarlo, lo agradeceria mucho que se ponga en contacto conmigo!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:Ayuda con un ejercicio es muy urgente

Publicado por Willy (177 intervenciones) el 07/02/2009 20:55:40
Hola Pepa.

Lo que puedes hacer es pegar aquí la parte del código que les dió la profesora, así lo podemos ver todos y te ayudamos con él.

Si no, talvez puedes especificar bien lo que debe hacer el programa.

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con un ejercicio es muy urgente

Publicado por PEPA (6 intervenciones) el 07/02/2009 23:06:17
PROGRAM AUTOS_LOCOS(INPUT,OUTPUT);
USES DOS,CRT;
CONST LONGITUD_TOTAL=20; (* Longitud de la carretera *)
ANCHURA_ARCEN=3; (* Anchura de los arcenes de la carretera *)
ANCHURA_TRAMO=3; (* Anchura de los tramos de la carretera *)
NUM_MAX_TRAMO=3; (* Numero de tramos visibles de la carretera *)
(* Caracteres de representacion de la carretera *)
MURO='|'; ASFALTO=' '; COCHE_JUG='*'; COCHE_ENE='#'; META='-';
(* ************************************************************************ *)
FUNCTION nuevoTramo(desplazamiento:INTEGER):INTEGER;
VAR aleatorio:INTEGER; resultado:INTEGER;
BEGIN
aleatorio:=RANDOM(3);
IF (aleatorio=2)
THEN resultado:=desplazamiento-1
ELSE resultado:=desplazamiento+aleatorio;
IF (resultado<0)
THEN resultado:=0
ELSE IF (resultado>=ANCHURA_ARCEN+ANCHURA_TRAMO)
THEN resultado:=ANCHURA_ARCEN+ANCHURA_TRAMO-1;
nuevoTramo:=resultado;
END;
(* ************************************************************************ *)
PROCEDURE pintarTramo(numeroTramo,desplazamiento,posXJug,posXEne,posYEne,longitud:INTEGER);
VAR i:INTEGER;
BEGIN
WRITE(longitud+numeroTramo);
FOR i:=2 TO desplazamiento DO WRITE(ASFALTO);
WRITE(MURO);
FOR i:=1 TO ANCHURA_TRAMO DO
IF (numeroTramo=1) AND (i=posXJug)
THEN WRITE(COCHE_JUG)
ELSE IF (numeroTramo=posYEne) AND (i=posXEne)
THEN WRITE(COCHE_ENE)
ELSE IF (longitud+numeroTramo=LONGITUD_TOTAL)
THEN WRITE(META)
ELSE WRITE(ASFALTO);
WRITELN(MURO);
END;
(* ************************************************************************ *)
PROCEDURE pintarCarretera(desplaza1,desplaza2,desplaza3,posXJug,posXEne,posYEne,longitud:INTEGER);
BEGIN
pintarTramo(3,desplaza3,posXJug,posXEne,posYEne,longitud);
pintarTramo(2,desplaza2,posXJug,posXEne,posYEne,longitud);
pintarTramo(1,desplaza1,posXJug,posXEne,posYEne,longitud);
END;
(* ************************************************************************ *)
FUNCTION horaASegundos(hora,minuto,segundo,segundo100:WORD):LONGINT;
(* CODIGO: Declaracion de variables *)
BEGIN
(* CODIGO: Codigo de la funcion *)
END;
FUNCTION tiempoEntreHoras(horaI,minutoI,segundoI,segundo100I:WORD;
horaF,minutoF,segundoF,segundo100F:WORD):LONGINT;
(* CODIGO: Declaracion de variables *)
BEGIN
(* CODIGO: Codigo de la funcion *)
END;
(* ************************************************************************ *)
VAR jugarPartida:BOOLEAN;
tiempoGanador:LONGINT;
horaI,minutoI,segundoI,segundo100I:WORD;
d1,d2,d3,pXJug,pXEne,pYEne,distancia:INTEGER;
movimiento:CHAR;
choque:BOOLEAN;
(* CODIGO: Declaracion de variables *)
BEGIN (* Programa principal *)
RANDOMIZE;
jugarPartida:=TRUE;
tiempoGanador:=100000;
WHILE (jugarPartida) DO
BEGIN
WRITELN('Bienvenid@ al juego de los autos locos');
(* CODIGO: Valores iniciales de la carretera *)
(* CODIGO: Valores iniciales del coche jugador *)
(* CODIGO: Valores iniciales del coche enemigo *)
getTime(horaI,minutoI,segundoI,segundo100I);
(* CODIGO: Comienzo de la partida actual *)
WHILE TRUE (* CODIGO: La partida actual puede continuar *) DO
BEGIN WRITELN('Pulsa (a) para mover a la izquierda. Pulsa (d) para mover a la derecha');
pintarCarretera(d1,d2,d3,pXJug,pXEne,pYEne,distancia);
REPEAT
movimiento:=READKEY;
UNTIL (movimiento IN ['a','d',' ']);
(* CODIGO: Movimiento del coche jugador *)
(* CODIGO: Generacion de un nuevo tramo *)
(* CODIGO: Movimiento del coche enemigo *)
(* CODIGO: Comprobacion de choque *)
END;
(* Final de la partida actual *)
IF (choque)
THEN WRITELN('Crash!!!')
ELSE BEGIN WRITELN('Final!!!');
(* CODIGO: Calculo de la puntuacion *)
END;
(* CODIGO: Peticion de una nueva partida y actualizacion de variables *)
END;
WRITE('Gracias por utilizar esta aplicacion');
END. (* Programa principal *)


Lo que tengo que reyenar yo es donde pone (*codigo.........*) Muchas gracias y espero vuestras respuestas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con un ejercicio es muy urgente

Publicado por Miguel (159 intervenciones) el 08/02/2009 04:55:07
Perdon pero con "(* CODIGO: Movimiento del coche jugador *) " no puedo saber que es lo que hace falta.
Tenes la consigna o algo similar?, o podrias explicar tu que es puntualmente lo que necesitas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con un ejercicio es muy urgente

Publicado por Pepa (6 intervenciones) el 08/02/2009 13:01:01
Os copio lo que pone en la hoja que me dieron:

El usuario maneja su coche, usando el teclado como se indica mas abajo
El jugador debe evitar chocarse con los coches enemigos y salirse de la carretera. si lo h ace, pierde.
Cuando el coche del jugador llega a la meta, el programa debe comprobar si el usuario ha batido el record.
En cada momento, solo hay un coche enemigo en la pista. Cuando un coche es adelantado por el jugador, se genere un nuevo coche, cuya posicion en el ancho de la carretera es aleatoria.
El jugador puede jugar tantas veces como desee, por lo que el programa debe preguntar al usuario tras cada partida, si quiere seguir jugando o no.
La carretera tiene 3 metros de ancho y 30 de largo, aunque solamente son visibles 4 metros de largo en cada instante. La carretera se generara aleatoriamente.
La estructura recomendada del programa es la siguiente:
Mientras el usuario quiera seguir jugando
genera valores iniciales (coche, enemigo, carretera,.)
mientras no haya un choque y no llegue a la meta
pintar carretera, coche y enemigo
pedir movimiento
actualizar valores del jugador
generara nuevo tramo de carretera
actualizar carretera
actualizar posicion del enemigo
generar nuevo enemigo si es necesario
comprobar colisiones
actualizar record si es necesario
mostrar resultado final
preguntar si se desea seguir jugando

Vamos a implementar el juego sin utilizar recursos graficos avanzados, para ello utilizaremos entrada y salida habitual: el tecladro para conducir y caracteres ASCII para representar la carretera y los coches
Los bordes de la carrtera seran representados por caracteres I, el coche del jugador por * y los coches enemigos por #. El final de la carrera esta marcado pro la linea de meta representada por guiones -----
El usuario mueve el coche pulsando a + enter para ir a la izquierda y d + enter para la derecha solamente enter para continuar recto
la carretera se genera aleatoriamente, paso a pasa. Para ello cada tramo de carretera esta representado por una variable que denota su posicion en la coordenada X. La distancia maxiam horizontal entre dos tramos de carretera es 1 metro. Como los tramos visibles son 4, necesitaremos 4 variables para represnetar el largo de la carretera visible en cada instante.
Observa que el coche del jugador no avanza (siempre esta en la parte de abajo), lo que cambia es la carretera y los coches enemigos.
Los coches enemigos no se mueven, una vez generados conservan su misma posicion en relacion con la carretera.
Para usar numeros aleatorios podemos utilizar la funcion random() que devuelve un real entre [0,1). Es preciso importar, al principio del programa, la libreria adecuada con el siguiente comando from ramdom import random
Para controlar el tiempo podemos utilizar la funcion time(), que devuelve la hora en segundos en el momento preciso en el que es invocada. para utilizarla la importaremos de la siguiente manera: from time import time


Espero que os sirva de ayuda la tengo que entregar hoy antes de las 22 horas muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con un ejercicio es muy urgente

Publicado por Miguel (159 intervenciones) el 09/02/2009 07:28:08
Llegaste muy tarde, lastima que te falto tiempo, he hecho el juego de la viborita no se si lo conoces, utilize un sistema que se podria utilizar aqui.
Te agrego el mail y te comento sobre esto, si es que si te sigue interesando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con un ejercicio es muy urgente

Publicado por PEPA (6 intervenciones) el 08/02/2009 18:42:20
Hola!!!!!!!!! Como vais con la practica? Os a servido lo que os mande esta mañana? Espero que si, me teneis un poco nerviosa porque nose como la llevais y la tengo que entregar en menos de 4 horas! Un saludo y gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con un ejercicio es muy urgente

Publicado por PEPA (6 intervenciones) el 08/02/2009 20:10:15
Hola!!!!!! Porfa que me quedan dos horas si se acerca la hora y teneis aunque sea un poco hecho mandarmelo que se la mando asi aunque sea ok? Decirme como la llevais porfavor!!!!!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Ayuda con un ejercicio es muy urgente

Publicado por Willy (177 intervenciones) el 08/02/2009 21:33:45
Prefiero ser sincero.
No entiendo casi nada de lo que debe hacer el juego, ni qué deben hacer las funciones como TiempoEntreHoras, y otras.
Ni siquiera puedo hacer que aparezcan los coches.
Solo agregué algunas líneas pero el programa sigue sin hacer nada.

De todas formas lo pongo aquí con lo poco que le modifiqué.
Lástima que no hay más tiempo.

PROGRAM AUTOS_LOCOS(INPUT,OUTPUT);
USES DOS,CRT;
CONST LONGITUD_TOTAL=20; (* Longitud de la carretera *)
ANCHURA_ARCEN=3; (* Anchura de los arcenes de la carretera *)
ANCHURA_TRAMO=3; (* Anchura de los tramos de la carretera *)
NUM_MAX_TRAMO=3; (* Numero de tramos visibles de la carretera *)
(* Caracteres de representacion de la carretera *)
MURO='|'; ASFALTO=' '; COCHE_JUG='*'; COCHE_ENE='#'; META='-';
(* ************************************************************************ *)
FUNCTION nuevoTramo(desplazamiento:INTEGER):INTEGER;
VAR aleatorio:INTEGER; resultado:INTEGER;
BEGIN
aleatorio:=RANDOM(3);
IF (aleatorio=2)
THEN resultado:=desplazamiento-1
ELSE resultado:=desplazamiento+aleatorio;
IF (resultado<0)
THEN resultado:=0
ELSE IF (resultado>=ANCHURA_ARCEN+ANCHURA_TRAMO)
THEN resultado:=ANCHURA_ARCEN+ANCHURA_TRAMO-1;
nuevoTramo:=resultado;
END;
(* ************************************************************************ *)
PROCEDURE pintarTramo(numeroTramo,desplazamiento,posXJug,posXEne,posYEne,longitud:INTEGER);
VAR i:INTEGER;
BEGIN
WRITE(longitud+numeroTramo);
FOR i:=2 TO desplazamiento DO WRITE(ASFALTO);
WRITE(MURO);
FOR i:=1 TO ANCHURA_TRAMO DO
IF (numeroTramo=1) AND (i=posXJug)
THEN WRITE(COCHE_JUG)
ELSE IF (numeroTramo=posYEne) AND (i=posXEne)
THEN WRITE(COCHE_ENE)
ELSE IF (longitud+numeroTramo=LONGITUD_TOTAL)
THEN WRITE(META)
ELSE WRITE(ASFALTO);
WRITELN(MURO);
END;
(* ************************************************************************ *)
PROCEDURE pintarCarretera(desplaza1,desplaza2,desplaza3,posXJug,posXEne,posYEne,longitud:INTEGER);
BEGIN
pintarTramo(3,desplaza3,posXJug,posXEne,posYEne,longitud);
pintarTramo(2,desplaza2,posXJug,posXEne,posYEne,longitud);
pintarTramo(1,desplaza1,posXJug,posXEne,posYEne,longitud);
END;
(* ************************************************************************ *)
FUNCTION horaASegundos(hora,minuto,segundo,segundo100:WORD):LONGINT;
var TotalSegundos: Longint;
BEGIN
TotalSegundos := segundo100+(minuto*60)+(hora*60*60);
horaASegundos := TotalSegundos;
END;
FUNCTION tiempoEntreHoras(horaI,minutoI,segundoI,segundo100I:WORD;
horaF,minutoF,segundoF,segundo100F:WORD):LONGINT;
(* CODIGO: Declaracion de variables *)
BEGIN
(* CODIGO: Codigo de la funcion *)
END;
(* ************************************************************************ *)
VAR jugarPartida:BOOLEAN;
tiempoGanador:LONGINT;
horaI,minutoI,segundoI,segundo100I:WORD;
d1,d2,d3,pXJug,pXEne,pYEne,distancia:INTEGER;
movimiento, DeseaJugar:CHAR;
choque:BOOLEAN;
Contador : integer;(* CODIGO: Declaracion de variables *)
BEGIN (* Programa principal *)
RANDOMIZE;
jugarPartida:=TRUE;
tiempoGanador:=100000;
WHILE (jugarPartida) DO
BEGIN
WRITELN('Bienvenid@ al juego de los autos locos');
BEGIN WRITELN('Pulsa (a) para mover a la izquierda. Pulsa (d) para mover a la derecha');

(* CODIGO: Valores iniciales de la carretera *)
(* CODIGO: Valores iniciales del coche jugador *)
(* CODIGO: Valores iniciales del coche enemigo *)
getTime(horaI,minutoI,segundoI,segundo100I);
Writeln('Desea jugar? ');(* CODIGO: Comienzo de la partida actual *)
DeseaJugar := Upcase(ReadKey);
WHILE DeseaJugar = 'S' do(* CODIGO: La partida actual puede continuar *)
pintarCarretera({d1}5,{d2}5,{d3}5,{pXJug}6,{pXEne}7,{pYEne}9,{distancia}9);
REPEAT
if KeyPressed then movimiento:=READKEY;
pintarCarretera({d1}5,{d2}5,{d3}5,{pXJug}6,{pXEne}7,{pYEne}9,{distancia}6);
delay(100);
UNTIL (movimiento IN ['a','d',' ']);
delay(100);
(* CODIGO: Movimiento del coche jugador *)
(* CODIGO: Generacion de un nuevo tramo *)
(* CODIGO: Movimiento del coche enemigo *)
(* CODIGO: Comprobacion de choque *)
END;
delay(100);
Writeln('Desea jugar? ');(* CODIGO: Comienzo de la partida actual *)
if KeyPressed then DeseaJugar := Upcase(ReadKey);

(* Final de la partida actual *)
IF (choque)
THEN WRITELN('Crash!!!')
ELSE BEGIN WRITELN('Final!!!');
(* CODIGO: Calculo de la puntuacion *)
END;
DeseaJugar := Upcase(ReadKey);
delay(100);
(* CODIGO: Peticion de una nueva partida y actualizacion de variables *)
END;
delay(100);
WRITE('Gracias por utilizar esta aplicacion');
END. (* Programa principal *)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar