Autor Tema: Código juego de LA VIEJA o del TRES EN RAYA (tic tac toe) en Pascal  (Leído 7045 veces)

oeneika

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
Buenas ¿como están? estoy haciendo el juego de ''La vieja'' como hago algo personal simplemente para aprender un poco mas de Pascal.. Y quería saber porque al llamar a la función Ganador en PLAY no me imprime el mensaje, se supone que si encuentra XXX debería decir ''Ganaron las X'' y si encuentra OOO deberia decir ''Ganaron las O'' pero el programa nunca lo dice, podrían ayudarme?

Yo coloque esto:
If (Ganador(M))then
Writeln('El ganador es la',S);


El código es el siguiente:


Código: [Seleccionar]
Program LaVieja;
Uses crt;
Const
Fila=3; Equis='X';
Columna=3; Cero='O';
Vacio='_';
Type
Matriz= Array[1..fila,1..columna] of Char;
Var
M: Matriz; S,Nombre: String; F:Text; Cedula:Integer;

Procedure llenarmatriz (Var M: Matriz);
Var I,J: Integer;

Begin
For I:= 1 to fila do
Begin
For J:= 1 to columna do
Begin
M[I,J]:=vacio;
end;
Writeln;
End;
End;

Procedure mostrarmatriz (Var M: Matriz);
Var I,J: Integer;

Begin
For I:= 1 to fila do
Begin
For J:= 1 to columna do
Begin
Write(M[I,J],' ');
end;
Writeln;
End;
End;

Function Ganador (Var M:Matriz):Boolean;
Var S:String; I,J:Integer; Ganar:Boolean;

Begin
Ganar:=False;
For I:= 1 to fila do
Begin
For J:= 1 to columna do
Begin
{Horizontal}
If ((M[I,J]='X') and (M[I,J+1]='X') and (M[I,J+2]='X')) then
Begin
Ganar:=True;
S:='X';
Break;
End
else
If ((M[I,J]='O') and (M[I,J+1]='O') and (M[I,J+2]='O')) then
Begin
Ganar:=True;
S:='O';
Break;
End
else
{Vertical}
If ((M[I,J]='X') and (M[I+1,J]='X') and (M[I+2,J]='X')) then
Begin
Ganar:=True;
S:='X';
Break;
End
else
If ((M[I,J]='O') and (M[I+1,J]='O') and (M[I+2,J]='O')) then
Begin
Ganar:=True;
S:='O';
Break;
End
else
{Diagonal}
If ((M[I,J]='X') and (M[I+1,J+2]='X') and (M[I+3,J+3]='X')) then
Begin
Ganar:=True;
S:='X';
Break;
End
else
If ((M[I,J]='O') and (M[I+1,J+2]='O') and (M[I+3,J+3]='O')) then
Begin
Ganar:=True;
S:='O';
Break;
End;
End;

End;
Ganador:=Ganar;
End;

Procedure Play (Var M: Matriz);
Var F,C,K:Integer; Turno: Boolean; S:String;

Begin
Turno:=True; K:=0;

While (K<9) do
Begin
If (Turno) then
Begin
Writeln('Jugador 1');
readln(F,C);
M[F,C]:=Equis;
end
else
Begin
Writeln('Jugador 2');
readln (F,C);
M[F,C]:=Cero;
End;
K:=K+1;
mostrarmatriz(M);
Turno:= Not(Turno);
end;
If (Ganador(M))then
Writeln('El ganador es la',S);
End;

Begin
Clrscr;
Writeln ('Bienvenido al juego de la vieja');
{Write ('Nombre del jugador 1: '); Readln(Nombre);
Write ('Cedula del jugador 1: '); Readln(Cedula);
Assign(F,'C:\Users\Usuario\Desktop\Lavieja.txt');
Rewrite(F);
Write('Nombre 1: ',Nombre,' Cedula 1: ',Cedula);
Close(F);}
LlenarMatriz(M);
MostrarMatriz (M);
Play (M);
readln;
End.
« Última modificación: 26 de Agosto 2015, 10:14 por César Krall »

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 393
    • Ver Perfil
Re:Juego de LA VIEJA en Pascal
« Respuesta #1 en: 25 de Agosto 2015, 09:42 »
Hola en esta dirección se explica cómo pegar código en los foros https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0

Este código es una implementación basada en partir de que se trata de un tablero con 3x3 = 9 posiciones. Suponer que a cada celda elegida por un jugador se le asigna una puntuación de 15. Al comprobar la suma de las horizontales, verticales o diagonales elegidas por un jugador, si la suma da 15, ese jugador ha ganado.

Código: [Seleccionar]

program tresEnRaya_laVieja_full;
uses crt;
 
var
M:array[1..9] of byte = (8,1,6,3,5,7,4,9,2);
elegidas:array[1..9] of byte;
jugador,count,i,celda,res1,res2:byte;
contin:char;
 
function comprobar(jugador:byte):byte;
var inicial,elements:byte;
begin
  if jugador=1 then begin
    inicial:=1;elements:=count div 2 + 1;end
    else begin inicial:=2;elements:=count div 2;end;
  if elements>=3 then
  comprobar:=elegidas[inicial]+elegidas[inicial+2]+elegidas[inicial+4];
  if (elements>3)and(comprobar<>15)  then
  comprobar:=elegidas[inicial]+elegidas[inicial+2]+elegidas[inicial+6];
  if (elements>3)and(comprobar<>15)  then
  comprobar:=elegidas[inicial]+elegidas[inicial+4]+elegidas[inicial+6];
  if (elements>3)and(comprobar<>15)  then
  comprobar:=elegidas[inicial+2]+elegidas[inicial+4]+elegidas[inicial+6];
end;
 
 procedure rellenar();
 begin
  writeln('Tres en raya o La Vieja !!');
  writeln;
  writeln('---|---|---');
  writeln(' 1 | 2 | 3 ');
  writeln('---|---|---');
  writeln(' 4 | 5 | 6 ');
  writeln('---|---|---');
  writeln(' 7 | 8 | 9 ');
  writeln();
  writeln('Elige cualquier número entre 1..9');
  writeln();
 end;
 
procedure insertar(letter:char);
var x,y:byte;
 begin
  case celda of
  1..3: gotoxy(2+(celda-1)*4,4);
  4..6: gotoxy(2+(celda-4)*4,6);
  7..9: gotoxy(2+(celda-7)*4,8);
  end;
  writeln(letter); gotoxy(1,12);
 
 end;
 
begin
  repeat
  clrscr;
  res1:=0;res2:=0;i:=1;
  rellenar;
  repeat
    jugador:=count mod 2;
    if jugador=0 then write('jugador X : ') else write('jugador O : ');
    readln(celda);
    if jugador=0 then insertar('X') else insertar('O');
    elegidas[i]:=M[celda];
    count := count + 1;
    if (count>4) and (count<9) and (jugador =0) then res1:=comprobar(1);
    if (count>4) and (count<9) and (jugador =1) then res2:=comprobar(2);
    i:=i+1;
  until (res1=15)or(res2=15)or(i>9);
 
   if res1=15 then writeln('jugador X GANA !!')
   else if res2=15 then writeln('jugador O GANA !!')
   else writeln('El juego ha terminado en EMPATE');
   write('Continuar ?? Pulsar ''n'' para parar : ');
   readln(contin);
   until(contin<>'s');
   readln;
end.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".