r_russo

Tateti

Jun 7th, 2022
1,865
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 4.89 KB | None | 0 0
  1. {
  2.     Escribir un programa que permita un juego de tatetí entre dos personas.
  3.    
  4.     Reglas:
  5.         - Tablero 3x3
  6.         - Se alternan dos jugadores y colocan símbolos O y X
  7.         - Comienzan los X
  8.         - Los símbolos pueden colocarse en cualquier parte del tablero
  9.         siempre y cuando ese lugar no esté ocupado por un símbolo
  10.         - Gana el primer jugador en obtener tres símbolos propios alineados
  11.         (horizontal, vertical, diagonal)
  12.    
  13.      | |
  14.     -+-+-
  15.      | |
  16.     -+-+-
  17.      | |
  18.    
  19.     ' ': espacio vacío
  20.     'O': jugador 'O'
  21.     'X': jugador 'X'
  22.    
  23.     'O': ganó O
  24.     'X': ganó X
  25.     'E': empate
  26.     'S': sigue
  27. }
  28.  
  29. program tateti;
  30.  
  31. type
  32.     Tablero = array[1..3, 1..3] of Char;
  33.    
  34. var
  35.     g_tablero: Tablero;
  36.     g_ganador, g_jugador: Char;
  37.    
  38. procedure inicializar_tablero(var tablero: Tablero);
  39. var
  40.     i, j: Byte;   // i = filas, j = columnas
  41. begin
  42.     for i := 1 to 3 do
  43.         for j := 1 to 3 do
  44.             tablero[i, j] := ' ';
  45. end;
  46.  
  47. procedure mostrar_tablero(tablero: Tablero);
  48. var
  49.     i, j: Byte;   // i = filas, j = columnas
  50. begin
  51.     for i := 1 to 3 do
  52.     begin
  53.         for j := 1 to 3 do
  54.         begin
  55.             write(tablero[i, j]);
  56.             if j <> 3 then
  57.                 write('|');
  58.         end;
  59.         writeln();
  60.         if i <> 3 then
  61.             writeln('-+-+-');
  62.     end;
  63. end;
  64.  
  65. procedure turno(var tablero: Tablero; jugador: Char);
  66. var
  67.     i, j: Byte;
  68.     vacia: Boolean;
  69. begin
  70.     writeln('Turno de jugador ', jugador, ':');
  71.     write('  Fila: ');
  72.     readln(i);
  73.     write('  Columna: ');
  74.     readln(j);
  75.    
  76.     // i > 0 y j > 0 i <= 3 y j <= 3
  77.     // tablero[i, j] = ' '?
  78.     vacia := (i > 0) and (j > 0) and (i <= 3) and (j <= 3) and (tablero[i, j] = ' ');
  79.     while not vacia do
  80.     begin
  81.         writeln('Posición incorrecta');
  82.        
  83.         writeln('Turno de jugador ', jugador, ':');
  84.         write('  Fila: ');
  85.         readln(i);
  86.         write('  Columna: ');
  87.         readln(j);
  88.        
  89.         vacia := (i > 0) and (j > 0) and (i <= 3) and (j <= 3) and (tablero[i, j] = ' ');
  90.     end;
  91.    
  92.     g_tablero[i, j] := jugador;
  93. end;
  94.  
  95. procedure turno_aleatorio(var tablero: Tablero; jugador: Char);
  96. var
  97.     i, j: Byte;
  98.     vacia: Boolean;
  99. begin  
  100.     i := Random(3) + 1;
  101.     j := Random(3) + 1;
  102.     vacia := tablero[i, j] = ' ';
  103.     while not vacia do
  104.     begin
  105.         i := Random(3) + 1;
  106.         j := Random(3) + 1;
  107.         vacia := tablero[i, j] = ' ';
  108.     end;
  109.    
  110.     g_tablero[i, j] := jugador;
  111. end;
  112.  
  113. function victoria(tablero: Tablero; jugador: Char): Boolean;
  114. begin
  115.     victoria := (tablero[1, 1] = jugador) and (tablero[1, 2] = jugador) and (tablero[1, 3] = jugador) or
  116.                 (tablero[2, 1] = jugador) and (tablero[2, 2] = jugador) and (tablero[2, 3] = jugador) or
  117.                 (tablero[3, 1] = jugador) and (tablero[3, 2] = jugador) and (tablero[3, 3] = jugador) or
  118.                
  119.                 (tablero[1, 1] = jugador) and (tablero[2, 1] = jugador) and (tablero[3, 1] = jugador) or
  120.                 (tablero[1, 2] = jugador) and (tablero[2, 2] = jugador) and (tablero[3, 2] = jugador) or
  121.                 (tablero[1, 3] = jugador) and (tablero[2, 3] = jugador) and (tablero[3, 3] = jugador) or
  122.                
  123.                 (tablero[1, 1] = jugador) and (tablero[2, 2] = jugador) and (tablero[3, 3] = jugador) or
  124.                 (tablero[1, 3] = jugador) and (tablero[2, 2] = jugador) and (tablero[3, 1] = jugador);
  125. end;
  126.  
  127. function tablero_lleno(tablero: Tablero): Boolean;
  128. var
  129.     i, j: Byte;
  130. begin
  131.     i := 1;
  132.     j := 1;
  133.    
  134.     while (i <= 3) and (tablero[i, j] <> ' ') do
  135.     begin
  136.         j := j + 1;
  137.         if j > 3 then
  138.         begin
  139.             i := i + 1;
  140.             j := 1;
  141.         end;
  142.     end;
  143.    
  144.     tablero_lleno := i = 4;
  145. end;
  146.  
  147. function verificar_ganador(tablero: Tablero): Char;
  148. var
  149.     ganador: Char;
  150. begin
  151.     if victoria(tablero, 'O') then
  152.         ganador := 'O'
  153.     else if victoria(tablero, 'X') then
  154.         ganador := 'X'
  155.     else
  156.     begin  
  157.         if tablero_lleno(tablero) then
  158.             ganador := 'E'
  159.         else
  160.             ganador := 'S';
  161.     end;
  162.        
  163.     verificar_ganador := ganador;
  164. end;
  165.  
  166. begin
  167.     randomize();
  168.     inicializar_tablero(g_tablero);
  169.    
  170.     g_ganador := 'S';
  171.     g_jugador := 'X';
  172.     while g_ganador = 'S' do
  173.     begin
  174.         if g_jugador = 'X' then
  175.             turno(g_tablero, g_jugador)
  176.         else
  177.             turno_aleatorio(g_tablero, g_jugador);
  178.         mostrar_tablero(g_tablero);
  179.        
  180.         if g_jugador = 'X' then
  181.             g_jugador := 'O'
  182.         else
  183.             g_jugador := 'X';
  184.         g_ganador := verificar_ganador(g_tablero);
  185.     end;
  186.    
  187.     if g_ganador = 'O' then
  188.         writeln('Ganó O')
  189.     else if g_ganador = 'X' then
  190.         writeln('Ganó X')
  191.     else
  192.         writeln('Hubo empate');
  193. end.
  194.  
Advertisement
Add Comment
Please, Sign In to add comment