Pascal/Turbo Pascal - Girar aleatoriamente posiciones de una matriz

   
Vista:

Girar aleatoriamente posiciones de una matriz

Publicado por Danilovic (2 intervenciones) el 04/01/2013 16:53:07
Buenas

Estoy haciendo una simulacion del juego de cartas "Burro" y cuando tengo las cartas con las que se va a jugar, tengo que barajarlas. No sé muy bien como hacer para desordenar esa matriz aleatoriamente...

Si fuese unidimensional (array) sé que es algo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure MezclarBaraja(var B: TBaraja);
var
  I, J: Integer;
  Aux: TNaipe;
begin
  Randomize;
  For I:=1 to 40 do
    Begin
        J:=Random(40)+1;
        Aux:=B[I];
        B[I]:=B[J];
        B[J]:=Aux;
    end;
end;


Pero no me sale como sería para una matriz.... Alguien me puede echar una mano??

Gracias y saludos
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

Girar aleatoriamente posiciones de una matriz

Publicado por ramon (2072 intervenciones) el 04/01/2013 23:51:50
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
{Espero esto te sirva de ayuda sino coméntame mas a ver que podemos hacer}
 
 program varajar;
  uses
    crt;
  type
    matriz = array[1..40] of integer;
  var
    matri : matriz;
    cartas : array[1..4,1..10] of integer;
    n, y, t : integer;
 
 
 
    procedure generador;
    var
      t, o, p, i : integer;
      tom : real;
     begin
       for i := 1 to 40 do
       matri[i] := i;
       randomize;
       for t := 40 downto 1 do
       begin
          tom := random;
          p := trunc(tom * t) + 1;
          o := matri[p];
          matri[p] := matri[t];
          matri[t] := o;
       end;
   end;
 
    procedure muevecartas;
    var
       pp : integer;
    begin
        pp := 1;
        for n := 1 to 4 do
          for t := 1 to 10 do
          begin
             cartas[n,t] := matri[pp];
             pp := pp + 1;
          end;
    end;
 
    begin
        generador;
        muevecartas;
        clrscr;
        for n := 1 to 4 do
        begin
          for t := 1 to 10 do
          begin
             write('  ',cartas[n,t]);
          end;
           writeln;
           writeln;
        end;
        readln;
    end.
 
{Cuatro jugadores a diez cartas cada uno es eso}
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

Girar aleatoriamente posiciones de una matriz

Publicado por Danilovic (2 intervenciones) el 05/01/2013 20:42:15
No consigo hacerlo funcionar para strings:

type
tfiguras=array[1..10] of string;
tpalos=array[1..4] of string;
tcartas=array[1..40] of string;
tbaraja=array[1..10,1..4] of string;


var
figuras:tfiguras;
palos:tpalos;
cartas:tcartas;
baraja,ManoJugadores,juego:tbaraja;
jugadores:integer;

procedure RepartirCartas(baraja:tbaraja; var ManoJugadores:tbaraja);
var {Se crea una matriz que simulará la mano de los jugadores.Se reparten las Nx4 primeras cartas de la baraja, donde N es el número de jugadores introducido por el usuario}
i,j:integer;
begin
randomize;
for i:=1 to jugadores do
for j:=1 to 4 do
ManoJugadores[i,j]:=baraja[i,j]
end;


procedure BarajarMano (var juego:tbaraja; ManoJugadores:tbaraja);
var
i,j,aux:integer;

begin
aux:=1;
for i:=1 to 4 do
for j:=1 to 10 do
begin
randomize;
juego[i,j]:=ManoJugadores[aux];
aux:=aux+1
end;
end;

Mi idea es pasar esa matriz "ManoJugadores" a la matriz "juego" con las cartas ya desordenadas. Es eso posible o necesito hacer un procedimiento intermedio?

Gracias por la ayuda
Ahora mismo mostraría las cartas ordenadas
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

Girar aleatoriamente posiciones de una matriz

Publicado por ramon (2072 intervenciones) el 06/01/2013 19:32:25
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
{Mira a ver si esto te ayuda}
 
 program juegocartas;
 uses
   crt;
 const
    cartas : array[1..40] of string[15] = (
 ('1 = Oros'),('2 = Oros'),('3 = Oros'),('4 = Oros'),('5 = Oros'),('6 = Oros'),
 ('7 = Oros'),('10 = Oros'),('11 = Oros'),('12 = Oros'),
 ('1 = Bastos'),('2 = Bastos'),('3 = Bastos'),('4 = Bastos'),('5 = Bastos'),
 ('6 = Bastos'),('7 = Bastos'),('10 = Bastos'),('11 = Bastos'),('12 = Bastos'),
 ('1 = Espadas'),('2 = Espadas'),('3 = Espadas'),('4 = Espadas'),('5 = Espadas'),
 ('6 = Espadas'),('7 = Espadas'),('10 = Espadas'),('11 = Espadas'),
 ('12 = Espadas'),('1 = Copas'),('2 = Copas'),('3 = Copas'),('4 = Copas'),
 ('5 = Copas'),('6 = Copas'),('7 = Copas'),('10 = Copas'),('11 = Copas'),
 ('12 = Copas'));
 
 
  var
    jugadores : array[1..4,1..10] of string[15];
    numecartas : array[1..40] of word;
    jug, car : integer;
 
 
  procedure barajarcartas;
  var
   t, r, aux, toma, temp, i : word;
   sal : boolean;
  begin
      clrscr;
      sal := false;
      temp := 1;
      i := 1;
      randomize;
      writeln;
    repeat
      toma := random(40) + 1;
      for i := 1 to 40 do
      begin
      if toma = numecartas[i] then
      sal := true;
      end;
      if sal = false then
      begin
         numecartas[temp] := toma;
         temp := temp + 1;
      end;
      sal := false;
    until (temp > 40) or (keypressed);
   end;
 
   procedure repartecartas;
   var
      i : integer;
   begin
       car := 1;
       jug := 1;
       i := 1;
    repeat
        jugadores[jug,car] := cartas[numecartas[i]];
        jug := jug + 1;
        jugadores[jug,car] := cartas[numecartas[i + 1]];
        jug := jug + 1;
        jugadores[jug,car] := cartas[numecartas[i + 2]];
        jug := jug + 1;
        jugadores[jug,car] := cartas[numecartas[i + 3]];
        jug := 1;
        car := car + 1;
        i := i + 4;
    until i > 40;
   end;
 
   procedure presentacartas;
   var
      i : integer;
   begin
    i := 1;
    gotoxy(17,2);write('***** Partida De Cartas *****');
    textcolor(11);
    gotoxy(2,18);write('Jugador N§ 1');
    gotoxy(30,4);write('Jugador N§ 2');
    gotoxy(59,18);write('Jugador N§ 3');
    gotoxy(31,35);write('Jugador N§ 4');
    textcolor(15);
    repeat
      gotoxy(15,13 + i);write(jugadores[1,i]);
      gotoxy(31,5 + i);write(jugadores[2,i]);
      gotoxy(47,13 + i);write(jugadores[3,i]);
      gotoxy(31,23 + i);write(jugadores[4,i]);
      i := i + 1;
    until i > 10;
   end;
 
   procedure limpiaregistros;
   var
      i : integer;
   begin
      fillchar(numecartas,sizeof(numecartas),0);
      for i := 1 to 10 do
      begin
         jugadores[1,i] := '';
         jugadores[2,i] := '';
         jugadores[3,i] := '';
         jugadores[4,i] := '';
      end;
   end;
 
  begin
     clrscr;
     limpiaregistros;
     barajarcartas;
     repartecartas;
     presentacartas;
     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