
Mastermind
Publicado por M2 (15 intervenciones) el 03/12/2012 19:01:42
Buenas tardes!!
Estoy haciendo un programa que simula el juego de mastermind segun el enunciado:
Subprograma que simule el Mastermind. Recibe como parámetros el número secreto y el
introducido por el usuario y devuelve el número de “heridos y muertos”. Se trabaja con
números de 4 cifras que no tienen dos dígitos iguales y el subprograma recibe los números
en vectores de cuatro posiciones que son dígitos enteros.
yo he entendido que el numero secreto debe ser una constate, y no si estoy trabajando bien con el , ademas no se como programar en el programa principal que de 7 intentos, os dejo mi codigo haber si podeis echarle un vistazo, muchas gracias de todas formas.
PROGRAM ejercicio3;
CONST
max=4;
codigo=1263;
TYPE
tvector=ARRAY[1..max] OF INTEGER;
VAR
numUsuario,numCodigo:tvector;
heridos,muertos,numVeces:integer;
acierto:boolean;
PROCEDURE pideNumeroSecreto(VAR numUsuario:tvector);
VAR
num,i:integer;
BEGIN
FOR i:=1 TO 4 DO
BEGIN
WRITELN('Introduzca un posible numero secreto cifra a cifra: ');
READLN(num);
numUsuario[i]:=num;
END;
END;
PROCEDURE convertirCodigo(VAR numCodigo:tvector);
VAR
i,coc,num,aux:integer;
BEGIN
aux:=codigo;
i:=4;
WHILE aux>0 DO
BEGIN
coc:=aux DIV 10;
num:=aux MOD 10;
numCodigo[i]:=num;
i:=i-1;
aux:=coc;
END;
END;
PROCEDURE compruebaNumero(VAR numUsuario,numCodigo:tvector; muertos,heridos:integer);
VAR
i,j:integer;
compruebaM,compruebaH:boolean;
BEGIN
FOR i:=1 TO 4 DO
BEGIN
FOR j:=1 TO 4 DO
BEGIN
IF (i=j) AND (numUsuario[i]=numCodigo[j])THEN compruebaM:=true;
IF (i<>j) AND (numUsuario[i]=numCodigo[j])THEN compruebaH:=true;
END;
IF compruebaM THEN muertos:=muertos+1;
IF compruebaH THEN heridos:=heridos+1;
END;
END;
BEGIN
numVeces:=0;
muertos:=0;
heridos:=0;
WHILE (not acierto) or (numVeces<7) DO
BEGIN
pideNumeroSecreto(numUsuario);
convertirCodigo(numCodigo);
compruebaNumero(numUsuario,numCodigo,muertos,heridos);
IF (muertos=4) AND (heridos=0)THEN acierto:=true;
numVeces:=numVeces+1;
END;
IF acierto THEN WRITELN('HA ADIVINADO EL NUMERO')
ELSE BEGIN
WRITELN('HA AGOTADO EL NUMERO DE INTENTOS');
WRITELN('muertos: ',muertos);
WRITELN('heridos: ',heridos);
END;
READLN;
END.
Estoy haciendo un programa que simula el juego de mastermind segun el enunciado:
Subprograma que simule el Mastermind. Recibe como parámetros el número secreto y el
introducido por el usuario y devuelve el número de “heridos y muertos”. Se trabaja con
números de 4 cifras que no tienen dos dígitos iguales y el subprograma recibe los números
en vectores de cuatro posiciones que son dígitos enteros.
yo he entendido que el numero secreto debe ser una constate, y no si estoy trabajando bien con el , ademas no se como programar en el programa principal que de 7 intentos, os dejo mi codigo haber si podeis echarle un vistazo, muchas gracias de todas formas.
PROGRAM ejercicio3;
CONST
max=4;
codigo=1263;
TYPE
tvector=ARRAY[1..max] OF INTEGER;
VAR
numUsuario,numCodigo:tvector;
heridos,muertos,numVeces:integer;
acierto:boolean;
PROCEDURE pideNumeroSecreto(VAR numUsuario:tvector);
VAR
num,i:integer;
BEGIN
FOR i:=1 TO 4 DO
BEGIN
WRITELN('Introduzca un posible numero secreto cifra a cifra: ');
READLN(num);
numUsuario[i]:=num;
END;
END;
PROCEDURE convertirCodigo(VAR numCodigo:tvector);
VAR
i,coc,num,aux:integer;
BEGIN
aux:=codigo;
i:=4;
WHILE aux>0 DO
BEGIN
coc:=aux DIV 10;
num:=aux MOD 10;
numCodigo[i]:=num;
i:=i-1;
aux:=coc;
END;
END;
PROCEDURE compruebaNumero(VAR numUsuario,numCodigo:tvector; muertos,heridos:integer);
VAR
i,j:integer;
compruebaM,compruebaH:boolean;
BEGIN
FOR i:=1 TO 4 DO
BEGIN
FOR j:=1 TO 4 DO
BEGIN
IF (i=j) AND (numUsuario[i]=numCodigo[j])THEN compruebaM:=true;
IF (i<>j) AND (numUsuario[i]=numCodigo[j])THEN compruebaH:=true;
END;
IF compruebaM THEN muertos:=muertos+1;
IF compruebaH THEN heridos:=heridos+1;
END;
END;
BEGIN
numVeces:=0;
muertos:=0;
heridos:=0;
WHILE (not acierto) or (numVeces<7) DO
BEGIN
pideNumeroSecreto(numUsuario);
convertirCodigo(numCodigo);
compruebaNumero(numUsuario,numCodigo,muertos,heridos);
IF (muertos=4) AND (heridos=0)THEN acierto:=true;
numVeces:=numVeces+1;
END;
IF acierto THEN WRITELN('HA ADIVINADO EL NUMERO')
ELSE BEGIN
WRITELN('HA AGOTADO EL NUMERO DE INTENTOS');
WRITELN('muertos: ',muertos);
WRITELN('heridos: ',heridos);
END;
READLN;
END.
Valora esta pregunta


0