Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {
- Escribir un programa que permita un juego de tatetí entre dos personas.
- Reglas:
- - Tablero 3x3
- - Se alternan dos jugadores y colocan símbolos O y X
- - Comienzan los X
- - Los símbolos pueden colocarse en cualquier parte del tablero
- siempre y cuando ese lugar no esté ocupado por un símbolo
- - Gana el primer jugador en obtener tres símbolos propios alineados
- (horizontal, vertical, diagonal)
- | |
- -+-+-
- | |
- -+-+-
- | |
- ' ': espacio vacío
- 'O': jugador 'O'
- 'X': jugador 'X'
- 'O': ganó O
- 'X': ganó X
- 'E': empate
- 'S': sigue
- }
- program tateti;
- type
- Tablero = array[1..3, 1..3] of Char;
- var
- g_tablero: Tablero;
- g_ganador, g_jugador: Char;
- procedure inicializar_tablero(var tablero: Tablero);
- var
- i, j: Byte; // i = filas, j = columnas
- begin
- for i := 1 to 3 do
- for j := 1 to 3 do
- tablero[i, j] := ' ';
- end;
- procedure mostrar_tablero(tablero: Tablero);
- var
- i, j: Byte; // i = filas, j = columnas
- begin
- for i := 1 to 3 do
- begin
- for j := 1 to 3 do
- begin
- write(tablero[i, j]);
- if j <> 3 then
- write('|');
- end;
- writeln();
- if i <> 3 then
- writeln('-+-+-');
- end;
- end;
- procedure turno(var tablero: Tablero; jugador: Char);
- var
- i, j: Byte;
- vacia: Boolean;
- begin
- writeln('Turno de jugador ', jugador, ':');
- write(' Fila: ');
- readln(i);
- write(' Columna: ');
- readln(j);
- // i > 0 y j > 0 i <= 3 y j <= 3
- // tablero[i, j] = ' '?
- vacia := (i > 0) and (j > 0) and (i <= 3) and (j <= 3) and (tablero[i, j] = ' ');
- while not vacia do
- begin
- writeln('Posición incorrecta');
- writeln('Turno de jugador ', jugador, ':');
- write(' Fila: ');
- readln(i);
- write(' Columna: ');
- readln(j);
- vacia := (i > 0) and (j > 0) and (i <= 3) and (j <= 3) and (tablero[i, j] = ' ');
- end;
- g_tablero[i, j] := jugador;
- end;
- procedure turno_aleatorio(var tablero: Tablero; jugador: Char);
- var
- i, j: Byte;
- vacia: Boolean;
- begin
- i := Random(3) + 1;
- j := Random(3) + 1;
- vacia := tablero[i, j] = ' ';
- while not vacia do
- begin
- i := Random(3) + 1;
- j := Random(3) + 1;
- vacia := tablero[i, j] = ' ';
- end;
- g_tablero[i, j] := jugador;
- end;
- function victoria(tablero: Tablero; jugador: Char): Boolean;
- begin
- victoria := (tablero[1, 1] = jugador) and (tablero[1, 2] = jugador) and (tablero[1, 3] = jugador) or
- (tablero[2, 1] = jugador) and (tablero[2, 2] = jugador) and (tablero[2, 3] = jugador) or
- (tablero[3, 1] = jugador) and (tablero[3, 2] = jugador) and (tablero[3, 3] = jugador) or
- (tablero[1, 1] = jugador) and (tablero[2, 1] = jugador) and (tablero[3, 1] = jugador) or
- (tablero[1, 2] = jugador) and (tablero[2, 2] = jugador) and (tablero[3, 2] = jugador) or
- (tablero[1, 3] = jugador) and (tablero[2, 3] = jugador) and (tablero[3, 3] = jugador) or
- (tablero[1, 1] = jugador) and (tablero[2, 2] = jugador) and (tablero[3, 3] = jugador) or
- (tablero[1, 3] = jugador) and (tablero[2, 2] = jugador) and (tablero[3, 1] = jugador);
- end;
- function tablero_lleno(tablero: Tablero): Boolean;
- var
- i, j: Byte;
- begin
- i := 1;
- j := 1;
- while (i <= 3) and (tablero[i, j] <> ' ') do
- begin
- j := j + 1;
- if j > 3 then
- begin
- i := i + 1;
- j := 1;
- end;
- end;
- tablero_lleno := i = 4;
- end;
- function verificar_ganador(tablero: Tablero): Char;
- var
- ganador: Char;
- begin
- if victoria(tablero, 'O') then
- ganador := 'O'
- else if victoria(tablero, 'X') then
- ganador := 'X'
- else
- begin
- if tablero_lleno(tablero) then
- ganador := 'E'
- else
- ganador := 'S';
- end;
- verificar_ganador := ganador;
- end;
- begin
- randomize();
- inicializar_tablero(g_tablero);
- g_ganador := 'S';
- g_jugador := 'X';
- while g_ganador = 'S' do
- begin
- if g_jugador = 'X' then
- turno(g_tablero, g_jugador)
- else
- turno_aleatorio(g_tablero, g_jugador);
- mostrar_tablero(g_tablero);
- if g_jugador = 'X' then
- g_jugador := 'O'
- else
- g_jugador := 'X';
- g_ganador := verificar_ganador(g_tablero);
- end;
- if g_ganador = 'O' then
- writeln('Ganó O')
- else if g_ganador = 'X' then
- writeln('Ganó X')
- else
- writeln('Hubo empate');
- end.
Advertisement
Add Comment
Please, Sign In to add comment