Pascal/Turbo Pascal - Ayuda problemas

 
Vista:

Ayuda problemas

Publicado por juan Cerdas (7 intervenciones) el 10/08/2005 11:33:40
Necesito ayuda para resolver un juego llamado "gato"
Debe mostrar un cuadro 3*3 en el cual puedan jugar 2 usuarios y deban escoger un simbolo el primero que logre llenar en linea continua 3 campos, ya sea horisontal, vertical o diagonal, gana el juego.

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

RE:Ayuda problemas

Publicado por micropais (209 intervenciones) el 11/08/2005 14:47:49
{ Micropais // 11-08-2005 //
juego del Gato cuadro de 3x3 ,

1 1 1
0 2 0
0 2 0

0 - representa casilla vacia
1 - ocupado por el jugador 1
2 - ocupado por el jugador 2

- gana el jugador que complete una fila o una columna
NOTA: faltan las dos unicas diagonales ; ¿ sabras implementarlas ?
}

uses crt;
const s:string[3]='ABC';
var matriz:array[0..2,0..2]of byte;
a,b:byte; { contadores para recorrer bucles }
h1,h2,h3:string; { valores horizontales }
v1,v2,v3:string; { valores verticales }
cj0,cj1,cj2:byte; { color para cada jugador }
tmp:string;

msg1,msg2:string; { mensajes de texto }
ganador:boolean; { cuando tengamos un ganador }
cnt:byte; { contador }
x:char; { almacena la coordenada columna }
xx:byte; { la columna como byte para la matriz}
y:byte; { almacena la coordenada fila }
jugador_actual:byte; { el turno del jugador actual }
{***************************************************************************}
procedure muestra_tablero;
begin
{ valores iniciales }
h1:='';h2:='';h3:='';
v1:='';v2:='';v3:='';

gotoxy(1,1);
textcolor(cj0);write('Û libre ');
textcolor(cj1);write('Û jugador 1 ');
textcolor(cj2);write('Û jugador 2 ');

gotoxy(1,3);textcolor(7);
writeln;
writeln(' 1 2 3');
for a:=0 to 2 do
begin
{ cargamos la lineas horizontales h1, h2 y h3 }
{ la primera fila horizontal sera cargada en H1 con valores de
cadena como '111' '222' '010' '121' etc, igual para las verticales }

str(matriz[0,a],tmp);{ pasamos el valor de la matriz a la variable TMP }
h1:=h1+tmp;
str(matriz[1,a],tmp);
h2:=h2+tmp;
str(matriz[2,a],tmp);
h3:=h3+tmp;
{ cargamos la lineas verticales v1 ,v2 y v3}

str(matriz[a,0],tmp);
v1:=v1+tmp;
str(matriz[a,1],tmp);
v2:=v2+tmp;
str(matriz[a,2],tmp);
v3:=v3+tmp;
textcolor(7);
write(s[a+1],' '); { dibujamos la letras verticales del grafico }
for b:=0 to 2 do
begin
{ seleccionamos el color del texto de cada jugador }
if (matriz[a,b]=0) then textcolor(cj0);
if (matriz[a,b]=1) then textcolor(cj1);
if (matriz[a,b]=2) then textcolor(cj2);
write('X ');
end;
writeln;
end;
textcolor(7);
{ comprobamos si hay ganador - si se ha completado la fila o la columna }
if ( (h1='111')or(h2='111')or(h3='111')) then
begin
write(msg1);
ganador:=true;
end;
if ( (h1='222')or(h2='222')or(h3='222')) then
begin
write(msg2);
ganador:=true;
end;
if ( (v1='111')or(v2='111')or(v3='111')) then
begin
write(msg1);
ganador:=true;
end;

if ( (v1='222')or(v2='222')or(v3='222')) then
begin
write(msg2);
ganador:=true;
end;


end;
{***************************************************************************}

begin
clrscr;
{ valores iniciales }
cj0:=7; { color para jugador 0 ninguno }
cj1:=3; { color para jugador 1 }
cj2:=4; { color para jugador 2 }
msg1:='Gana el jugador 1';
msg2:='Gana el jugador 2';
ganador:=false; { todavia no hay gandor del juego }

muestra_tablero;

cnt:=1; { valor inicial para jugador 1 }
repeat { repetimos hasta que haya un ganador }
cnt:=cnt+1;
jugador_actual:=(cnt mod 2)+1; { oscila entre 1 y 2 en cada vuelta }

gotoxy(1,9);
write('Pulsa Q para terminar ');
{ repetimos hata que obtengamos un digito bueno A,B,C ¢ Q }
repeat
gotoxy(1,10);
write('Mueve jugador ' ,jugador_actual,': Pulsa (A B C) +Enter ');
readln(X);gotoxy(1,10);delline;
x:=upcase(x); { conversion a mayusculas }
until (x in ( ['A','B','C','Q']) );

if(x='Q') then halt; { si es una Q salimos }
{ conversion de coordenadas a numerico para su uso en la matriz }
if(x='A') then XX:=0;
if(x='B') then XX:=1;
if(x='C') then XX:=2;
{ obtenemos la segunda coordenada de la matriz esta vez como numero }
{ repetimos hasta obtener un numero correcto }
repeat
gotoxy(1,10);
write('Mueve jugador ' ,jugador_actual,': Pulsa (1 2 3) +Enter ');
readln(Y);gotoxy(1,10);delline;
until (y in [1..3]);

y:=y-1; { la matriz cuenta desde cero }
{ solo podemos coger una posicion si no esta ocupada por otro jugador }
if (matriz[xx,y]=0) then
begin
matriz[xx,y]:=jugador_actual;
muestra_tablero;
end
else
begin
{ popsicion ocupada , como las coordenadas son incorrectas decrementamos
cnt para obtener el mismo turno de jugador }
gotoxy(1,14);
write('No puedes mover ahi');
cnt:=cnt-1;
sound(500);
delay(30000);
sound(200);
delay(30000);
nosound;
gotoxy(1,14);
write(' ');
end;

{ para comprobar el valor de las lineas horizontales y verticales
quitar el corchete que va delante del gotoxy siguiente }
{
gotoxy(1,17);
writeln('h1-',h1);
writeln('h2-',h2);
writeln('h3-',h3);
writeln;
writeln('v1-',v1);
writeln('v2-',v2);
writeln('v3-',v3);{}

until ganador;

writeln;
writeln('Se ha terminado el juego. Pulsa enter para salir');
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