Pascal/Turbo Pascal - Juego del Master Mind urgente

 
Vista:

Juego del Master Mind urgente

Publicado por Mauro (3 intervenciones) el 16/11/2007 03:58:00
Hola gente disculpe la tardanza por contestar ,los mensajes pero es que tenia parciales y no pude contestar, ahora puedo y les mando este mensaje, el juego se encuentra en este sitio http://www.irt.org/games/js/mind/ , hay que agregarle un listado con los 20 mejores resultados (ranking) con nombre y puntaje. Tambien dice que no tiene que ser identico a los que se encuentra en ese sitio, dice que tengo que encontrar la interpretacion grafica, hay que hacerlo en el Turbo Pascal, se puede utilizar archivos, registro todo lo que sea nesesario, bueno eso es todo lo que me pide, yo les mando este mensaje porque se acerca la fecha de entrega del programa y no se ni como hacerlo, espero que me puedan ayudar, desde ya muchas gracias.
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
sin imagen de perfil

RE:Juego del Master Mind urgente

Publicado por Mechanic (177 intervenciones) el 16/11/2007 04:51:51
Hola Mauro!

A mi gusta programar juegos.
Visité la página donde está el Master Mind pero no se cómo jugarlo. No tiene instrucciones.

Si me explicas cómo se juega ese juego, talvez te pueda ayudar a comenzarlo pero no te lo voy a hacer todo..

Saludos!
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

RE:Juego del Master Mind urgente

Publicado por Juego del Master Mind urgente (3 intervenciones) el 17/11/2007 16:06:20
la maquina elije 4 bolitas de colores y vos tenews quje ir elijiendo hasta acertarle copn lo que openso la maquina. y mientras vas acertandole a cada uno te va poniendo una bolita blanca si le acertaste o negra no se bien, yo tampoco le jugue mucho, pero dijo que hay que acrlo con numeros sin colores porque no nos enseño eso, y despues hay que guardar en un archivo los 20 mejores jugadores con sus puntos y nombres. desde ya muchas gracias
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

RE:Juego del Master Mind urgente

Publicado por Manitou (2 intervenciones) el 15/12/2007 13:24:33
Aquí dejo el código del mastermind. Creo que funciona bastante bien pero bueno supongo que como todo código tendrá algún error. Lo he hecho en freepascal bajo linux. Así que si alguien lo ejecuta sobre windows le tirará también. Un saludo.
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
program ejer72;
uses crt;
const
 min=1;
 max=4;
type
 tRango=1..6;
 tJuego=array[min..max] of tRango;
var
 maquina,jugador:tJuego;
 ganador:boolean;
 intentos, estanbien:byte;
function Repetidos (mac:tJuego):boolean;
var
 aux:boolean;
begin
 aux:=false;
 if (mac[1]=mac[2]) or (mac[1]=mac[3]) or (mac[1]=mac[4]) or
    (mac[2]=mac[4]) or (mac[3]=mac[4]) or (mac[3]=mac[2]) or
    (mac[1]=mac[2]) and (mac[3]=mac[4]) and (mac[1]=mac[3]) and (mac[2]=mac[4]) then
    aux:=true;
  Repetidos:=aux;
end;
 
procedure Generar(var clave:tJuego);
var
 i:tRango;
begin
 randomize();
 for i:=1 to max do
 begin
  clave[i]:=random(6);
 end;
end;
procedure Intento(var partida:tJuego);
var
 i:tRango;
begin
 for i:=1 to max do
 begin
  write('Numero ', i,':' );
  readln(partida[i]);
 end;
end;
procedure Hundidos(a,b:tJuego;var bien:byte);
var
 i:tRango;
 aux:byte;
begin
 aux:=0;
 for i:=1 to max do
  if (a[i]=b[i]) then
  begin
  aux:=aux+1;
  writeln('La posición ',i,' es correcta.');
  end;
  writeln('Tienes ', aux, ' ahorcados. ');
  bien:=aux;
end;
procedure Tocados(c,d:tJuego);
var
 i,j,tocado,buscado:byte;
begin
tocado:=0;
for i:=1 to max do
 begin
 buscado:=d[i];
 for j:=1 to max do
  if (buscado=c[j]) and (i<>j) then
   tocado:=tocado+1;
 end;
 writeln('Tienes ', tocado,' a punto de guillotina. ');
end;
 
begin
 clrscr;
 ganador:=false;
 intentos:=0;
 writeln('============================');
 writeln('|| JUEGO DEL MASTER MIND  ||');
 writeln('============================');
 writeln;
 writeln('Este juego consiste en adivinar los 4 números que genera el ordenador');
 writeln('aleatoriamente. Se le irá diciendo cuáles han sido descubiertos y cuantos');
 writeln('están en la lista, pero mal ordenados.');
 writeln('Los números que podrá introducir son: 0,1,2,3,4 y 5.');
 writeln('A continuación la máquina creará su lista...');
 Generar(maquina);
 while Repetidos(maquina) do
  Generar(maquina);
 writeln('EL JUEGO HA COMENZADO...');
 writeln('*  *  *  *');
 writeln('Adivine qué numeros esconden estos asteriscos...');
 while (not ganador) and (intentos<6) do
 begin
 Intento(jugador);
 writeln;
 intentos:=intentos+1;
 Hundidos(maquina,jugador,estanbien);
 if (estanbien=4) then
  begin
    ganador:=true;
    writeln('Los ha descuebierto todos.');
  end
 else
  Tocados(maquina,jugador);
 writeln;
 writeln('Le quedan ',6-intentos, ' intentos.');
 writeln;
 end;
 writeln;
 if ganador then
 writeln('Enhorabuena, ha ganado.')
 else
 writeln('Lo siento, intentelo de nuevo. ');
 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
sin imagen de perfil

RE:Juego del Master Mind urgente

Publicado por Mechanic (177 intervenciones) el 19/11/2007 01:05:07
Hola Mauro!

Revísé el juego de MasterMind. Encuentro este juego muy muy bonito. Para ganar se necesita un poco de memoria y astucia.

Cómo ya se ha repetido varias veces en este foro, "Aquí no se hacen tareas" Pero..
Quería preguntarte algo: Para cúando tienes que presentar este trabajo?
Porque tengo una propuesta para todos..

Señores expertos del foro (y todos los demás).
Supongo que Mauro no tiene que presentar demasiado pronto este trabajo porque la verdad, sabemos que hacer un juego no es cosa fácil.

Qué les parece si hacemos este juego entre todos..?
Sí, entre todos.
Esta sería una manera interesante de hacer que todo el que quiera ser observador (o participante) aprenda más de pascal.

Creo que séría muy interesante ver como cada uno aporta sus ideas o incluso sus "segmentos de código". alguien podría sugerir Inicializarlo.. Por ejemplo
presentar el comienso del programa (con algunas variables) y explicar cómo cree que es mejor hacerlo. Otro podría encargarse de la parte de manejar los archivos porque dice Mauro que hay que almacenar los 20 punteos más altos con los nombres de los jugadores, se sugeriría si usar un archivo binario o de texto, alguien más pdría decir que tiene una manera de simplificar el código que ya tenemos,. Sería interesante ver las discuciones conforme lo vamos haciendo.

De último publicaríamos aquí los nombres de todos los autores.. Ja,ja.
Bien, es una idea un poco loca pero podríamos hacer más interesante nuestro foro de Pascal que en los últimos días se ha tornado un poco monótono.

Si alguien está de acuerdo y se anima.. espero alguna respuesta.

Pd. En esta dirección están también el MasterMind con sus instrucciones:
http://www2.kutxa.net/internet/zona/rzmastermind/01master-ins.htm

Saludos a todos!
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

RE:Juego del Master Mind urgente

Publicado por Master mind (3 intervenciones) el 20/11/2007 01:00:24
Hola me gusta la propuesta, asi mientras aportamos voy aprendiendo un poco, el trabajo es para fin de noviembre principio de diciembre. desde ya muchas gracias por todo y no quiero que ustedes me hagan la tarea, solo quiero ver si me pueden ayudar a empezar a hacerlo por que no entiendo bien como es. desde ya muchas gracias.
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
sin imagen de perfil

RE:Juego del Master Mind urgente

Publicado por Mechanic (177 intervenciones) el 20/11/2007 04:59:03
Hola Mauro!
Lo que yo tengo hasta el momento es esto. Por supuesto aún no funciona pues, está en construcción.
Examínalo un poco y dime si encuentras algo malo o si puedes cambiar o agregar algo. También puedes preguntar.
Saludos!
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
Program MasterMind;
Uses Crt;
Var Azul,Rojo,Amarillo,Verde,Celeste,Violeta : Integer;
    Tecla          : Char;
 
Procedure PintaCuadros(NumCuadro,Color: Integer);
begin
  TextColor(Color);
  GoToXY(35,4); Write(Char(219)); Write(Char(219));
  GoToXY(38,4); Write(Char(219)); Write(Char(219));
  GoToXY(41,4); Write(Char(219)); Write(Char(219));
  GoToXY(44,4); Write(Char(219)); Write(Char(219));
 
end;
 
begin
  Azul:= 1; Verde:= 2; Celeste:= 3; Rojo:= 4; Violeta:= 5; Amarillo:= 14;
 
  ClrScr; WriteLn('                           M a s t e r M i n d');
  GoToXY(10,25);
  Write('Programa en construcci¢n. Presione la tecla "1", luego ESC');
  GoToXY(5,4); TextColor(2);
  Write(Char(219)); Write(Char(219));
  GoToXY(9,4); TextColor(1);
  Write(Char(219)); Write(Char(219));
  GoToXY(13,4); TextColor(4);
  Write(Char(219)); Write(Char(219));
  GoToXY(17,4); TextColor(15);
  Write(Char(219)); Write(Char(219));
  GoToXY(21,4); TextColor(5);
  Write(Char(219)); Write(Char(219));
  GoToXY(25,4); TextColor(14);
  Write(Char(219)); Write(Char(219));
 
  Repeat
    If KeyPressed then Tecla := ReadKey;
    if Tecla = '1' then
    begin
      PintaCuadros(1,Azul);
      Tecla := ' ';
    end;
  Until Tecla = char(27);
 
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

RE:Juego del Master Mind urgente

Publicado por Martín (7 intervenciones) el 21/11/2007 06:52:31
Buenas,
Me gustó la idea del juego y me gustaría ser parte de su desarrollo pero no lo entiendo.
¿Alguien me podría decir como se desifran los códigos que te da cuando pones las bolitas?, es decir, como se gana =P
A los 5 años creo que lo conocí y todavía no puedo descubrirlo =$

En cuanto al desarrollo en Pascal creo que sería interesante hacerlo bajo un entorno gráfico ya que se vería mucho mejor. Además imprimir el "código" que te da cuando elegís las bolitas en modo texto sería un poco rebuscado y no quedaría bien.

Acá les dejo un código que hise. Activa el modo gráfico y el mouse. Por ahora no hace mucho, sólo imprime la bola que es seleccionada con el mouse. Para salir hagan click en la posición (0;0), osea arriba de todo a la izquierda.
Cualquier duda sobre el código pregunten =P

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
program masterMind;
 
uses graph,windos;
 
var
 
  {gráficos}
  gm,gd : integer;
 
  {mouse}
  xMouse,yMouse: integer;
  buttonPressed : integer;
  valido : boolean;
  regs : TRegisters;
 
  {bolitas}
  bolaActual : byte;
 
procedure mouseInitialization;
 
procedure showMouse;
begin
 
  regs.AX := 1;
  intr($33,regs);
 
end;
 
begin
 
  regs.AX := 0;
  intr($33,regs);
 
  if regs.AX = 0 then begin
 
    writeln('Error: driver/hardware no instalado.');
    writeln('Presione cualquier enter para salir...');
    readln;
    halt(1);
 
  end
  else
 
    showMouse;
 
end;
 
procedure hiddeMouse;
begin
 
  regs.AX := 2;
  intr($33,regs);
 
end;
 
procedure getMouseStatus;
begin
 
  regs.AX := 3;
  intr($33,regs);
 
  if not valido then
    buttonPressed := 0;
 
  if valido and (regs.BX = 1) then begin
    buttonPressed := 1;
    valido := false;
  end;
 
  if regs.BX = 0 then
    valido := true;
 
  xMouse := regs.CX;
  yMouse := regs.DX;
 
end;
 
procedure Circulo(x,y,r : integer);
var i : integer;
begin
 
  for i := 1 to r do
    circle(x,y,i);
 
end;
 
procedure PonerBola(bola : byte);
begin
 
  setColor(bola);
 
  case bolaActual of
    1 : circulo(200,300,10);
    2 : circulo(240,300,10);
    3 : circulo(280,300,10);
    4 : circulo(320,300,10);
  end;
 
  bolaActual := bolaActual + 1;
 
end;
 
begin
 
  gd := detect;
 
  initGraph(gd,gm,'BGI');
 
  if graphResult <> 0 then begin
    writeln('Error al iniciar el modo gráfico');
    writeln('Presione enter para salir...');
    readln;
    halt(1);
  end;
 
  mouseInitialization;
 
  setColor(1);
  circulo(100,400,10);
 
  setColor(2);
  circulo(140,400,10);
 
  setColor(3);
  circulo(180,400,10);
 
  setColor(4);
  circulo(220,400,10);
 
  setColor(7);
  circle(200,300,10);
  circle(240,300,10);
  circle(280,300,10);
  circle(320,300,10);
 
  setColor(15);
  outTextXY(1,1,'X');
 
  bolaActual := 1;
 
  repeat
 
    getMouseStatus;
    if (yMouse > 390) and (yMouse < 410) and (buttonPressed = 1) and (bolaActual < 5) then
      case xMouse of
        90..110 : ponerBola(1);
        130..150 : ponerBola(2);
        170..190 : ponerBola(3);
        210..230 : ponerBola(4);
      end;
 
  until (buttonPressed = 1) and (yMouse = 0) and (xMouse = 0);
 
  hiddeMouse;
 
  closeGraph;
 
end.


Saludos,
Martín.
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
sin imagen de perfil

RE:Juego del Master Mind urgente

Publicado por Mechanic (177 intervenciones) el 22/11/2007 01:32:31
Saludos Martín!

Cuando pones tus cuatro colores, el juego te dice qué tanto acertaste, y lo hace poniendo a la derecha unas bolitas blancas y negras.

Supongamos que ya pusiste tus cuatro colores.
Y supongamos que te pone dos bolitas blancas y una negra:

Las dos blancas te indican que dos de los colores que pusiste, sí existen en el código pero no están en el orden correcto.

La negra te indica que uno de los colores que pusiste existe en el código y está en la posición correcta. Pero tú no sabes cuál es ese color.

En tus siguientes tíros tienes que ir probando cuál de los colores que pusiste, está bien, y así susesivamente hasta que des con el código.

Espero haberme explicado bien.
En cuanto a tu código:

Felicitaciones! Está muy bien diseñado.
Me gustó especialmente eso de:

case xMouse of
90..110 : ponerBola(1);
130..150 : ponerBola(2);
170..190 : ponerBola(3);
210..230 : ponerBola(4);
end;
Muy ingenioso.. Esto es para que tengas cierto rango de píxeles dónde
poner el puntero al hacer clic en cada círculo (No como en ese "puntito" que pusiste arriba para salir del programa jaja.)

Me parece excelente idea lo de hacerlo en modo gráfico, A mí también me gusta programar en modo gráfico.

Lo del mouse también es buena idea, pero eso de la inicialización del mouse y esas funciones de getMouseStatus, hiddeMouse etc.
Pienso que no es necesario mostrar todo ese código, podríamos dejar eso en una Unit como por ejemplo Unit mouse.

Así solo podrías:

uses crt, grahp, mouse.

Y en el cuerpo principal del programa solo pones:

mouseInitialization;
ShowMouse;

Entre menos líneas de código haya, será más fácil para todos entenderlo.
Podríamos esconder todo esto que encerré entre (*****************************):

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
program masterMind;
 
uses graph,windos;
 
var
 
{gráficos}
gm,gd : integer;
 
{mouse}
xMouse,yMouse: integer;
buttonPressed : integer;
valido : boolean;
regs : TRegisters;
 
{bolitas}
bolaActual : byte;
(**********************************************************************************)
procedure mouseInitialization;
 
procedure showMouse;
begin
 
regs.AX := 1;
intr($33,regs);
 
end;
 
begin
 
regs.AX := 0;
intr($33,regs);
 
if regs.AX = 0 then begin
 
writeln('Error: driver/hardware no instalado.');
writeln('Presione cualquier enter para salir...');
readln;
halt(1);
 
end
else
 
showMouse;
 
end;
 
procedure hiddeMouse;
begin
 
regs.AX := 2;
intr($33,regs);
 
end;
 
procedure getMouseStatus;
begin
 
regs.AX := 3;
intr($33,regs);
 
if not valido then
buttonPressed := 0;
 
if valido and (regs.BX = 1) then begin
buttonPressed := 1;
valido := false;
end;
 
if regs.BX = 0 then
valido := true;
 
xMouse := regs.CX;
yMouse := regs.DX;
 
end;
(*********************************************************************************)
procedure Circulo(x,y,r : integer);
var i : integer;
begin
 
for i := 1 to r do
circle(x,y,i);
 
end;
 
procedure PonerBola(bola : byte);
begin
 
setColor(bola);
 
case bolaActual of
1 : circulo(200,300,10);
2 : circulo(240,300,10);
3 : circulo(280,300,10);
4 : circulo(320,300,10);
end;
 
bolaActual := bolaActual + 1;
 
end;
 
begin
 
gd := detect;
 
initGraph(gd,gm,'BGI');
 
if graphResult <> 0 then begin
writeln('Error al iniciar el modo gráfico');
writeln('Presione enter para salir...');
readln;
halt(1);
end;
 
mouseInitialization;
 
setColor(1);
circulo(100,400,10);
 
setColor(2);
circulo(140,400,10);
 
setColor(3);
circulo(180,400,10);
 
setColor(4);
circulo(220,400,10);
 
setColor(7);
circle(200,300,10);
circle(240,300,10);
circle(280,300,10);
circle(320,300,10);
 
setColor(15);
outTextXY(1,1,'X');
 
bolaActual := 1;
 
repeat
 
getMouseStatus;
if (yMouse > 390) and (yMouse < 410) and (buttonPressed = 1) and (bolaActual < 5) then
case xMouse of
90..110 : ponerBola(1);
130..150 : ponerBola(2);
170..190 : ponerBola(3);
210..230 : ponerBola(4);
end;
 
until (buttonPressed = 1) and (yMouse = 0) and (xMouse = 0);
 
hiddeMouse;
 
closeGraph;
 
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

RE:Juego del Master Mind urgente

Publicado por Martín (7 intervenciones) el 22/11/2007 04:48:26
Bueno Mechanic todas tus sugerencias me parecen buenas, habría que terminar de codificar la unidad del mouse y modificar la función de imprimir las bolitas para que las muestre completas y desaparezcan esos pixels negros que quedan en el medio.
En cuanto al puntito de salir, ya estaba cansado y no tenía ganas de calcular cuantos pixels ocupaba la X =P

Saludos,
Martín.
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

RE:Juego del Master Mind urgente

Publicado por yolmer.rosales (10 intervenciones) el 22/11/2007 19:39:10
francamente el juego queda mas bonito en modo gráfico pero si la memoria no me falla el chaval que tiene que entregar la tarea dijo que no debia ser en modo gráfico porque eso no se lo habían enseñado :P
para mi, yo creo que el profesor esta mas interesado en la lógica del programa no se algo así
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
var
    x,
    y: integer;  {para los bucles}
    clave,
     intento,
      resultado : array [0..3] of integer;
  salir : boolean;
 
 
   procedure genera         {para un codigo de cuatro digitos}
   begin
      ramdomize
      for x := 0 to 3 do
          clave[x] := random(10)
   end;
 
   Procedure lee;
     tecla : char;
     begin
          for  x := 0 to 3 do
             begin
                  tecla := readkey ;
                  {aquí un procedimiento para verificar que la entrada sea valida}
                   intento[x] := ord(tecla)-48; {para convertirlo en número}
                   gotoxy(13,38+x);
                   write(tecla)
             end;
     end
   Procedure compara;
 
          begin
              for x := 0 to 3 do
                  resultado := 0;
              for x := 0 to 3 do
                 for y := 0 to 3 do
                       if intento[x] = clave[y] then
                            if x = y then
                                   resultado := 2                 {si está en la posición}
                               else
                                   if resultado[x] = 0 then {solo si no está marcado ya}
                                      resultado := 1;
                salir := true;
                for x := 0 to 3 do
                    if resultado[x] <> 2 then
                        salir := false;
            end; {end procedure}
 
Procedure muestra
  begin
       for x := 0 to 3 do
           begin
               gotoxy(14,38+x);
                write(resultado[x])
           end
 
{************************************************}
{              cuerpo del programa                           }
{************************************************}
var
  cont : integer;
  salir : boolean
begin
       genera;
      boolean := false
    while not salir do {número de intentos}
         begin
              lee;
              compara;
               muestra;
               if salir then
                    write(acertaste)
         end
end;
 
{alguien que ponga el resto ya me cansé}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

RE:Juego del Master Mind urgente

Publicado por Mechanic (177 intervenciones) el 22/11/2007 21:19:39
Hola yolmer.rosales .
Gracias por dedicarle un poco de tiempo a nuestro juego!

Lo que dijo mauro es que para hacer el juego hay que encontrar la inrerpretación gráfica, pero que se hiciera con númoros y no con colores porque eso no se los han enseñado. Bueno, si no le han enseñado eso es de asumir que tampoco ha visto el modo gráfico.

No me recordaba de eso!

ahora bién, el código que pusiste sirve como un ejemplo porque,
se nota que no lo compilaste y la verdad yo no lo analizé bién porque hay que componer muchas cosas para que compile y eso quita tiempo.

De todas formas, por si se decide continuar con el modo gráfico, yo ya separé el código de Martín dos partes (no significa que continuemos este código):

Unidad - Mouse.pas
Programa - Master.pas

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
********************************************************
Unit Mouse;
Interface
  uses Graph,WinDos;
  var regs : TRegisters;
    valido : boolean;
    buttonPressed,xMouse,yMouse : integer;
  procedure mouseInitialization;
  procedure hiddeMouse;
  procedure getMouseStatus;
Implementation
 
procedure mouseInitialization;
procedure showMouse;
begin
regs.AX := 1;
intr($33,regs);
end;{showMouse}
 
begin
regs.AX := 0;
intr($33,regs);
 
if regs.AX = 0 then
begin
writeln('Error: driver/hardware no instalado.');
writeln('Presione cualquier enter para salir...');
readln;
halt(1);
end
else
showMouse;
end;{mouseInitialization}
 
procedure hiddeMouse;
begin
regs.AX := 2;
intr($33,regs);
end;{hiddeMouse}
 
procedure getMouseStatus;
begin
regs.AX := 3;
intr($33,regs);
 
if not valido then
buttonPressed := 0;
 
if valido and (regs.BX = 1) then begin
buttonPressed := 1;
valido := false;
end;
 
if regs.BX = 0 then
valido := true;
 
xMouse := regs.CX;
yMouse := regs.DX;
end;{getMouseStatus}
end.
 
********************************************************
 
program masterMind;
uses graph,windos,mouse;
var
 
{gr ficos}
gm,gd : integer;
 
{bolitas}
bolaActual : byte;
 
procedure Circulo(x,y,r : integer);
var i : integer;
begin
for i := 1 to r do
circle(x,y,i);
end;
 
procedure PonerBola(bola : byte);
begin
setColor(bola);
 
case bolaActual of
1 : circulo(200,300,10);
2 : circulo(240,300,10);
3 : circulo(280,300,10);
4 : circulo(320,300,10);
end;{case}
 
bolaActual := bolaActual + 1;
end;{PonerBola}
 
begin{Principal}
gd := detect;
initGraph(gd,gm,'BGI');
 
if graphResult <> 0 then
begin
writeln('Error al iniciar el modo gráfico');
writeln('Presione enter para salir...');
readln;
halt(1);
end;
 
mouseInitialization;
 
setColor(1);
circulo(100,400,10);
setColor(2);
circulo(140,400,10);
setColor(3);
circulo(180,400,10);
setColor(4);
circulo(220,400,10);
 
setColor(7);
circle(200,300,10);
circle(240,300,10);
circle(280,300,10);
circle(320,300,10);
 
setColor(15);
outTextXY(1,1,'X');
 
bolaActual := 1;
 
repeat
getMouseStatus;
if (yMouse > 390) and (yMouse < 410) and (buttonPressed = 1) and
 (bolaActual < 5) then
case xMouse of
90..110 : ponerBola(1);
130..150 : ponerBola(2);
170..190 : ponerBola(3);
210..230 : ponerBola(4);
end;{case}
 
until (buttonPressed = 1) and (yMouse = 0) and (xMouse = 0);
 
hiddeMouse;
closeGraph;
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

RE:Juego del Master Mind urgente

Publicado por Mechanic (177 intervenciones) el 22/11/2007 22:58:20
Bien yolmer.rosales .

Quiero disculparme porque al analizar tu código me he dado cuenta de que tú has aportado la solución real del programa, aunque sin preocuparte por los detalles menores.

Este es, tu código, solo le hice algunos ajustes para poder usarlo.
Creo que esto es lo que necesitabas Mauro, y se lo debes a Yolmer.rosales.

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
uses crt;
var
cont : integer; {Cuenta intentos}
salir : boolean;
x,y: integer; {para los bucles}
clave,intento,
resultado : array [0..3] of integer;
 
procedure genera; {para un codigo de cuatro digitos}
begin
randomize;
Write('Codigo: ');
for x := 0 to 3 do
begin
clave[x] := random(10);
Write(clave[x]);
end;
end;
 
Procedure lee;
var
tecla : char;
begin
 
for x := 0 to 3 do
begin
tecla := readkey ;
Intento[x] := Ord(Tecla)-48;
gotoxy(18+x,Cont+4);
write(tecla)
end;
end;
 
Procedure compara;
 
begin
for x := 0 to 3 do
resultado[x] := 0;
for x := 0 to 3 do
for y := 0 to 3 do
if intento[x] = clave[y] then
if x = y then
resultado[x] := 2 {si está en la posición}
else
if resultado[x] = 0 then {solo si no está marcado ya}
resultado[x] := 1;
salir := true;
for x := 0 to 3 do
if resultado[x] <> 2 then
salir := false;
end; {end procedure}
 
Procedure muestra;
begin
for x := 0 to 3 do
begin
gotoxy(28+x,Cont+4);
write(resultado[x])
end;
end;
 
begin
Cont := 0;
ClrScr;
WriteLn('Ingrese c¢digo de cuatro d¡gitos');
genera;
Salir{boolean} := false;
while not salir do {número de intentos}
begin
lee;
compara;
muestra;
Cont := Cont + 1;
if salir then
begin
GoToXY(45,2);
write('acertaste');
end;
end;
ReadKey
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

RE:Juego del Master Mind urgente

Publicado por Martín (7 intervenciones) el 25/11/2007 07:07:09
Muy bueno lo de Yolmer.rosales
Me gustó como resolviste la forma de mostrar la "pista" que te da cuando pones los colores, no se me hubiera ocurrido.

Saludos,
Martín.
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

RE:Juego del Master Mind urgente

Publicado por yolmer (10 intervenciones) el 21/04/2008 22:50:21
hola mechanic gracias por las correcciones.
no se si ya lo probaste
yo solo lo escribí directo en el foro, ya se que para la proxima trato de compilarlo primero
disculpen por haberme ausentado tanto tiempo
me gustaron las correcciónes pero cabe una mas que ahora yo te hago a tí
debemos eliminar la línea write(clave[x]); en el procedimiento "genera" ya que esta sentencia mostrará la clave al comienzo del juego.
no se si me explico
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
sin imagen de perfil

RE:Juego del Master Mind urgente

Publicado por M2 (15 intervenciones) el 04/12/2012 17:01:25
Hola estoy haciendo ese ejercicio pero, el problema que tengo es que no puedo utilizar las instrucciones ReadKey y GoTOXY, me podrias decir como hacerlo, muchas gracias.
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
sin imagen de perfil

RE:Juego del Master Mind urgente

Publicado por M2 (15 intervenciones) el 04/12/2012 18:20:34
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
PROGRAM mastermind;
uses crt;
CONST
  max=4;
 
TYPE
  tcodigo=ARRAY[1..max]OF INTEGER;
var
cont,muertos,heridos : integer; {Cuenta intentos}
x,y: integer; {para los bucles}
clave,intento : tcodigo;
 
procedure genera; {para un codigo de cuatro digitos}
begin
randomize;
for x := 1 to max do
begin
clave[x] := random(10);
end;
end;
 
Procedure lee;
var
num,i : integer;
begin
 
FOR i:=1 TO max DO
  BEGIN
    WRITELN('Introduzca un posible numero secreto cifra a cifra: ');
    READLN(num);
    intento[i]:=num;
  END;
end;


Procedure compara(VAR muertos,heridos:integer);

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
begin
for x := 1 to max do
for y := 1 to max do
if intento[x] = clave[y] then
   if x = y then
      muertos:=muertos+1 {si está en la posición}
   else begin
        WHILE (muertos+heridos)<4 DO
        BEGIN
        heridos:=heridos+1;
        END;
        END;
WRITELN('muertos: ',muertos);
WRITELN('heridos: ',heridos);
end; {end procedure}
 
begin
Cont := 0;
muertos:=0;
heridos:=0;
ClrScr;
WriteLn('Ingrese c¢digo de cuatro d¡gitos');
READLN;
genera;
REPEAT {número de intentos}
 
lee;
compara(muertos,heridos);
Cont := Cont + 1;
if muertos=4 then
write('acertaste');
IF Cont=7 THEN WRITELN('Agotaste los intentos');
UNTIL (Cont=7) or (muertos=4);
readln;
end.


He conseguido hacer el programa sin esas instrucciones pero estoy un poco astacada en la parte que controla los heridos ya que aunque he puesto que si la suma de muertos y heridos es mayor de 4 no incremente sigue sin funcionar correctamente, agradeceria que le echarais un vistazo, gracias.
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
sin imagen de perfil

RE:Juego del Master Mind urgente

Publicado por M2 (15 intervenciones) el 04/12/2012 18:38:30
Ya lo consegui muchas gracias, tu codigo me ha servido mucho
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