Pascal/Turbo Pascal - A la despesperada

 
Vista:

A la despesperada

Publicado por ricki (5 intervenciones) el 09/03/2010 23:18:30
Tengo que entregar para mñn un programa de piedra, papel o tijera.Todos sabemos cmo va, la cosa esque no consigo realizar el recuento de las victorias ni el recuento total de las partidas.Es olbigatorio usar los types que aparecen en mi codigo....es para mñn pero bueno a la desesperada...alguna ayuda?Aqui esta el codigo,esta fatal pero es el resultadod e pruebas y pruebas.....
_______________________
(**************************************************************************
* PRACTICA: 1

**************************************************************************)

program PiedraPapelTijera;
{ Este programa realiza el juego de piedra, papel o tijera }
uses crt; (* Incluye en el programa bibliotecas de funciones y procedimientos *)
type
TSeleccion = ( Piedra, Papel, Tijera ); (* Tres tipos de seleccion *)
TResultado = ( GanaMaquina, GanaHumano, Empate ); (* Tres posibles resultados *)
var
opcion, gan, emp,perd,total: integer;
mElec, tElec,mpunt,tpunt: TSeleccion;

(**************************************************************************)
(***************************** SUBPROGRAMAS *******************************)
(**************************************************************************)

procedure Introduccion;
{ Descripcion del juego piedra, papel o tijera }
begin
writeln ('------------------------------');
writeln (' REGLAS DEL JUEGO ');
writeln ('------------------------------');
writeln;
writeln (' El juego consiste en un una partida entre una maquina y un humano. ');
writeln (' Haran su eleccion entre las tres alternativas existentes (piedra, papel o tijera). ');
writeln (' El ganador se determina por: ');
writeln (' La piedra gana a las tijeras (puede golpearlas hasta romperlas) ');
writeln (' Las tijeras ganan al papel (pueden cortarlo) ');
writeln (' El papel gana a la piedra (puede envolverla) ');
writeln (' Si las dos elecciones coinciden se produce un empate. ');
writeln (' La maquina decide quien gana, indicandole al humano la eleccion hecha por ella. ');
writeln (' Se cuentan las partidas ganadas, empatadas y perdidas por cada jugador. ');
writeln (' Se juegan las partidas que se quieran, hasta que el humano decida finalizar el juego. ');
writeln;
writeln (' Introduzca un 1 si quiere jugar.' );
writeln;
writeln (' Introduzca un 2 si desea abandonar el juego');
writeln;
writeln (' Elija una opcion: ');
end;

(***************************************************************************)

procedure eleccionMaquina ( var elMaquina: TSeleccion );
var
numero:integer;
begin

randomize;
numero:=( random(3) );
writeLn;
case numero of
0: begin
elmaquina:=Piedra;
writeln('La maquina eligio Piedra');
end;
1: begin
elmaquina:=Papel;
writeln('La maquina eligio Papel');
end;
2: begin
elmaquina:=Tijera;
writeln('La maquina eligio Tijera');
end;
end;

readln;
end;

(***************************************************************************)

procedure eleccionHombre ( var eleccion: TSeleccion );
var
op: integer;
begin
repeat
writeln ('---------------------------');
writeln (' MENU DE ELECCION ');
writeln ('---------------------------');
writeln;
writeln (' 1. Elijo PIEDRA ');
writeln (' 2. Elijo PAPEL ');
writeln (' 3. Elijo TIJERA ');
writeln;
write ('Escoja una opcion: ');
readln (op);

if (op > 3) or (op < 1) then
begin
writeln ('Opcion incorrecta');
writeln;
writeln ('Pulse cualquier tecla para continuar');
readKey;
end;
until (op > 0) and (op < 4);
eleccion:= TSeleccion ( op-1 );
case op of
1:writeln('El usuario escojio Piedra');
2:writeln('El usuario escojio Papel');
3:writeln('El usuario escojio Tijera');
end;(*case*)
end;

(***************************************************************************)
function resultadoJugada (miElec,tuElec: TSeleccion):TResultado;
begin
if(miElec = tuElec) then
begin
resultadoJugada:=TResultado(0);
writeln('El resultado es empate');
end(*if*)
else
if ((miElec = Piedra) and (tuElec = Papel)) or ((miElec = Papel) and (tuElec = Tijera))
or ((miElec = Tijera) and (tuElec = Piedra)) then
begin
writeln('Tu pierdes,vuelve a intentarlo');
resultadoJugada:=TResultado(1);
end(*if*)
else
begin
writeln('Tu ganas,enhorabuena');
resultadoJugada:=TResultado(2);
end;
readln;
end;


(***************************************************************************)

procedure mostrarPuntuacion ( var emp1,gan1,perd1,total: integer );
var
x:integer ;
begin
if resultadoJugada(TElec,melec)=Empate then
emp1:=emp1+1
else
if resultadoJugada(TElec,melec)=GanaMaquina then
gan1:=gan1+1 else
if resultadoJugada(TElec,melec)=GanaHumano then
perd1:=perd1+1 ;

total:=total+1;
writeln('El numero de empates es:',emp1);
writeln('El numero de victorias es:',gan1);
writeln('El numero de perdidas es:',perd1);
writeln('El numero de partidas totales:',total);
readln;
end;

(**************************************************************************)
(************************ PROGRAMA PRINCIPAL ******************************)
(**************************************************************************)

begin
repeat
clrscr;
Introduccion;
readln (opcion);
if ( opcion = 1 ) then
begin
eleccionHombre (tElec);
eleccionMaquina (mElec);
emp:=0;
gan:=0;
perd:=0;
total:=0;
mostrarPuntuacion (emp,gan,perd,total);
end;
until ( opcion = 2 );
end.

(**************************************************************************)
(**************************************************************************)
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:A la despesperada

Publicado por Diego (1 intervención) el 10/03/2010 10:24:37
Program Piedra_Papel_Tijera(input,output);

Uses crt; { Unidades usadas }

Type tjugadas=array[1..50] of byte;
tArchivo=file of byte;
Var num:byte;
opcion:byte;
evitaerror:byte;

{ Genera un texto de despedida cuando finalizas el programa }
Procedure Despedida;
Begin
clrscr;
gotoxy(20,13);
textcolor(14);
write('­­­ Espero que nos volvamos a ver pronto !!!');
delay(2000);
end;

{ Procedimiento que colorea la pantalla de un solo color
pasado a la funcion por valor }
Procedure Colorear_Pantalla(colorfondo:byte);
var i,j:byte;
begin
textbackground(colorfondo);
for i:=1 to 25 do
for j:=1 to 80 do
write(' ');
end;

{ Procedimiento que dibuja el menu }
Procedure MostrarMenu;
Begin
textcolor(10);
gotoxy(17,8);
write('1.- Generar el archivo de jugadas para el jugador 1.');
gotoxy(17,9);
write('2.- Generar el archivo de jugadas para el jugador 2.');
gotoxy(17,10);
write('3.- Jugar.');
gotoxy(17,12);
write('0.- Salir.');
textcolor(15);
gotoxy(17,14);
write('Su opcion -> ')

End;

{ Procedimiento que pide las jugadas y que genera los archivos
del jugador pasado por valor }
Procedure GeneraArchivos(numero:byte);
Var jugadas:tjugadas;
numjugadas, n:byte;
jug:tarchivo;

Begin
evitaerror:=1;
clrscr;
textcolor(13);
gotoxy(5,8);
write('Sigue las instrucciones para el jugador ', numero);
write(', y todos nos llevaremos bien.');
delay(500);

gotoxy(15,10);
writeln('Introduce el n£mero de jugadas (m ximo 50) :');

Repeat
Begin
gotoxy(62,10);
readln(numjugadas);
gotoxy(62,10);
write(' ');
End;
Until (numjugadas<=50)and (numjugadas>0);

For n:=1 to numjugadas do
Begin
Repeat
textcolor(14);
gotoxy(30,20);
writeln('1 -> Piedra');
gotoxy(30,21);
writeln('2 -> Papel');
gotoxy(30,22);
writeln('3 -> Tijera');

textcolor(13);
gotoxy(17,15);
write('Introduce la jugada ', n, ' del jugador ');
write(numero, '. -> ');
read(jugadas[n]);
gotoxy(57,15);
write(' ');
Until (jugadas[n]=1) or (jugadas[n]=2) or (jugadas[n]=3);
gotoxy(57,15);
End;

If (numero=1) then
Begin
Assign(jug,'fichero1.dat');
Rewrite(jug); { Crea fichero1.dat }
write(jug, numjugadas);
For n:=1 to numjugadas do
write(jug, jugadas[n]);
Close(jug);
End
else if (numero=2) then
Begin
Assign(jug,'Fichero2.dat'); { Crea Fichero2.dat }
Rewrite(jug);
write(jug, numjugadas);
For n:=1 to numjugadas do
write(jug, jugadas[n]);
Close(jug);
End;
End;

{ Procedimiento que procesa los ficheros y decide aquien ha ganado }
Procedure MostrarResultados(jugadas1, jugadas2, ganador:tjugadas;
numjugadas:byte);
Type tpalabra=array[1..13] of char;
tresult=array[1..100] of tpalabra;

Var n, ganadas1, ganadas2, empates:byte;
resultado1, resultado2, winner:tresult;

Begin
ganadas1:=0;
ganadas2:=0;
empates:=0;
For n:=1 to numjugadas do
Begin
Case (jugadas1[n]) of
1: resultado1[n]:='Piedra ';
2: resultado1[n]:='Papel ';
3: resultado1[n]:='Tijeras ';
End;
Case (jugadas2[n]) of
1: resultado2[n]:='Piedra ';
2: resultado2[n]:='Papel ';
3: resultado2[n]:='Tijeras ';
End;
Case (ganador[n]) of
0: winner[n]:='Empatan ';
1: winner[n]:='Gana jugador1';
2: winner[n]:='Gana jugador2';
End;
End;
clrscr;
gotoxy(1,7);
textcolor(15);
For n:=1 to numjugadas do
Begin
write(' Jugada ', n, ': Jugador1 -> ', resultado1[n]);
writeln(' Jugador2 -> ', resultado2[n], ': ',winner[n]);
End;
delay(2000);

For n:=1 to numjugadas do
If (ganador[n]=1) then
ganadas1:=ganadas1+1
else if (ganador[n]=2) then
ganadas2:=ganadas2+1
else if (ganador[n]=0) then
empates:=empates+1;
textcolor(14);
clrscr;
gotoxy(20,10);
write('Jugador 1: Jugadas ganadas: ', ganadas1, ' -> ');
writeln( ((ganadas1/numjugadas)*100):3:2, '%');
gotoxy(20,12);
write('Jugador 2: Jugadas ganadas: ', ganadas2, ' -> ');
writeln(((ganadas2/numjugadas)*100):3:2, '%');
gotoxy(20,14);
write('Empatadas: ', empates, ' -> ');
writeln(((empates/numjugadas)*100):3:2, '%');

textcolor(13);
gotoxy(25,18);
If (ganadas1>ganadas2) then
writeln('­­­ HAS GANADO JUGADOR 1 !!!')
else if (ganadas1<ganadas2) then
writeln('­­­ HAS GANADO JUGADOR 2 !!!')
else if (ganadas1=ganadas2) then
writeln(' HABEIS EMPATADO');
sound(500);
delay(500);
nosound;
delay(2500);
End;

{ Procedimiento que compara las jugadas }
Procedure Comparar(jugadas1, jugadas2:tjugadas; numjugadas:byte);
var ganador:tjugadas;
n:byte;
Begin
For n:=1 to numjugadas do
Begin
Case (jugadas1[n]) of
1: begin
If (jugadas2[n] = 1) then ganador[n]:=0;
If (jugadas2[n] = 2) then ganador[n]:=2;
If (jugadas2[n] = 3) then ganador[n]:=1;
end;
2: begin
If (jugadas2[n] = 1) then ganador[n]:=1;
If (jugadas2[n] = 2) then ganador[n]:=0;
If (jugadas2[n] = 3) then ganador[n]:=2;
end;
3: begin
If (jugadas2[n] = 1) then ganador[n]:=2;
If (jugadas2[n] = 2) then ganador[n]:=1;
If (jugadas2[n] = 3) then ganador[n]:=0;
end;
End;
End;
MostrarResultados(jugadas1, jugadas2, ganador, numjugadas);
End;

{ Procedimiento para jugar una vez que se han rellenado los ficheros }
Procedure Jugar;
Var jugadas1, jugadas2:tjugadas;
numjugadas1, numjugadas2, n:byte;
jug:tarchivo;

Begin
Assign(jug,'fichero1.dat');
Reset(jug);
Read(jug, numjugadas1);
n:=1;
while not eof(jug) do
Begin
read(jug, jugadas1[n]);
n:=n+1;
End;
Close(jug);
Assign(jug,'fichero2.dat');
Reset(jug);
Read(jug, numjugadas2);
n:=1;
while not eof(jug) do
Begin
read(jug, jugadas2[n]);
n:=n+1;
End;
Close(jug);

If (numjugadas1 = numjugadas2) then
Comparar(jugadas1, jugadas2, numjugadas1)
else
begin
clrscr;
textcolor(12);
gotoxy(12,9);
write('Los dos jugadores debeis de tener el mismo');
write(' numero de jugadas');
end;
delay(3000);
End;

{ Procedimiento que saca un mensaje de error cuando
no se ha introducido ninguna jugada }
Procedure Error;
Begin
clrscr;
textcolor(12);
gotoxy(23,10);
write('No seas malo, introduce las jugadas.');
delay(2500);
end;

{ Aqui comienza el programa }
BEGIN

evitaerror:=0;
clrscr;
colorear_pantalla(1);
textcolor(13);
write(' ');
{ Presentacion }
gotoxy(12,7);
write('Bienvenido al apasionante mundo de...Piedra, Papel, y Tijera');

sound(500);
delay(500);
nosound;
delay(1500);

Repeat
Begin
clrscr;
MostrarMenu;

repeat
begin
gotoxy(wherey+2,wherex);
read(opcion);
gotoxy(44,10);
write(' ');
end;
until ((opcion<4) and (opcion>=0));

if (opcion=1) then
begin
num:=1;
GeneraArchivos(num);
end
else if (opcion=2) then
begin { Evitaerror sirve para evitar }
num:=2; { que se intente jugar sin }
GeneraArchivos(num); { rellenar ningun fichero }
end
else if ((opcion=3) and (evitaerror=1)) then
Jugar
else if ((opcion=3) and (evitaerror=0)) then
Error;

End;
Until (opcion=0);
Despedida;
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