[ Foro de Pascal ]

el gato en arreglo

08-Sep-2013 06:07
Invitado (andre)
5 Respuestas

como puedo hacer el gato con arreglo no usando for solo el while?


08-Sep-2013 10:02
Nacho Cabanes (+84)

¿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;



08-Sep-2013 18:18
Invitado (andre)

el juego el gato el de las X o O


09-Sep-2013 00:09
Nacho Cabanes (+84)

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.


09-Sep-2013 03:27
Invitado (andre)

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}



09-Sep-2013 19:32
Nacho Cabanes (+84)

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.)