Program Ahorcado;
Uses crt;
Const
MaxPalabra = 14;
Type
t_palabras = record
palabra:string[MaxPalabra];
end;
Var
v_palabras : array[0..9] of t_palabras;
v_letras : array[1..100] of char;
v_anterior, i:integer;
Procedure Marco;
{Dibuja el marco en la pantalla}
Var
i, j :integer;
Begin
Clrscr;
For i := 1 to 79 do begin
gotoxy(i, 1);
write('Í');
gotoxy(i,24);
write('Í');
end;
For j := 1 to 24 do begin
gotoxy(1,j);
write('º');
gotoxy(80,j);
write('º');
end;
gotoxy(80,1);
write('»');
gotoxy(1,24);
write('È');
gotoxy(80,24);
write('¼');
gotoxy(1,1);
write('É');
End; {Marco}
Function Menu(var p_opcion:integer):integer;
{Dibuja el men£}
Var
v_opcion:integer;
Begin
clrscr;
marco;
gotoxy(25,6);
Writeln('Bienvenido aljuego del AHORCADO');
gotoxy(25,8);
writeln('Si tiene m s de 7 fallos pierde');
gotoxy(25, 14);
Writeln('1. Jugar');
Gotoxy(25, 15);
Writeln('2. Salir');
Gotoxy(25, 16);
Write('Opci¢n :');
Readln(v_opcion);
p_opcion := v_opcion;
menu := v_opcion;
End; {Menu}
Procedure Dibujo(p_fallo:integer);
Var
v_parte:String[7];
v_fila, v_columna:Integer;
begin
v_parte:='O/I\I/\';
Case p_fallo of
1 : begin
v_fila:=1; v_columna:=2;
end;
2 : begin
v_fila:=2; v_columna:=1;
end;
3 : begin
v_fila:=2; v_columna:=2;
end;
4 : begin
v_fila:=2; v_columna:=3;
end;
5 : begin
v_fila:=3; v_columna:=2;
end;
6 : begin
v_fila:=4; v_columna:=1;
end;
7 : begin
v_fila:=4; v_columna:=3;
end;
end;
gotoxy(7+v_columna,18+v_fila);
write(v_parte[p_fallo]);
end;
Procedure Verifica(p_palabraescogida: string;var p_posicion:integer; p_letra:char);
var
n:integer;
begin
delete(p_palabraescogida,1,p_posicion);
n:=p_posicion;
p_posicion :=pos(p_letra,p_palabraescogida);
if p_posicion<>0 then
p_posicion:= p_posicion+n;
end;
Procedure Jugar;
Var
v_palabraformada, v_palabraescogida :String[MaxPalabra];
v_posicion, v_fallos, j, i, v_indice, v_indiceletras:integer;
v_letra :char;
v_evaluada : boolean;
Begin
Clrscr;
Marco;
v_palabraformada := '';
v_indiceletras := 0;
v_posicion := 0;
v_fallos := 0;
v_evaluada := false;
j := 0;
randomize;
repeat
v_indice := random(9);
until v_anterior <> v_indice;
v_anterior := v_indice;
v_palabraescogida := v_palabras[v_indice].palabra;
for i:= 1 to length(v_palabraescogida) do begin
v_palabraformada := v_palabraformada + '_';
end;
repeat
gotoxy(25,16);
writeln(v_palabraformada);
gotoxy(2, 2);
write('Digite una letra: ');
readln(v_letra);
v_letra := upcase(v_letra);
i := 1;
v_evaluada := false;
Repeat
if v_letras[i] = v_letra then begin
v_evaluada := true;
end;
i := i + 1;
until (i >= v_indiceletras) or (v_evaluada);
v_indiceletras := v_indiceletras + 1;
v_letras[v_indiceletras] := v_letra;
if (not v_evaluada) then begin
verifica(v_palabraescogida, v_posicion, v_letra);
if v_posicion <> 0 then begin
repeat
v_palabraformada[v_posicion]:= v_letra;
gotoxy(25,16);
write(v_palabraformada);
verifica(v_palabraescogida, v_posicion, v_letra);
writeln;
until (v_posicion=0);
end
else begin
v_fallos := v_fallos + 1;
dibujo(v_fallos);
end;
end else begin
v_fallos := v_fallos + 1;
dibujo(v_fallos);
end;
gotoxy(20,12);
writeln('Intentos :', v_indiceletras, ' Fallos :', v_fallos);
gotoxy(3,5);
writeln('Letras evaluadas: ');
for j := 1 to v_indiceletras do begin
gotoxy(5+(j*2),6);
write(v_letras[j]);
end;
until (v_fallos = 8) or (v_palabraformada = v_palabraescogida);
if v_palabraformada = v_palabraescogida then begin
gotoxy(25, 17);
textcolor(Green);
writeln('FELICIDADES HAS GANADO!!!!!!');
end
else begin
gotoxy(25, 17);
textcolor(red);
writeln('LO SIENTO HAS PERDIDO!!!!!!!!');
end;
Normvideo;
READKEY;
End;{Jugar}
Procedure LlenaArreglo;
{Llena la lista de palabras}
Begin
v_palabras[0].palabra:= 'AHORCADO';
v_palabras[1].palabra:= 'EXTRAORDINARIO';
v_palabras[2].palabra:= 'USUARIO';
v_palabras[3].palabra:= 'TELEVISOR';
v_palabras[4].palabra:= 'TELEFONO';
v_palabras[5].palabra:= 'EXCELENTE';
v_palabras[6].palabra:= 'JARDINERO';
v_palabras[7].palabra:= 'INFORMACION';
v_palabras[8].palabra:= 'DICCIONARIO';
v_palabras[9].palabra:= 'PARTIDO';
End;{LlenaArreglo}
BEGIN
v_anterior := 0;
Marco;
LlenaArreglo;
repeat
Case i of
1: begin
Jugar;
end;
end;
until menu(i) = 2;
END.