• Viernes 3 de Mayo de 2024, 08:23

Autor Tema:  Porque No Funciona Esto? Deberia...  (Leído 1934 veces)

gui2485

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Porque No Funciona Esto? Deberia...
« en: Sábado 24 de Febrero de 2007, 21:33 »
0
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.


mamex

  • Miembro activo
  • **
  • Mensajes: 77
  • Nacionalidad: mx
    • Ver Perfil
Re: Porque No Funciona Esto? Deberia...
« Respuesta #1 en: Domingo 25 de Febrero de 2007, 00:09 »
0
Mira tu declaraste estas variables

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

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;

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
  1.  
  2. Procedure InicializarTablero(Var Tablero:TTablero);
  3. Var i,j:Integer;
  4. Begin
  5. For i:=1 To Alto Do
  6.     For j:=1 To Ancho Do Tablero[i,j]:= '0';
  7. End;
  8.  
  9.  

Espero estar en lo correcto    :whistling:

gui2485

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Porque No Funciona Esto? Deberia...
« Respuesta #2 en: Domingo 25 de Febrero de 2007, 01:02 »
0
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

  • Miembro activo
  • **
  • Mensajes: 77
  • Nacionalidad: mx
    • Ver Perfil
Re: Porque No Funciona Esto? Deberia...
« Respuesta #3 en: Domingo 25 de Febrero de 2007, 19:22 »
0
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_

  • Miembro activo
  • **
  • Mensajes: 72
    • Ver Perfil
Re: Porque No Funciona Esto? Deberia...
« Respuesta #4 en: Miércoles 7 de Marzo de 2007, 14:06 »
0
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.-
Alpha
http]