Pascal/Turbo Pascal - Mastermind

 
Vista:
sin imagen de perfil

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.
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

Mastermind

Publicado por ramon (2158 intervenciones) el 05/12/2012 17:01:28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
{Mira esto a ver si te ayuda  el numero secreto se debe de generar como aleatoria mente para que
 en cada jugada sea uno diferente sino el juego no tiene gracia puesto que cuando se encuentre
 siempre sera el mismo}
 
program masmic;
  uses
    crt;
  var
    njugador : integer;
    nsecreto : integer;
    tecla : char;
    jugadas : array[1..7] of string[4];
    term : boolean;
    muertos, eridos, cont, i : integer;
    secre : string[4];
    comofue : array[1..7,1..4] of char;
 
  procedure generanumerosecreto;
  var
    t, erro, i, n : integer;
    fayo, final : boolean;
    numero : string[4];
    d : string[2];
   begin
     randomize;
     final := false;
     i := 0;
     t := 1;
     fillchar(numero,5,' ');
     numero[0] := chr(4);
     repeat
         n := random(10);
         fayo := false;
         for i := 1 to length(numero) do
         begin
            str(n,d);
            if d[1] = numero[i] then
            begin
               fayo := true;
            end
         end;
         if fayo = false then
         begin
            numero[t] := d[1];
            numero[0] := chr(t);
            t := t + 1;
            if t > 4 then
            final := true;
         end;
     until (final = true) or (keypressed);
     val(numero,nsecreto,erro);
     if erro <> 0 then
     begin
        delete(numero,erro,1);
        val(numero,nsecreto,erro);
     end;
  end;
 
  procedure numerodeljugador;
  var
    erro, n : integer;
    dato : string[4];
    te :  char;
  begin
      clrscr;
     n := 1;
     fillchar(dato,5,' ');
     dato[0] := chr(4);
     repeat
     clrscr;
     write(' Intento N§ : ',cont,'  Entre 4 numeros N§[ ',n,' ] : ',dato);
     te := readkey;
     dato[n] := te;
     dato[0] := chr(n);
     n := n + 1;
     if n > 4 then
     begin
        clrscr;
        write(' Intento N§ : ',cont,'  Entre 4 numeros N§[ ',n,' ] : ',dato);
        delay(500);
     end;
     until n > 4;
     writeln;
     val(dato,njugador,erro);
     if erro <> 0 then
     begin
       delete(dato,erro,1);
       val(dato,njugador,erro);
     end;
  end;
 
  begin
     clrscr;
     generanumerosecreto;
     term := false;
     cont := 1;
     str(nsecreto,secre);
     muertos := 0;
     eridos := 0;
     fillchar(comofue,sizeof(comofue),'H');
   repeat
     numerodeljugador;
     str(njugador,jugadas[cont]);
     if jugadas[cont] = secre then
     begin
         term := true;
     end;
        if (secre[1] = 'm') and (secre[2] = 'm') and
                         (secre[3] = 'm') and (secre[4] = 'm') then
        begin
        term := true;
        writeln(' N§ : ',jugadas[cont]);
        end;
     for i := 1 to 4 do
     begin
     if secre[i] = jugadas[cont][i] then
     begin
        muertos := muertos + 1;
        secre[i] := 'm';
        comofue[cont,i] := 'M';
     end;
     if (ord(secre[i]) + 1 = ord(jugadas[cont][i])) or
        (ord(secre[i]) - 1 = ord(jugadas[cont][i])) then
        begin
        eridos := eridos + 1;
        secre[i] := 'm';
        comofue[cont,i] := 'E';
        end;
     end;
     clrscr;
     cont := cont + 1;
   until (cont > 7) or (term = true);
   clrscr;
   if (term = true) and (cont - 1 = 1) then
   begin
      writeln(' Usted A Ganado De Pleno Muertos = 4');
   end
 else
    begin
      if (term = true) and (cont - 1 > 1) then
      begin
      writeln(' Usted A Consegido Despues de : ',cont - 1,' Intentos');
      end;
    end;
     writeln;
     writeln(' N§ Muertos = ',muertos);
     writeln(' N§ Eridos  = ',eridos);
     writeln(' N§ Intentos = ',cont - 1);
     writeln;
     writeln(' N§ Secreto = ',nsecreto);
     writeln(' Sus N§ Son ');
     writeln;
     for i := 1 to cont - 1 do
     begin
     writeln(' N§ : ',i,' ',jugadas[i]);
     end;
     writeln;
     writeln('  Sus Aciertos Fueron ');
     writeln;
     for i := 1 to cont - 1 do
     writeln('  En La N§ : ',i, ' = ', comofue[i,1],' ',comofue[i,2],' ',
                                       comofue[i,3],' ',comofue[i,4]);
     readln;
  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