Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: oeneika en 24 de Agosto 2015, 19:21
-
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:
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.
-
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.
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.