Mastermind

Tengo que hacer el mastermind en pascal pero estoy muy perdido.
La cosa es así: el programa tiene que generar un código aleatorio de 4 letras que contenga letras de la 'A' a la 'F', solo se disponen de 10 intentos y por cada intento el programa me devuelve una pareja de notas de buenos y regulares dependiendo de las letras acertadas. Los buenos son las letras acertadas en el orden correcto.
Los regulares son las letras acertadas pero en un orden distinto al correcto.
Por ej si el código generado es ABCFGH y el usuario ingresa ABCDEF habrían 3 buenos y 1 regular.
No puedo usar instrucciones muy avanzadas, solo while, repeat, arreglos, for, if, random
Por favor si me das una mano te estaría muy agradecido.
Desde ya muchas gracias.

1 Respuesta

Respuesta
1
Aquí tienes el código pero hecho con cifras en ludar de con letras. No creo que te sea difícil adaptarlo para lo que tú quieres.
Uses CRT;
Type
ArrayNumerico = Array [1..4] of integer;
ArrayLogico = Array[1..6] of Boolean;
Var
NSecreto : ArrayNumerico;
NJugador : ArrayNumerico;
Salidos : Array[1..6] of Boolean;
B, NEG,J, I, N,Blancas,Negras : Integer;
Procedure IniciarNumerico(var n : ArrayNumerico);
var
I : integer;
begin
For I:=1 to 4 do
n:=0;
end;
Procedure GeneraSecreto(Var Secreto : ArrayNumerico);
Var
Salido : Array [1..6] of Boolean;
I : Integer;
n:integer;
Begin
For i:=1 to 6 do
salido:=false;
For i := 1 to 4 do
Begin
Repeat
n:=random(5)+1;
Until Salido[n]=False;
salido[n]:=true;
Secreto:=n;
end;
end;
Procedure PedirNumero(Var NJuga : ArrayNumerico);
Var
Salido : Array [1..6] of Boolean;
I,j : Integer;
n:integer;
Begin
For i:=1 to 6 do
salido:=false;
Writeln('Introduzca un n£mero de 4 cifras');
For j := 1 to 4 do
Begin
Repeat
Readln(n);
Until Salido[n]=False;
salido[n]:=true;
NJuga[j]:=n;
end;
end;
Procedure Comprobar(Var Secreto : ArrayNumerico;Var Jugador : ArrayNumerico;
Var Blancas : Integer; VAR Negras : Integer);
Var
I, J : Integer;
Begin
For i :=1 to 4 do
if Secreto=Jugador then
NEGRAS:=NEGRAS+1;
For i :=1 to 4 do
FOR J:=1 TO 4 DO
IF (SECRETO=JUGADOR[J]) and (i<>j)then
BLANCAS := BLANCAS + 1;
end;
begin
ClrScr;
b:=0;
neg:=0;
IniciarNumerico(nsecreto);
IniciarNumerico(Njugador);
GeneraSecreto(nsecreto);
for i:=1 to 4 do
write(nsecreto);
writeln;
PedirNumero(NJugador);
for i:=1 to 4 do
write(nJugador);
{for i := 1 to 4 do
if njugador = NSecreto then
b:=B+1;
FOR I := 1 TO 4 DO
FOR J:=1 TO 4 DO
IF (njugador=nsecreto[j]) and (i<>j) then
NEG:=NEG+1;}
COMPROBAR(NJUGADOR,NSECRETO,B,NEG);
writeln('BLANCAS: ',b);
writeln('NEGRAS: ',neg);
READLN;
end.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas