Programación General > Pascal

 Porque No Funciona Esto? Deberia...

(1/1)

gui2485:
HOla a todos...

tengo un problema... empece a trabajar con modo grafico... y las funciones antiguas no funcionan....

quiero utilizar readkey antes del close graph.... abre todo normal y dps cuando viene el readkey queda estatico, aprieta teclas y nada, el code es este:


--- Citar ---
Program InterGraf01;

Uses CRT,SysUtils,Graph;

Const
       //Colores
       Black=0;Blue=1;Green=2;Cyan=3;Red=4;Magenta=5;Brown=6;LightGray=7;
       DarkGray=8;LightBlue=9;LightGreen=10;LightCyan=11;LightRed= 12;
       LightMagenta=13;Yellow=14;White=15;

       //Ventanas
       LongVentana = 475;
       AnchoVentanaDerecha = 630;

       //Rangos;
      Ancho = 7; Alto = 8;

      //Otros
      RadioFichasX= 17;
      RadioFichasY= 17;


Type   TFicha=Char;

       TJugador = Record
         Nick:String;
         Jugadas:Integer;
         End;

      //Matriz de juego;
      TTablero = Array[1..Alto,1..Ancho] Of TFicha;


//Variables Globales;
Var
   gd,gm:SmallInt; //Manejador Grafico y Manejador de color respectivamente;
   Tablero:TTablero;
   Win:Boolean;
   Player01,Player02:TJugador;
   Entrada:CHar;
//------------------------------------------------------------------------------
Procedure InicializarModoGrafico;

Begin
gm:=vgahi;  //tmb podemos usar gm:=Detect;
gd:=vga;  // //tmb podemos usar gm:=Detect;

InitGraph(gd,gm,'');
  if GraphResult <> grOk then
    begin
      Writeln('Driver ',gd,' Modo Grafico ',gm,' No Soportado');
      Halt(1);
    end;

End;

//------------------------------------------------------------------------------

Procedure InicializarTablero(Var Tablero:TTablero);

Var i,j:Integer;

Begin

For i:=1 To Ancho Do
    For j:=1 To Alto Do Tablero[i,j]:= '0';

End;

//------------------------------------------------------------------------------
Procedure Ambiente;

Var Vent01Activa,Vent02Activa:Boolean;

Begin

//Dibujamos Ventana de la izquierda;
Setviewport(5,5,220,LongVentana,Vent01Activa);
SetFillStyle(1,Brown);
Bar(5,5,220,LongVentana);
SetFillStyle(1,Black);
Bar(15,15,205,LongVentana-10);

//Coloco titulos en ventana izquierda;
SetTextStyle(2,0,2);



//Dibujo VEntana Derecha;
Setviewport(230,5,AnchoVentanaDerecha,LongVentana,Vent02Activa);
//Dibujamos Ventana de la izquierda;
SetFillStyle(1,Brown);
Bar(0,5,400,LongVentana);
SetFillStyle(1,Black);
Bar(10,15,390,LongVentana-10);


ENd;

//------------------------------------------------------------------------------
Procedure DibujarTablero(Tablero:TTablero);

Var i,j,XActual,YActual:Integer;

Begin

//Creo El Rectangulo Azul:
SetColor(White);
SetFillStyle(1,Blue);
Bar(30,380,370,20);

//Rotulo del fichero;
SetFillStyle(0,Black);
Bar(40,50,360,30);
SetTextStyle(2,0,1);
OutTextXY(45,35,'1     2     3     4    5    6    7    8');

//INicializo Variables;
XActual:=60; YActual:=80;

Tablero[1,2]:='1';
Tablero[6,4]:='2';
Tablero[1,7]:='1';
Tablero[2,2]:='2';

For i:=1 To Ancho Do

    Begin
      For j:=1 To Alto Do
        Begin

        Case (Tablero[i,j]) Of
        '0':Begin
            SetColor(White);
            SetFillStyle(0,Black);
            FillEllipse(XActual,YActual,RadioFichasX,RadioFichasY);
            End;
        '1': Begin
             SetColor(White);
             SetFillStyle(1,Red);
             FillEllipse(XActual,YActual,RadioFichasX,RadioFichasY);
             End;
        '2':Begin
             SetColor(White);
             SetFillStyle(1,Yellow);
             FillEllipse(XActual,YActual,RadioFichasX,RadioFichasY);
             End;
         End;

        XActual:=XActual + 40;

        End;

     XActual:=60;
     YActual:=YActual + 40;

     End;

End;


//---------------------------------------------------------------------------
//PRINCIPAL
//------------------------------------------------------------------------
Begin

//Inicializacion de Variables;
Win:=False;
InicializarTablero(Tablero);
InicializarModoGrafico;
Ambiente;
DibujarTablero(Tablero);

Readkey;


Closegraph; //Mata al modo grafico;


End.


--- Fin de la cita ---

mamex:
Mira tu declaraste estas variables


--- Citar ---//Rangos;
Ancho = 7; Alto = 8;
//Matriz de juego;
TTablero = Array[1..Alto,1..Ancho] Of TFicha;

--- Fin de la cita ---

Y despues recorres la matriz así:

--- Citar ---Procedure InicializarTablero(Var Tablero:TTablero);
Var i,j:Integer;
Begin
For i:=1 To Ancho Do
    For j:=1 To Alto Do Tablero[i,j]:= '0';
End;

--- Fin de la cita ---

La primera dimensión que pones es i o sea ancho, pero la primera dimensión debiese ser j, o sea, alto. Entonces tu código debe estar así:



--- Código: Text --- Procedure InicializarTablero(Var Tablero:TTablero);Var i,j:Integer;BeginFor i:=1 To Alto Do    For j:=1 To Ancho Do Tablero[i,j]:= '0';End;  
Espero estar en lo correcto    :whistling:

gui2485:
Muchas gracias, eso ya lo solucione, pero yo me refiero al readkey que es como que el teclado esta bloqueado. Aprieto Readkey y no pasa nada. :ph34r:

mamex:
Ok, es k talvez se cicle tu programa, depuralo bien, para ver si llega a ejecutarse hasta la linea donde se encuentra readkey.

Lo chekaré con calma.

Alpha_:
Lo único que noté es que ocurre lo mismo que mencionó mamex en el procedimiento DibujarTablero.

Si es que vos llegás a ver todos los dibujos en el modo gráfico y ahí es en donde no responde el readkey, muy seguramente debe haberse quedado ciclando tu código en DibujarTablero.

Fijate de invertir el orden de i,j en la matriz en DibujarTablero, dentor del for, o de invertir el uso de los valores i = Ancho, j = Alto por i = Alto, j = Ancho.

Otra cosa que noté es que dentro del procedimiento DibujarTablero, seteás varios valores dentro de la matriz, pero dado que la variable Tablero no está pasada como variable (valga la redundancia), dichos cambios no se van a reflejar cuando estés fuera del procedimiento DibujarTablero. No sé si eso fue a drede, pero lo noté de todos modos.

SldZ.-

Navegación

[0] Índice de Mensajes

Ir a la versión completa