#include // Para getch(); #include // Para getch(); #include // Para getch(); #include // Para getch(); #include // Para outtextxy(...); y cleardevice(...); #include "..\libs\make_bot\make_bot.h" // Fuciones de MAKE_BOTON #define LINEFREC 2 #define MatrizPoint 56 #define BackGRID 0 /* #define GRID_Y 6 #define GRID_X 6 */ #define GRID_Y 4 #define GRID_X 4 #define PriGRID_Y 247 #define PriGRID_X 11 typedef struct { int x, y; char ndigitos; char AX, AY; char C1, C2, C3; } p_graphics; extern void Carga_Puntero(void); extern int Numero_Digital( long numero, p_graphics *ND ); extern void Fuente_Amplia( char *Frase, p_graphics *FA ); int Espera_TeclaRatonFrec(void); //((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1), ( y_raton - ( PriGRID_Y - 8 ) )/GRID_Y ) int PerfilX[4096]; int oldPerfilX, oldPerfilY; void TrazaPerfiles(void); void TrazaGrafica(void); char cruz = 1; int main(void){ p_graphics Numeros = { 20, 20, 6, 3, 3, EGA_RED, EGA_BLACK, EGA_DARKGRAY }; p_graphics Letras = { 15, 102, 14, 1, 1, EGA_BLACK, EGA_RED, EGA_DARKGRAY }; char Buffer[80]; int numero=0; float num = 0; for ( numero=0; numero < 640; numero++ ) { num += 0.5; PerfilX[ numero ] = 15 + 10*sin( num ); } Initialize( 9, 2 ); // Inicializa el Modo Gr fico // carga_botones("Frec.img"); // Carga botones del fichero "Frec.img" Imprime_Estaticos( 1, "Frec.img"); // Imprime botones estaticos 'Seccion 1' /// Dibujamos la malla TrazaGrafica(); PunteroRaton = 1; inicializa_raton_grafico( 0, 0, 640, 480 ); float vez=1, numerof=0; while( 1 ) { Espera_TeclaRatonFrec(); if ( cruz == 0 ) Anclar_Raton(); // if ( y_raton >= (PriGRID_Y - 8) ) numero = 10101; Numero_Digital( numerof, &Numeros ); /*********************************************************************************************************\ |***/ oldPerfilX = PerfilX[ ((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1) ]; /*| |**/ oldPerfilY = ((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1); /**| |*/ PerfilX[ ((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1) ] = ( y_raton - ( PriGRID_Y - 8 ) )/GRID_Y; /***| \*********************************************************************************************************/ TrazaPerfiles(); switch ((int)(vez)) { case 1: sprintf( Buffer, "X: %2d, Y: %2d |", ((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1), ( y_raton - ( PriGRID_Y - 8 ) )/GRID_Y ); break; case 2: sprintf( Buffer, "X: %2d, Y: %2d |", ((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1), ( y_raton - ( PriGRID_Y - 8 ) )/GRID_Y ); break; case 3: sprintf( Buffer, "X: %2d, Y: %2d |", ((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1), ( y_raton - ( PriGRID_Y - 8 ) )/GRID_Y ); break; case 4: sprintf( Buffer, "X: %2d, Y: %2d |", ((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1), ( y_raton - ( PriGRID_Y - 8 ) )/GRID_Y ); vez = 1; break; } if ( (int(vez*100))%100 == 0 ) Fuente_Amplia( Buffer, &Letras ); vez+=1; if( kbhit() ) { switch( getch() ) { case '+': numerof += 0.05; break; case '-': numerof -= 0.05; break; case 27: restorecrtmode(); return 0; break; } num = 0; for ( numero=0; numero < 640; numero++ ) { num += numerof; PerfilX[ numero ] = 15 + 10*sin( num ); } TrazaGrafica(); } } // Imprime_Secuencia(1); // Imprime secuencia 1. /* while(1){ // Bucle infinito switch( Comprueba_Secuencia( 1 ) ) { // Iniciamos comprobacion case 0: // No se pulso ningun BOTON while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER break; case -1: // Hay una tecla especial en BUFFER getch(); // La eliminamos break; case 1: Ayuda(); cleardevice(); Imprime_Estaticos( 1, "botones.p1"); // Devolvemos el aspecto inicial Imprime_Secuencia(1); break; case 2: restorecrtmode(); return 0; default: break; } } */ getch(); restorecrtmode(); return 0; } int Espera_TeclaRatonFrec(void){ char Que; int bot_izq, bot_der; activa_raton(); //char cruz = 1; do{ asm mov AX, 3 asm int 0x33 asm mov x_raton, cx asm mov y_raton, dx asm mov bot_izq, bx asm mov bot_der, bx bot_izq = bot_izq & 1; bot_der = (bot_izq >> 1 ) & 1; if ( y_raton >= (PriGRID_Y - 8) ) { if ( !cruz ) { cruz = 1; PunteroRaton = 2; Carga_Puntero(); if ( ( (x_raton - (PriGRID_X-1) )%GRID_X ) >= GRID_X/2 && ( ( (x_raton - PriGRID_X)%GRID_X ) != 0 ) ) x_raton += (GRID_X - ( (x_raton - (PriGRID_X-1))%GRID_X ) ); else x_raton -= ( ( (x_raton - (PriGRID_X-1))%GRID_X ) ); y_raton = PriGRID_Y - 8; } else { if ( x_raton > 622 ) x_raton = 622; else if ( ( (x_raton - (PriGRID_X-1) )%GRID_X ) >= GRID_X/2 && ( ( (x_raton - PriGRID_X)%GRID_X ) != 0 ) ) x_raton += (GRID_X - ( (x_raton - (PriGRID_X-1))%GRID_X ) ); else x_raton -= ( ( (x_raton - (PriGRID_X-1))%GRID_X ) ); if ( y_raton > 459 ) y_raton = 459; else if ( ( (y_raton - ( PriGRID_Y - 8 ) )%GRID_Y ) >= GRID_Y/2 && ( ( (y_raton - ( PriGRID_Y - 8 ) )%GRID_Y ) != 0 ) ) y_raton += (GRID_Y - ( (y_raton - ( PriGRID_Y - 8 ) )%GRID_Y ) ); else y_raton -= ( ( (y_raton - ( PriGRID_Y - 8 ) )%GRID_Y ) ); } asm mov ax, 4 asm mov cx, x_raton asm mov dx, y_raton asm int 0x33 } else if ( cruz ) { cruz = 0; PunteroRaton = 1; Carga_Puntero(); } }while( bot_izq == 0 && bot_izq == 0 && !MB_TeclaPulsada() ); ///////////////////////////////////////// // RETURN Derecho Izquierdo // // // // 0 0 0 // // 1 1 0 // // 2 0 1 // // 3 1 1 // // // ///////////////////////////////////////// if ( bot_der ==0 && bot_izq ==0 ) Que = 0; if ( bot_der ==1 && bot_izq ==0 ) Que = 1; if ( bot_der ==0 && bot_izq ==1 ) Que = 2; if ( bot_der ==1 && bot_izq ==1 ) Que = 3; desactiva_raton(); return Que; } void TrazaPerfiles(void) { int X = x_raton+6;//((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)*GRID_X + PriGRID_X; int Y = y_raton+8; int Desde_Y, Hasta_Y; if ( y_raton < (PriGRID_Y - 8) ) return; // Calculo desde donde, hasta donde tengo que borrar para hacelerar el borrado. // ( esta nueva optimizaci¢n acelera el tiempo de retardo: // en el mejor caso: un 98.4 % // en el peor caso: un 0.0 % // tiempo medio acelerado ( teu: un 6i.j % Desde_Y = Hasta_Y = oldPerfilX; if ( Hasta_Y < PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)+1] ) Hasta_Y = PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)+1]*GRID_Y+PriGRID_Y; else if ( Hasta_Y < PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)-1] ) Hasta_Y = PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)-1]*GRID_Y+PriGRID_Y; else // if ( Hasta_Y = PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)-1] ) Hasta_Y = Hasta_Y*GRID_Y+PriGRID_Y; if ( Desde_Y > PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)+1] ) Desde_Y = PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)+1]*GRID_Y+PriGRID_Y; else if ( Desde_Y > PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)-1] ) Desde_Y = PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)-1]*GRID_Y+PriGRID_Y; else Desde_Y = Desde_Y*GRID_Y+PriGRID_Y; setcolor( BackGRID ); // Borro las franjas adyacentes al punto perfilado: if ( (((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)-1) >=0 ) line( X - ( GRID_X - 1 ), PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)-1]*GRID_Y+PriGRID_Y, (X+1), oldPerfilX*GRID_Y+PriGRID_Y ); line( (X+1), oldPerfilX*GRID_Y+PriGRID_Y, X + ( GRID_X + 1 ), PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)+1]*GRID_Y+PriGRID_Y ); // putpixel( X - ( GRID_X - 1 ), PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)-1]*GRID_Y+PriGRID_Y, MatrizPoint ); // putpixel( (X+1), oldPerfilX*GRID_Y+PriGRID_Y, MatrizPoint ); // putpixel( X + ( GRID_X + 1 ), PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)+1]*GRID_Y+PriGRID_Y, MatrizPoint ); // Retrazo los puntos de la matriz anulada { auto int x, y; for( x= ( (((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)-1) >=0 ) ? X - ( GRID_X - 1 ): ( X - 1 ); x<= (x_raton > 622) ? ( X + 1 ) : ( X + ( GRID_X + 1 ) ); x+=GRID_X) // /* for( y=Desde_Y; y<=Hasta_Y; y+=GRID_Y) putpixel( x, y, MatrizPoint ); } // Destruccion de x, y // Ahora dibujo las lineas correspondientes al perfil izq. y derch. setcolor( LINEFREC ); if ( (((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)-1) >=0 ) line( X - ( GRID_X - 1 ), PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)-1]*GRID_Y+PriGRID_Y, (X+1), Y ); if ( x_raton <= 622 ) line( (X+1), Y, X + ( GRID_X + 1 ), PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)+1]*GRID_Y+PriGRID_Y ); } void TrazaGrafica(void) { int x, y; setfillstyle( SOLID_FILL, BackGRID ); bar( PriGRID_X, PriGRID_Y, 631, 467 ); /* for( x=PriGRID_X; x<=631; x+=GRID_X) for( y=PriGRID_Y; y<=467; y+=GRID_Y) putpixel( x, y, MatrizPoint ); */ //for( x=6 - ( GRID_X - 1 ); x<=631; x+=GRID_X) for( x= ( 6 - ( 1 - PriGRID_X )%GRID_X - ( GRID_X - 1 ) ) + GRID_X; x<=631; x+=GRID_X) for( y=PriGRID_Y; y<=467; y+=GRID_Y) putpixel( x, y, MatrizPoint ); setcolor( LINEFREC ); for( x= ( 6 - ( 1 - PriGRID_X )%GRID_X - ( GRID_X - 1 ) ) + GRID_X; x<=631; x+=GRID_X) if ( (x-PriGRID_X)/GRID_X >= 0 ) line( x, PerfilX[ (x-PriGRID_X)/GRID_X ]*GRID_Y+PriGRID_Y, x+GRID_X, PerfilX[ ( (x-PriGRID_X)/GRID_X ) + 1 ]*GRID_Y+PriGRID_Y); }