RE:Ayuda con un ejercicio es muy urgente
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 *)