Pascal/Turbo Pascal - EL juego de Frodo

 
Vista:

EL juego de Frodo

Publicado por Triguina (4 intervenciones) el 11/07/2007 21:41:34
Hola
Tengo un problema, tngo que hacer un programa que simule el recorrido que hace frodo hasta encontrar el anillo, en ello tendra que ir desplazandose por una matriz que contendra dos numeros un contenido y una direccion; y el presonaje llevara una energia , en fin con una multitud de requisitos que si son necesarios os explikare..... El caso es que despues de llevar muchas lineas lo compilo y no ay problema todo va bien; pero al darle al run en principio me funciona me pide unos datos pero luego me da un error; y pone EXITCODE=202 y no se de que tipo de error se trata me podeis ayudar y explikar que pasa para poder acabarlo?
Muchas gracias¡¡
Un saludo
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

RE:EL juego de Frodo

Publicado por Diego Romero (996 intervenciones) el 12/07/2007 21:32:15
El error en runtime 202 es desbordamiento de pila.
Te copio lo que dice la ayuda:

Descripción:

El desbordamiento de pila puede ser causado por recursividad infinita. O por un procedimiento en lenguaje ensamblador que no mantiene la pila de forma correcta.

El programa genera este error al entrar en un procedimiento o función compilado en el estado {$S+} cuando no hay suficiente espacio en la pila para las variables locales del subprograma. En el IDE se puede configurar el control de desbordamiento de pila para todo el fuente en Options -> Compiler... -> Stack Checking

Debe incrementarse el tamaño del stack usando la directiva del compilador $M. En el IDE se puede configurar esto para todo el fuente en Options -> Memory Size

Por el tipo de programa que estás haciendo supongo que estás usando llamadas recursivas, intenta hacer un trace de tu programa (F7/F8 en TP) mostrando la ventana de stack (ctrl+F3 en TP). Probablemente estás declarando un "mapa" para tu juego demasiado grande para que el compilador lo pueda manejar.
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:EL juego de Frodo

Publicado por micropais (209 intervenciones) el 12/07/2007 22:59:20
saludos Triguina.

Ya te contestado en "otros foros de programacion" , si siges teniendo problemas
consulta en este mismo foro:
"juego pinball" y
"navegacion estelar" usando el buscador de esta pagina .

Aunque tienen nombres diferentes , la estructura es muy parecida al juego de frodo que comentas , con la ventaja, de que ya deberian estar echos tales programas, pregunta a los que un dia preguntaron y si terminaron su tarea.
lo mismo te pueden pasar el codigo.

Que tengas suerte.
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:EL juego de Frodo

Publicado por triguina (4 intervenciones) el 13/07/2007 00:25:31
Hola
Muchas gracias, he resuelto el problema, si era de desbordamiento porque el mapa era grande y para ello en cada procedure y function al pasarla como parametro la matriz lo he echo poiendo la palabra reservada VAR delante y asi soluciono el problema que ademas algo habia dicho la profesora de eso pero como soy novata en esto me ha dado otro problema otra vez esta vez el EXITCODE=105 y otras veces el EXITCODE=201 y tampoco se lo que es.....me podriais ayudar otra vez? no se supongo que como me copiasteois lo que significaba estaran en algun sitio si eso me decis donde pa no molestaros que tampoco es plan, que yo encanta ya que seguro que l0o explikais mejor jejeje de todas las maneras muchisisisimas gracias¡¡
Un saludo
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:EL juego de Frodo

Publicado por Diego Romero (996 intervenciones) el 13/07/2007 05:22:17
Consulta aquí:
http://www.driverop.com.ar/lsterrtp.php
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:EL juego de Frodo

Publicado por Triguina (4 intervenciones) el 13/07/2007 15:31:12
Hola de nuevo¡¡
Yo sigo con mis problemas de novata¡¡¡ muchas gtracias por lo de la pagina y ahora ya se por lo menos lo que pasa aunque no sepa resolverlo.... El exitcode=105 me dice que es "El archivo no está abierto en modo escritura" y es que no me llevo muy bien con los ficheros.....
Tengo el fichero en un procedure, mas bien en dos porque son dos diferentes y a una variable (st) le he asignado una ruta que e puetso pero no se si eso esta mal si tngo que crear algo o como para que esto sea efectivo; no se si me expliko con claridad por ella mejor os pongo el trozo dde codigo a ver si alguien me puede ayudar..
Como siempre mcuhisimas gracias.

PROCEDURE escribirenfichero (i,j:integer¡; VAR matriz:tarray;energ:integer);
VAR
blanco,corchete1,corchete2,guion,coma:char;
correcto:boolean;
a,codIoError:integer;
f:text;
st:string[20];
dato:char;
begin
corchete1:='[';
corchete2:=']';
coma:=',';
blanco:=' ';
guion:='-';
st:=./recorrido.txt';
Assign(f,st);
{$I-}Rewrite{$I+};
codIoError:=IoResult;
correcto:=(codIoError=0);
if not correcto
then control_errores(codIoError)
else
Begin
write(f,corchete1);
write(f,i);
write(f,coma);
write(f,j);
write(f,corchete2);
write(f,blanco);
write(f,guion);
write(f,blanco);
write(f,matriz[i,j].camino);
write(f,blanco);
write(f,guion);
write(f,blanco);
writeln(f,energ);
end;
close(f)
end;
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:EL juego de Frodo

Publicado por Diego Romero (996 intervenciones) el 13/07/2007 16:41:45
Bueno... veo cosas bastante heterodoxas acá pero no quiero mezclar la solución a tu problema con la corrección de estilo de programación. Vamos con lo primero.

Esta parte no es del todo correcta:

st:=./recorrido.txt';
Assign(f,st);
{$I-}Rewrite{$I+};

La asiganción a la variable st le falta una comilla al principio, pero aún así st contiene un nombre de archivo incorrecto en MS-DOS "./" no tiene sentido, sí lo tiene en sistemas unix (como Linux). Si tu intención es crear el archivo en el mismo lugar que el ejecutable, basta con poner el nombre del archivo sin indicar ningún path. Así:

st:='recorrido.txt';

Pero aún así, no necesitas la variable st, basta con declarar el Assign así:

Assign(f,'recorrido.txt');

F es un archivo tipo text. El control de errores de apertura podría mejorarse así:

Assign(F,'recorrido.txt');
{$i-}
Rewrite(F);
{$i+}
CodErr:=IOResult;
if CodErr <> 0 then
begin
WriteLn('Error de apertura: ',CodErr);
halt(1);

Ahora vamos con la corrección de estilo.

Me parece muy redundante que uses variables char para almacenar caracteres y luego hacer la concatenación con escrituras sucesivas en el archivo, sería mejor algo así:

Escribir una función que tome un integer y lo pase a string:

function IntToStr(int: integer): string;
var
S: string;
begin
Str(int, S);
IntToStr:=S;
end;

En tu procedimiento declara una variable tipo string llamada "linea" y haz:

Linea:='['+IntToStr(i)+','+IntToStr(j)+'] - '+IntToStr(matriz[i,j].camino)+' - '+IntToStr(energ);
WriteLn(f,Linea);

Lo que simplificaría mucho lo que estás haciendo (aquí estoy asumiento que el campo "camino" es de tipo integer).
end;
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:EL juego de Frodo

Publicado por Francisco  (2 intervenciones) el 11/11/2009 19:16:57
Yo tengo el mismo problema, pero solo cuando uso el Free Pascal porque con el Turbo Pascal no me aparese ese error
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