
Problemas con el ahorcado
Publicado por LUISPDL (2 intervenciones) el 13/10/2007 21:29:28
Tengo un problema en el juego del ahorcado. Este se basa en un menu con el juego para 1 solo jugador(la palabra a adivinar es aleatoria de un archivo), y otra opcion para 2 jugadores(un jugador ingresa una palabra y el otro la tiene que adivinar). Cuando ejecuto cualquiera de los 2 juegos en el menu funciona normalmente pero cuando vuelvo al menu y quiero volver a elegir la opcion 1 me da un Runtime error 5. a que se debe el problema. El codigo es medio largo pero lo dejo para que el que lo pueda entender me ayude por favor:
program ahorcado;
uses crt,dos;
type
vector1=array[1..50] of string;
vector=array[1..30] of string;
var
palabra:string;
longitud:integer;
v:vector;
v1:vector1;
var tecla:char;
procedure cargar(var v:vector;pal:string);
var i:integer;
begin
longitud:=length(pal);
for i:=1 to longitud do
v[i]:='_';
end;
procedure mostrar(v:vector;pal:string);
var i:integer;
begin
for i:=1 to longitud do
write(v[i],' ');
end;
procedure letras(var v:vector;pal:string);
var l:string;
i,aux,j,c,y,d:integer;
begin
c:=1;
d:=1;
y:=1;
readln(l);
while (c<=7) and (d<=longitud) do
begin
gotoxy(25,12);
mostrar(v,palabra);
gotoxy(1,y);
y:=y+1;
write('ingrese una letra:');
readln(l);
aux:=0;
for i:=1 to longitud do
begin
if l=pal[i] then
begin
v[i]:=pal[i];
aux:=1;
d:=d+1;
end;
end;
if aux=0 then
begin
if c=1 then
begin
gotoxy(28,3);
writeln('O');
c:=c+1;
end
else
if c=2 then
begin
gotoxy(28,4);
writeln('|');
c:=c+1;
end
else
if c=3 then
begin
gotoxy(27,4);
writeln('/');
c:=c+1;
end
else
if c=4 then
begin
gotoxy(29,4);
writeln('\');
c:=c+1;
end
else
if c=5 then
begin
gotoxy(27,5);
writeln('/');
c:=c+1;
end
else
if c=6 then
begin
gotoxy(29,5);
writeln('\');
c:=c+1;
end
else
begin
gotoxy(25,13);
writeln('PERDISTE, la palabra es ', pal);
c:=c+1;
gotoxy(27,3);
writeln('___');
end;
end;
if d>longitud then
begin
gotoxy(25,13);
writeln('FELICITACIONES GANASTE');
end;
end;
end;
procedure mastil;
begin
gotoxy(28,2);
writeln('|');
gotoxy(25,1);
writeln('___');
gotoxy(24,2);
writeln('|');
gotoxy(24,3);
writeln('|');
gotoxy(24,4);
writeln('|');
gotoxy(24,5);
writeln('|');
gotoxy(24,6);
writeln('|');
gotoxy(25,6);
writeln('__');
gotoxy(22,6);
writeln('__');
end;
procedure salida;
begin
gotoxy(1,24);
writeln('el juego termino,presione un tecla para salir');
readkey;
end;
procedure palabras(var v1:vector1);
var i:integer;
texto:string;
archivotexto:text;
begin
assign(archivotexto,'prueba.txt');
reset(archivotexto);
for i:=1 to 50 do
begin
readln(archivotexto,texto);
v1[i]:=texto;
end;
randomize;
palabra:=(v1[random(49)+1]);
end;
procedure juego1;
begin
clrscr;
palabras(v1);
cargar(v,palabra);
mastil;
letras(v,palabra);
gotoxy(25,12);
mostrar(v,palabra);
salida;
end;
procedure juego2;
begin
clrscr;
while palabra='' do
begin
gotoxy(1,1);
write('ingrese una palabra para empezar a jugar:');
readln(palabra);
end;
readkey;
clrscr;
mastil;
cargar(v,palabra);
letras(v,palabra);
gotoxy(25,12);
mostrar(v,palabra);
salida;
end;
procedure menu;
begin
tecla:=' ';
while (tecla<>'3') do
begin
clrscr;
gotoxy(20,1);
writeln('MENU DEL JUEGO');
gotoxy(21,2);
writeln('El AHORCADO');
writeln;
writeln('1-Un jugador');
writeln('2-Dos jugadores');
writeln('3-Salir');
gotoxy(40,24);
write('Ingresar una opcion:');
read(tecla);
case tecla of
'1':juego1;
'2':juego2;
end;
end;
end;
begin
menu;
end.
Si alguein me puede ayudar para mejorar que lo diga tambien, todo es bien venido. Gracias
program ahorcado;
uses crt,dos;
type
vector1=array[1..50] of string;
vector=array[1..30] of string;
var
palabra:string;
longitud:integer;
v:vector;
v1:vector1;
var tecla:char;
procedure cargar(var v:vector;pal:string);
var i:integer;
begin
longitud:=length(pal);
for i:=1 to longitud do
v[i]:='_';
end;
procedure mostrar(v:vector;pal:string);
var i:integer;
begin
for i:=1 to longitud do
write(v[i],' ');
end;
procedure letras(var v:vector;pal:string);
var l:string;
i,aux,j,c,y,d:integer;
begin
c:=1;
d:=1;
y:=1;
readln(l);
while (c<=7) and (d<=longitud) do
begin
gotoxy(25,12);
mostrar(v,palabra);
gotoxy(1,y);
y:=y+1;
write('ingrese una letra:');
readln(l);
aux:=0;
for i:=1 to longitud do
begin
if l=pal[i] then
begin
v[i]:=pal[i];
aux:=1;
d:=d+1;
end;
end;
if aux=0 then
begin
if c=1 then
begin
gotoxy(28,3);
writeln('O');
c:=c+1;
end
else
if c=2 then
begin
gotoxy(28,4);
writeln('|');
c:=c+1;
end
else
if c=3 then
begin
gotoxy(27,4);
writeln('/');
c:=c+1;
end
else
if c=4 then
begin
gotoxy(29,4);
writeln('\');
c:=c+1;
end
else
if c=5 then
begin
gotoxy(27,5);
writeln('/');
c:=c+1;
end
else
if c=6 then
begin
gotoxy(29,5);
writeln('\');
c:=c+1;
end
else
begin
gotoxy(25,13);
writeln('PERDISTE, la palabra es ', pal);
c:=c+1;
gotoxy(27,3);
writeln('___');
end;
end;
if d>longitud then
begin
gotoxy(25,13);
writeln('FELICITACIONES GANASTE');
end;
end;
end;
procedure mastil;
begin
gotoxy(28,2);
writeln('|');
gotoxy(25,1);
writeln('___');
gotoxy(24,2);
writeln('|');
gotoxy(24,3);
writeln('|');
gotoxy(24,4);
writeln('|');
gotoxy(24,5);
writeln('|');
gotoxy(24,6);
writeln('|');
gotoxy(25,6);
writeln('__');
gotoxy(22,6);
writeln('__');
end;
procedure salida;
begin
gotoxy(1,24);
writeln('el juego termino,presione un tecla para salir');
readkey;
end;
procedure palabras(var v1:vector1);
var i:integer;
texto:string;
archivotexto:text;
begin
assign(archivotexto,'prueba.txt');
reset(archivotexto);
for i:=1 to 50 do
begin
readln(archivotexto,texto);
v1[i]:=texto;
end;
randomize;
palabra:=(v1[random(49)+1]);
end;
procedure juego1;
begin
clrscr;
palabras(v1);
cargar(v,palabra);
mastil;
letras(v,palabra);
gotoxy(25,12);
mostrar(v,palabra);
salida;
end;
procedure juego2;
begin
clrscr;
while palabra='' do
begin
gotoxy(1,1);
write('ingrese una palabra para empezar a jugar:');
readln(palabra);
end;
readkey;
clrscr;
mastil;
cargar(v,palabra);
letras(v,palabra);
gotoxy(25,12);
mostrar(v,palabra);
salida;
end;
procedure menu;
begin
tecla:=' ';
while (tecla<>'3') do
begin
clrscr;
gotoxy(20,1);
writeln('MENU DEL JUEGO');
gotoxy(21,2);
writeln('El AHORCADO');
writeln;
writeln('1-Un jugador');
writeln('2-Dos jugadores');
writeln('3-Salir');
gotoxy(40,24);
write('Ingresar una opcion:');
read(tecla);
case tecla of
'1':juego1;
'2':juego2;
end;
end;
end;
begin
menu;
end.
Si alguein me puede ayudar para mejorar que lo diga tambien, todo es bien venido. Gracias
Valora esta pregunta


0