Sobre mastermind

Hola! Soy una estudiante de industriales y tengo un problema: tengo que realizar una prueba final en pascal de informática, y no tengo ni tiempo ni conocimientos para hacerla. Es el juego del mastermind, y debe funcionar así:
"ORDENADOR": "piénsate un nº de 4 cifras diferentes.Dale a Return"
"USUARIO": "return"
"ORD.": Tu tiras. ¿Cuál crees que es mi nº?
"USU.": 1234
"ORD.": 1234:2 muertos, 1 herido.
"ORD": Yo tiro: 4689. ¿Cuántos muertos?
"USU": 1
"ORD":¿? ¿Cuántos heridos?
"USU": 1
Y así sucesivamente hasta que uno de los dos adivina el numero de su adversario.Los muertos son los números acertados en su posición original, y los heridos son los que aciertas pero en otra ubicación.
Bueno, perdona por el rollo, pero me harías un grandísimo favor pasándome ni que sea el algoritmo. Por favor contesta. Un beso. Gracias

1 respuesta

Respuesta
1
Aquí te mando una versión del ejercicio que pides. Dentro del código vienen algunas cosas
Comentadas. Espero que lo entiendas y te sea de provecho. Hasta el momento sólo no te implementé
La función que pone los valores de los # en el arreglo pues estoy pensando la forma más eficiente
De hacerlo.
Luego te la mando.
Saludos.
Por favor recuerda puntuarme.
type
numero = string[4]
respuesta = record
muertos,heridos:byte;
end;
numMarc = record
num:numero;
marca:boolean;
end;
arreglo = array[1..5040] of numMarc;
function Genera_Aleatorio(numpos:arreglo):numero;
begin
result:= numpos[random(5040)].num;
end;
function Genera_Numeros:arreglo
var
i:integer;
begin
for i:=1 to 5040 do
begin
result.num :=
result.marca:=false;
end;
end;
function Resp_Maq(npensado,nUsuario:numero):respuesta;
var
i:integer;
resp:respuesta;
begin
resp.muertos = 0; resp.heridos = 0;
for i:=0 to 3 do
begin
if npensado = nusuario
then
resp.muertos = resp.muertos + 1;
if AnsiContainsStr(npensado,nusuario)
//Esta función dice si lo segundo es subcadena de lo primero, está implementado en la unit
StrUtils de DELPHI, si quieres impementarla sólo recorre la cadena preguntando si el dígito
coincide con alguna posición.
then
resp.heridos = resp.heridos + 1;
end;
result := resp;
end;
//aquí ya tienes la respuesta de la máquina.
function Es_Ganador(resp:respuesta):boolean;
begin
result := Resp.muertos = 4;
end;
//para saber si el usuario ha ganado
function Entra_Numero : numero;
var
num:numero;
begin
writeln('Entra el #');
readln(num);
result:= num;
end;
function Jug_Maq(var numpos:arreglo):respuesta;
var
i:integer;
begin
i:=1;
while (i<=5040) and (numpos.marca) do
inc(i);
numpos.marca := true;
writeln(numpos.num,'Teclee muertos y heridos');
readln(result.muertos);
readln(ressult.heridos);
end;
//este es el programa
var
respU,respM:respuesta;
nusuario,npensado:numero;
NumPos:arreglo
begin
repeat
NumPos := Genera_Numeros;
npensado := Genera_Aleatorio(NumPos);
respU.muertos:=0;
respM.muertos:=0;
while Es_Ganador(respU) or Es_Ganador(respM)) do
begin
nusuario = Entra_Numero;
resp:= Resp_Maq(npensado,nusuario);
Muestra_resp(resp);
respM:=Jug_Maq(NumPos);
end;
if Es_Ganador(respU) then
write('Has ganado') else
write('Te he ganado')
repeat
writeln('Jugamos Otra vez (S/N)');
readln(r);
until (r='n')or(r='N')or(r='s')or(r='S')
until (r = 'n') or (r='N')
end;

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas