
SOLITARIO EN PASCAL
Publicado por Jose Miguel (7 intervenciones) el 23/02/2015 10:33:17
He estado mirando este programa de 1º de Ingenieria Tecnica en Informatica de Sistemas.
Y me compila y lo ejecuto, pero me gustaria que lo probarais.
Saca cartas del monton de reserva y coloca una carta en cada monton de trabajo pero no
consigo que reorganice cartas. ¿Por que puede ser? ¿Alguien puede ayudarme?
Despues de barajar las 40 cartas de la baraja española, se descubren 4 cartas. sobre
estas 4 cartas se van a ir formando montones ordenados decrecientemente,c on numeros
correlativosy dos cartas comunes nunca pueden pertenecer al mismo palo. 4 montones de trabajo.
Simultaneamente se pueden ir formando otros 4 montones de formación empezando por el as
del palo y añadiendo cartas orrrelativas (mismo palo y numero inmediato superior)
Despues de barajar y descubrir las 4 primeras cartas. del monton de reserva solo es
accesible la carta situada encima. Este es el monton de reserva
En cualquier momento se pueden reorganizar la cartas en los montones, llevando una
carta de un monton a otro, siempre que se mantenga la naturaleza de cada uno. de cada
monton, cada vez solo sera accesible la ultima carta que entro en el. este proceso se puede
realizar las veces que se quiera.
el juego finaliza cuando se hayan formado los cuatro montones ordenados de cada palo, sea
imposible seguir realizando jugadas o no se quiera continuar jugando.
Acciones permitidas en el juego:
- Iniciar el juego, barajar y colocar cada una de las cuatro primeras cartas en cdad monton
de trabajo
- Sacar la siguiente carta de la baraja al monton de reserva
- Reorganizar montones
- Del monton de reserva a un monton de trabajo
- dEL monton de reserva a un monton de formacion
- de un monton de trabajoa otro
- de un monton de trabajo a un monton de formacion
- de un monton de formacion a un monton de trabajo.
Y me compila y lo ejecuto, pero me gustaria que lo probarais.
Saca cartas del monton de reserva y coloca una carta en cada monton de trabajo pero no
consigo que reorganice cartas. ¿Por que puede ser? ¿Alguien puede ayudarme?
Despues de barajar las 40 cartas de la baraja española, se descubren 4 cartas. sobre
estas 4 cartas se van a ir formando montones ordenados decrecientemente,c on numeros
correlativosy dos cartas comunes nunca pueden pertenecer al mismo palo. 4 montones de trabajo.
Simultaneamente se pueden ir formando otros 4 montones de formación empezando por el as
del palo y añadiendo cartas orrrelativas (mismo palo y numero inmediato superior)
Despues de barajar y descubrir las 4 primeras cartas. del monton de reserva solo es
accesible la carta situada encima. Este es el monton de reserva
En cualquier momento se pueden reorganizar la cartas en los montones, llevando una
carta de un monton a otro, siempre que se mantenga la naturaleza de cada uno. de cada
monton, cada vez solo sera accesible la ultima carta que entro en el. este proceso se puede
realizar las veces que se quiera.
el juego finaliza cuando se hayan formado los cuatro montones ordenados de cada palo, sea
imposible seguir realizando jugadas o no se quiera continuar jugando.
Acciones permitidas en el juego:
- Iniciar el juego, barajar y colocar cada una de las cuatro primeras cartas en cdad monton
de trabajo
- Sacar la siguiente carta de la baraja al monton de reserva
- Reorganizar montones
- Del monton de reserva a un monton de trabajo
- dEL monton de reserva a un monton de formacion
- de un monton de trabajoa otro
- de un monton de trabajo a un monton de formacion
- de un monton de formacion a un monton de trabajo.
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
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
PROGRAM SOLITARIO (Input,Output);
Uses CRT;
Type
T_Palo = (Oros,Copas,Bastos,Espadas);
T_Numero = 0..12;
Carta = RECORD
Numero:T_Numero;
Palo:T_Palo;
Flag:Boolean
END;
T_Reserva = Array [1..36] of Carta;
T_Monton = Array [1..4,1..10] of Carta;
T_Baraja = Array [1..40] of Carta;
Var
MReserva:T_Reserva;
MT,MF: T_Monton;
Baraja:T_Baraja;
c1,c2,c3,c4,co,cc,cb,ce,cr,cba,sit:Integer;
Terminar : Boolean;
Opcion,caracter:Char;
PROCEDURE Limpiar_pantalla;
(*Procedimiento para limpiar la pantalla*)
VAR
Cont:Integer;
BEGIN
FOR Cont:= 1 TO 24 DO
Writeln;
END;
PROCEDURE Eliminar_Mtf(VAR M:T_Monton;Fila:Integer);
(* Elimina la primera posición de una de las filas de la tabla *)
(* bidimensional que actua como montón de trabajo ó de formación *)
VAR
Cont:Integer;
BEGIN
FOR Cont:=1 TO 9 DO
M[Fila,Cont] := M[Fila,Cont+1];
M[1,10].Numero := 0
END;
PROCEDURE Eliminar_baraja (VAR B1:T_Baraja);
(* Elimina una carta de la Baraja, poniendo la carta Nº 40 a cero. *)
VAR
Cont:Integer;
BEGIN
FOR Cont:= 1 TO 39 DO
B1[Cont] := B1[Cont+1];
B1[40].Numero := 0;
B1[40].Flag := false;
END;
PROCEDURE Inicializar_Baraja(VAR B2:T_Baraja);
(* Coloca todas las cartas a valor Numero=0 y Flag=False *)
VAR
Cont:Integer;
BEGIN
FOR Cont := 1 TO 40 DO
BEGIN
B2[Cont].Numero := 0;
B2[Cont].Flag := false
END;
END;
PROCEDURE Barajar (VAR Bar:T_Baraja;VAR Matriz:T_Monton);
(* Barajar la barja y colocar cada una de las cuatro primeras *)
(* cartas de la baraja en cada montón de trabajo. *)
VAR
I,J,Cont:Integer;
Contador:T_Palo;
Num:1..40;
BEGIN
Randomize;
Gotoxy(1,1);
Inicializar_baraja(Bar);
Cont := 0;
FOR Contador := Oros TO Espadas DO
BEGIN
I:= 1;
REPEAT
Num := Random(41);
IF (Bar[Num].Flag = False) AND (Num<>0)
THEN BEGIN
Bar[Num].Numero := 1;
Bar[Num].Palo := Contador;
Bar[Num].Flag := True;
Cont := Cont +1;
I:=I+1;
END;
UNTIL I=8;
J:=10;
REPEAT
Num:= Random(41);
IF(Bar[Num].Flag = False) AND (Num<>0)
THEN BEGIN
Bar[Num].Numero := J;
Bar[Num].Palo := Contador;
Bar[Num].Flag := True;
Cont := Cont+1;
J:=J+1
END;
UNTIL J= 13;
END;
(* Colocacion de las 4 primeras cartas de la baraja en cada montón de trabajo *)
FOR Cont := 1 TO 4 DO
BEGIN
Matriz[Cont,1].Numero := Bar[Cont].Numero;
Matriz[Cont,1].Palo := Bar[Cont].Palo
END;
FOR Cont:=1 TO 4 DO
Eliminar_baraja(Bar);
END; (*BARAJAR*)
PROCEDURE Mtrabajo (VAR ct_m,ctador: Integer: M1:T_Monton);
(* Escritura tanto de los montones de formación como de trabajo *)
BEGIN
Write(M1[ct_m,ctador].Numero)
CASE M1[ct_m,ctador].Palo OF
Oros: Writeln('Oros');
Copas: Writeln('Copas');
Bastos:Writeln('Bastos');
Espadas:Writeln('Espadas');
END;
END;
PROCEDURE Mformacion(VAR cont_m,contador:Integer; M2:T_Monton);
(*Escritura tanto de los montones de formación como de trabajo *)
BEGIN
Write(M2[cont_m,contador].Numero);
CASE M2[cont_m,contador].Palo OF
Oros: Writeln('Oros');
Copas: Writeln('Copas');
Bastos: Writeln('Bastos');
Espadas: Writeln('Espadas');
END;
END;
PROCEDURE Situacion (Mtrab,Mform:T_Monton;Mfreserva:T_Reserva;Mfbaraja:T_Baraja;VAR cuenta:Integer);
(* A partir del cual imprimiremos en OUTPUT la representación gráfica de la cartas que se encuentran *)
(* en cada montón, al igual que le menu de opciones que se encontrará al final dela ejecución de dicho *)
(* Procedimiento. *)
VAR
I,J,K,L,M,N,NY,O,P,Q,R,m1,m2,m3,m4:Integer;
Cont,cont1,cont2,cont3,cont4,cont5,cont6,cont7,cont8,cont9:Integer;
BEGIN
Gotoxy(1,1);
Textcolor(Blue);
Writeln('Situacion',cuenta);
Writeln;
Textcolor(Red);
GotoXY(8,3); Write('Monton 1');
GotoXY(27,3); Write('Monton 2');
GotoXY(45,3); Write('Monton 3');
GotoXY(63,3); Write('Monton 4');
K:= 5;L:=5;M:= 5;N:= 5;
FOR Cont:=3 DOWNTO 1 DO
IF Mtrab[m1,Cont].Numero<>0
THEN BEGIN
Gotoxy(8,K);
Mtrabajo(m1,Cont,Mtrab);
K := K+1;
END;
FOR Cont:=3 DOWNTO 1 DO
IF Mtrab[m2,Cont].Numero<>0
THEN BEGIN
Gotoxy(27,L);
Mtrabajo(m2,Cont,Mtrab);
L := L+1;
END;
FOR Cont:=3 DOWNTO 1 DO
IF Mtrab[m3,Cont].Numero<>0
THEN BEGIN
Gotoxy(45,K);
Mtrabajo(m3,Cont,Mtrab);
M := M+1;
END;
FOR Cont:=3 DOWNTO 1 DO
IF Mtrab[m4,Cont].Numero<>0
THEN BEGIN
Gotoxy(63,N);
Mtrabajo(m4,Cont,Mtrab);
N := N+1;
END;
Textcolor(Yellow);
Gotoxy(8,9); Write('Oros');
Gotoxy(27,9); Write('Copas');
Gotoxy(45,9); Write('Espadas');
Gotoxy(63,9); Write('Bastos');
NY := 11;0:= 11;P:=11;Q:= 11;
FOR Cont:= 3 DOWNTO 1 DO
IF Mform[m1,Cont].Numero<>0
THEN BEGIN
Gotoxy(8,NY);
Mformacion(m1,Cont,Mform);
NY := NY+1;
END;
FOR Cont:= 3 DOWNTO 1 DO
IF Mform[m2,Cont].Numero<>0
THEN BEGIN
Gotoxy(27,O);
Mformacion(m2,Cont,Mform);
O := O+1;
END;
FOR Cont:= 3 DOWNTO 1 DO
IF Mform[m3,Cont].Numero<>0
THEN BEGIN
Gotoxy(45,P);
Mformacion(m3,Cont,Mform);
P := P+1;
END;
FOR Cont:= 3 DOWNTO 1 DO
IF Mform[m4,Cont].Numero<>0
THEN BEGIN
Gotoxy(63,Q);
Mformacion(m4,Cont,Mform);
Q := Q+1;
END;
Textcolor(Black);
Gotoxy(8,15); Writeln('Reserva');
R := 17;
FOR Cont:= 3 DOWNTO 1 DO
IF Mfreserva[Cont].Numero <> 0
THEN BEGIN
Gotoxy(8,R);
Write (Mfreserva[Cont].Numero);
CASE Mfreserva[Cont].Palo OF
Oros: Writeln('Oros');
Copas: Writeln('Copas');
Bastos:Writeln('Bastos');
Espadas:Writeln('Espadas');
END;
R:= R+1;
END;
END; (* Situacion *)
PROCEDURE Sacar_carta (VAR mb:T_Baraja; Var mr:T_Reserva)
(* Sacamos una carta de la baraja y la introducimos en el montón de *)
(* reserva, incrementando respectivamnete los contadores del montón de *)
(* baraja y reserva. *)
VAR
Cont:Integer;
BEGIN
mr[1].Numero := mb[1].Numero;
mr[1].Palo := mb[1].Palo;
Eliminar_baraja[mb];
IF mr[1].Numero <> 0
THEN BEGIN
FOR Cont := 1 TO 9 DO
mr[10].Numero := 0;
END
ELSE
Write('Ya no existen más cartas para sacar');
END;
PROCEDURE Reorganizar
VAR
monton,p_monton:Char;
BEGIN
Writeln('Pasar carta del montón 1,2,3,4,'O'ROS,'C'OPAS,'B'ASTOS,'E'SPADAS,'R'ESERVA:');
Read(monton);
Writeln('al montón '1','2','3','4','O'ROS,'C'OPAS,'B'ASTOS,'E'SPADAS,'R'ESERVA');
Read(p_monton);
END;
BEGIN (* SOLITARIO *)
Limpiar_pantalla;
Textbackground(White);
Terminar:=False;
Barajar(Baraja,MT);
sit:=1;
WHILE NOT Terminar DO
BEGIN
Limpiar_pantalla;
Situacion(MT,MF,MReserva,Baraja,sit);
Gotoxy(1,21);
Write(''S'acar carta,'R'eorganizar ó 'F'inalizar?'=;
Read(Opcion);
CASE Opcion OF
'S','s':Sacar_carta(Baraja,MReserva);
'R','r':Reorganizar;
'F','f':Terminar:=True;
END;
END;
END.
Valora esta pregunta


0