[ Foro de Pascal ]
como puedo hacer el gato con arreglo no usando for solo el while?
¿Qué es "el gato"? En cualquier caso, contar con un "while" en vez de un "for" es fácil:
i := 1;
while i <= 10 do
begin
(* Hacer los pasos que haya que repetir *)
i := i+1;
end;
el juego el gato el de las X o O
Yo no conozco ese juego, puedes dar más detalles si quieres más ayuda. Pero la forma de usar un "while" para esquivar un "for" la tienes más arriba.
el juego se trata asi
__X___|_______|____O__
| X |
_____|_______|______
O| | X
gano X porque formo la linea yo lo tengo hecho pero sin arreglo!
program juego_gato;
uses crt;
Procedure pantalla_inicio;
begin
writeln('Bienvenidos al mejor juego del mundo.');
writeln('');
writeln('');
writeln('objetivo del juego: GANAR.');
writeln('');
writeln('');
writeln('');
writeln('');
writeln('todos los derechos reservado a su propietaria ........');
writeln('');
writeln('Si esta listo para comenzar presione ENTER.');
readln;
end;
{ procedure pantalla de inicio: DA a conocer datos que sirven para poder utilizar el programa}
Procedure pantalla_salida;
begin
writeln('¡gracias por jugar!');
writeln('');
writeln('');
writeln('RECUERDA: NO ACEPTES LA PIRATERIA.');
writeln('');
writeln('');
writeln('Si deceas SALIR presiona ENTER.');
end;
{ * procedure pantalla salida: al terminar
queremos dar a conocer datos entonce utilizamos el writeln y este logra mostrar los datos en la pantalla}
Procedure inicializar_variables(var A,B,C,D,E,F,G,H,I : char);
begin
A:= ' '; B:= ' '; C:= ' '; D:= ' '; E:= ' ';F:= ' ';G:= ' ';H:= ' ';I:= ' ';
end;
{ * procedure inicializar variables: para lograr hacer un gato necesitamos variables y si vemos un gato sabemos que
tiene 9 casillas las cuales las denominamos con letras }
procedure Dibujar_tablero ( A, B, C, D, E, F, G, H, I :char);
begin
clrscr;
writeln;
writeln;
writeln('A|B|C ',A,'|',B,'|',C,' ');
writeln('----- -+-+-');
writeln('D|E|F ',D,'|',E,'|',F,' ');
writeln('----- -+-+-');
writeln('G|H|I ',G,'|',H,'|',I,' ');
writeln;
writeln;
end;
{* procedure dibujar tablero: para jugar al gato necesitamosun tablero y junto a las variables
las dejamos como espacios libres,para que el jugador y la maquina se guien que solo hay iran las ficha}
procedure elegir_turno (var turno: integer);
var
valida: boolean;
begin
valida:= false;
while (not valida) do
begin
writeln('Quien comienza:');
writeln('presione 1 si desea comenzar usted');
writeln('presione 2 si desea que comienze la maquina');
readln(turno);
if(turno=1) or (turno=2)then
begin
valida:=true;
end
else
begin
writeln('porfavor ingrese opción valida 1 o 2');
readln;
end;
end;
end;
{Procedure elegir turno: le preguntamos al jugador que turno quiere el 1° o el 2° entonce el programa lee
la respuesta, aceptando solo estas opciones marcando como error los otros numeros}
procedure elegir_ficha (var ficha_jug,ficha_maq:char);
var
valida:boolean;
begin
valida:=false;
writeln('porfavor elegir ficha');
writeln('Para poder jugar solo utiliza MAYUSCULAS');
writeln('ingrese una X o O');
readln(ficha_jug);
while (not valida)do
begin
if(ficha_jug='X') then
begin
ficha_maq:='O';
valida:=true;
end
else
begin
if(ficha_jug='O') then
begin
ficha_maq:='X';
valida:=true;
end
else
begin
writeln('porfavor ingrese solo una opcion valida x o O');
readln(ficha_jug);
end;
end;
end;
end;
{Procedure elegir ficha: le preguntamos al jugador que ficha quiere si X o O entonce el programa lee
la respuesta, aceptando solo estas opciones marcando como error los otras letras}
procedure juega_jugador( var ficha_jug, A,B,C,D,E,F,G,H,I:char);
var jugada_valida,valida:boolean;
var eleccion:char;
begin
jugada_valida:=false;
while(not jugada_valida)do
begin
valida:=false;
writeln('porfavor elegir una casilla: A,B,C,D,E,F,G,H,I');
readln(eleccion);
while (not valida)do
begin
if (eleccion= 'A') or (eleccion= 'B') or (eleccion='C') or (eleccion= 'D') or (eleccion= 'E') or (eleccion='F') or (eleccion= 'G') or (eleccion= 'H') or (eleccion='I')then
valida:=true
else
begin
writeln('porfavor ingrese opcion valida A,B,C,D,F,G,H,I');
readln(eleccion);
end;
end;
if(eleccion='A')then
begin
if(A=' ')then
begin
A:= ficha_jug;
jugada_valida:=true;
Dibujar_tablero ( A, B, C, D, E, F, G, H, I);
clrscr;
end
else
begin
writeln(' error, casilla ocupada');
writeln('intente otra vez');
end;
end;
if(eleccion='B')then
begin
if(B=' ')then
begin
B:= ficha_jug;
jugada_valida:=true;
Dibujar_tablero ( A, B, C, D, E, F, G, H, I);
clrscr;
end
else
begin
writeln(' error, casilla ocupada');
writeln('intente otra vez');
end;
end;
if(eleccion='C')then
begin
if(C=' ')then
begin
C:= ficha_jug;
jugada_valida:=true;
Dibujar_tablero ( A, B, C, D, E, F, G, H, I);
clrscr;
end
else
begin
writeln(' error, casilla ocupada');
writeln('intente otra vez');
end;
end;
if(eleccion='D')then
begin
if(D=' ')then
begin
D:= ficha_jug;
jugada_valida:=true;
Dibujar_tablero ( A, B, C, D, E, F, G, H, I);
clrscr;
end
else
begin
writeln(' error, casilla ocupada');
writeln('intente otra vez');
end;
end;
if(eleccion='E')then
begin
if(E=' ')then
begin
E:= ficha_jug;
jugada_valida:=true;
Dibujar_tablero ( A, B, C, D, E, F, G, H, I);
clrscr;
end
else
begin
writeln(' error, casilla ocupada');
writeln('intente otra vez');
end;
end;
if(eleccion='F')then
begin
if(F=' ')then
begin
F:= ficha_jug;
jugada_valida:=true;
Dibujar_tablero ( A, B, C, D, E, F, G, H, I);
clrscr;
end
else
begin
writeln(' error, casilla ocupada');
writeln('intente otra vez');
end;
end;
if(eleccion='G')then
begin
if(G=' ')then
begin
G:= ficha_jug;
jugada_valida:=true;
Dibujar_tablero ( A, B, C, D, E, F, G, H, I);
clrscr;
end
else
begin
writeln(' error, casilla ocupada');
writeln('intente otra vez');
end;
end;
if(eleccion='H')then
begin
if(H=' ')then
begin
H:= ficha_jug;
jugada_valida:=true;
Dibujar_tablero ( A, B, C, D, E, F, G, H, I);
clrscr;
end
else
begin
writeln(' error, casilla ocupada');
writeln('intente otra vez');
end;
end;
if(eleccion='I')then
begin
if(I=' ')then
begin
I:= ficha_jug;
jugada_valida:=true;
Dibujar_tablero ( A, B, C, D, E, F, G, H, I);
clrscr;
end
else
begin
writeln(' error, casilla ocupada');
writeln('intente otra vez');
end;
end;
end;
end;
{Procedure juega jugador: el jugador elige una casilla para poner X o O segun alla elegido, siendo que si la que elige esta ocupada
le marcara como error}
procedure juego_maquina (var ficha_maq,A,B,C,D,E,F,G,H,I:char);
var
valida:boolean;
begin
valida:=false;
while(not valida)do
begin
if(A= ' ')then
begin
A:=ficha_maq;
valida:=true;
Dibujar_tablero ( A, B, C, D, E, F, G, H, I);
clrscr;
end
else
begin
if(B= ' ')then
begin
B:=ficha_maq;
valida:=true;
Dibujar_tablero ( A, B, C, D, E, F, G, H, I);
clrscr;
end
else
begin
if(C= ' ')then
begin
C:=ficha_maq;
valida:=true;
Dibujar_tablero ( A, B, C, D, E, F, G, H, I);
clrscr;
end
else
begin
if(D= ' ')then
begin
D:=ficha_maq;
valida:=true;
Dibujar_tablero ( A, B, C, D, E, F, G, H, I);
clrscr;
end
else
begin
if(E= ' ')then
begin
E:=ficha_maq;
valida:=true;
Dibujar_tablero ( A, B, C, D, E, F, G, H, I);
clrscr;
end
else
begin
if(F= ' ')then
begin
F:=ficha_maq;
valida:=true;
Dibujar_tablero ( A, B, C, D, E, F, G, H, I);
clrscr;
end
else
begin
if(G= ' ')then
begin
G:=ficha_maq;
valida:=true;
Dibujar_tablero ( A, B, C, D, E, F, G, H, I);
clrscr;
end
else
begin
if(H= ' ')then
begin
H:=ficha_maq;
valida:=true;
Dibujar_tablero ( A, B, C, D, E, F, G, H, I);
clrscr;
end
else
begin
if(I= ' ')then
begin
I:=ficha_maq;
valida:=true;
Dibujar_tablero ( A, B, C, D, E, F, G, H, I);
clrscr;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
{Procedure juega maquina: la maquina posiciona su ficha en cualquier lugar que este vacido, si hace una jugada erronea pide
repetir jugada por declararla invalida}
Procedure evaluar(A,B,C,D,E,F,G,H,I:CHAR; var ganador:boolean);
begin
if(A=B) and (B=C) and (A <> ' ' )then
begin
ganador:=true;
end;
if(D=E) and (E=F) and (D <> ' ' )then
begin
ganador:=true;
end;
if(G=H) and (H=I) and (G <> ' ' )then
begin
ganador:=true;
end;
if(A=D) and (D=G) and (A <> ' ' )then
begin
ganador:=true;
end;
if(B=E) and (E=H) and (B <> ' ' )then
begin
ganador:=true;
end;
if(C=F) and (F=I) and (C <> ' ' )then
begin
ganador:=true;
end;
if(A=E) and (E=I) and (A <> ' ' )then
begin
ganador:=true;
end;
if(C=E) and (E=G) and (C <> ' ' )then
begin
ganador:=true;
end;
end;
{Procedure evaluar: el programa evalua si hay un posible ganador o la posibilidad de un empate dentro del juego
si es asi el programa escribe al ganador}
procedure continuar_juego ( var seguir:boolean);
var
valida:boolean;
respuesta:char;
Begin
valida:=false;
seguir:=false;
while (not valida)do
begin
writeln( 'quieres seguir jugando S/N');
read(respuesta);
if(respuesta='S') or (respuesta='N')then
begin
valida:=true;
end
else
begin
writeln('porfavor ingrese S/N');
readln;
end;
end;
if (respuesta='N') then
begin
seguir:=true;
end;
end;
{Procedure continuar: le preguntamos al jugador si decea seguir jugando si es asi el programa comienza denuevo y sino el programa termina}
var
A,B,C,D,E,F,G,H,I, ficha_jug, ficha_maq:char;
contador,turno:integer;
ganador,seguir:boolean;
begin
seguir:=false;
while (not seguir) do
begin
Pantalla_inicio;
inicializar_variables(A,B,C,D,E,F,G,H,I);
Dibujar_tablero ( A, B, C, D, E, F, G, H, I);
elegir_ficha(ficha_jug, ficha_maq);
elegir_turno(turno);
clrscr;
ganador:=false;
contador:=0;
while (contador<9) and (not ganador) do
begin
if(turno=1) then
begin
juega_jugador(ficha_jug,A,B,C,D,E,F,G,H,I);
turno:=2;
contador:= contador+1 ;
end
else
begin
if(turno=2) then
begin
writeln('turno de la maquina');
juego_maquina(ficha_maq,A,B,C,D,E,F,G,H,I);
turno:=1;
contador:= contador +1;
end;
end;
Dibujar_tablero ( A, B, C, D, E, F, G, H, I);
evaluar (A,B,C,D,E,F,G,H,I,ganador);
end;
if(ganador) then
begin
if(turno=2) then
writeln('gano el jugador');
if(turno=1) then
writeln('gano la maquina');
end
else
writeln('empate');
continuar_juego(seguir);
end;
pantalla_salida;
readkey;
end.
{Programa Principal que esta resumido todo el programa}
Vale, ese juego sí lo conozco. ;-) Para mí, es el juego de las "tres en raya" (o Tic Tac Toe).
Se trata de un tablero de 3x3 casillas, de modo que en vez de tus variables A,B,C,D,E,F,G,H,I yo usaría un array de dos dimensiones, así:
var tablero: array[1..3,1..3] of byte;
Tú decides si el primer índice del array es la fila o la columna. Por ejemplo, si el primer representa la columna, entonces en "tablero[2][1]" estaría almacenado el contenido de la casilla que está en la segunda columna de la primera fila (la segunda casilla, tu B). La última casilla sería "tablero[3][3]"
Con ese planteamiento, podrías guardar un número en cada casilla, como por ejemplo: 0 si la casilla está vacía, 1 si está ocupada por el jugador 1, 2 si la ocupa el segundo jugador.
¿Entendido? ¿Seguimos a partir de ahí?
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)