• Viernes 15 de Noviembre de 2024, 10:50

Autor Tema:  Grafica Cruz Y Marca Coordenadas  (Leído 2673 veces)

Faustox

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Grafica Cruz Y Marca Coordenadas
« en: Viernes 8 de Abril de 2005, 09:09 »
0
Un saludo a todos!

Se me plantea un problema tengo que hacer una cruz que se mueve a modo de cursor segun como presione las teclas direccionales y me dibuja una linea cuando presiono enter.

Ahora debo modificar el programa para que no borre las lineas al retroceder, me imprima la primera coordada donde se presiono enter y las coordenadas por donde va desplazandose la cruz cuando la voy moviendo con las flechas.  Además debe dibujarse un rectangulo es decir un area de dibujo que es el limite fuera del cual no debe desplazarse la cruz, la impresion de las coordenadas debe estar fuera de dicha  area.  Les dejo el codigo original y un que altere pero que no va y no hace todo lo que debe de cualquier manera pero ni ese ha corrido correctamente.

En verdad, necesito ayuda.
    ________________
   |  _____________    |
   | |                      |   |
   | |           +         |   |
   | |____________ |   |
   |_coord x,y________|


Codigo Original

/* ESTE PROGRAMA HACE QUE PODAMOS UBICAR EL CURSOR EN LA POSICION DESEADA
INTERACTIVAMENTE */

#include <stdio.h>
#include <graphics.h>
#include <process.h>
#include <conio.h>
#define NEGRO 0
#define BLANCO 15
#define ARRIBA 72
#define ABAJO 80
#define DER 77
#define IZQ 75
#define ENTER 13
#define Poner_cursor(x,y) Dib_cursor(x,y,BLANCO);
#define Borrar_cursor(x,y)Dib_cursor(x,y,NEGRO);
#define Tamcurs 5
void inicio (void);
void Dib_polilinea (void);
int Escoger_punto (int *,int *);
void Dib_cursor (int,int,int);
int Leer (void);

/* MAIN */

void main (void)
{
inicio();
cleardevice();
Dib_polilinea();
restorecrtmode();
}


/* FUNCION INICIO */

void inicio (void)
{
int adaptador=DETECT,modo,codigo;
initgraph(&adaptador,&modo,"c:\\ tc20");
if ((codigo=graphresult())!=0)
{
printf("%s\n",grapherrormsg(codigo));
exit(1);
}
}

/* FUNCION POLI_LINEA */

void Dib_polilinea (void)
{
int x1,x2,y1,y2,car;
x2=getmaxx()/2;
y2=getmaxy()/2;
car= Escoger_punto(&x2,&y2);
while(car==ENTER)
{
x1=x2;
y1=y2;
car=Escoger_punto(&x2,&y2);
if(car==ENTER)
line(x1,y1,x2,y2);
}
}

/* FUNCION DIB_CURSOR */

void Dib_cursor(int x,int y,int color)
{
int Col_ant;
Col_ant=getcolor();
setcolor(color);
line(x-Tamcurs,y,x+Tamcurs,y);
line(x,y-Tamcurs,x,y+Tamcurs);
setcolor(Col_ant);
}

/* FUNCION ESCOGER_PUNTO */

int Escoger_punto(int * x,int * y)
{
int c,dx,dy;
Poner_cursor(*x,*y);
for (;
{
dx=dy=0;
switch(c=Leer())
{
case ARRIBA:dy--;break;
case ABAJO:dy++;break;
case IZQ:dx--;break;
case DER: dx++;break;
default:return©;
}
Borrar_cursor(*x,*y);
*x+=dx;
*y+=dy;
Poner_cursor(*x,*y);
}
}

/* FUNCION LEER */

int Leer(void)
{
int tecla;
while((tecla=getch())!=0)
if (tecla==ENTER)
return(tecla);
return(getch());
}

***************************
Codigo alterado


#include <stdio.h>
#include <graphics.h>
#include <process.h>
#include <conio.h>
#define NEGRO 0
#define BLANCO 15
#define ARRIBA 72
#define ABAJO 80
#define DER 77
#define IZQ 75
#define ENTER 13
#define Poner_cursor(x,y) Dib_cursor(x,y);
#define Borrar_cursor(x,y)Dib_cursor(x,y);
#define Tamcurs 5
#define Col_curs 8
#define s 115
void inicio (void);
void Dib_polilinea (void);
int Escoger_punto (int *,int *);
void Dib_cursor (int,int);
int Leer (void);
void area_dib(void); /*FUNCION QUE FORMA EL AREA DE DIBUJO */
void XOR_PIXEL(int x,int y); /*FUNCION QUE EVITA QUE SE BORREN LAS LINEAS*/
int maxx(int *x);
int maxy(int *y);



/* MAIN */

void main (void)
{
inicio();
cleardevice();
area_dib();
Dib_polilinea();
if(Leer()==s)
restorecrtmode();
else main();

}


/* FUNCION INICIO */

void inicio (void)
{
int adaptador=DETECT,modo,codigo;
initgraph(&adaptador,&modo,"c:\\ tc20");
if ((codigo=graphresult())!=0)
{
printf("%s\n",grapherrormsg(codigo));
exit(1);
}
}

/* FUNCION POLI_LINEA */

void Dib_polilinea (void)
{
int x1,x2,y1,y2,car;
x2=getmaxx()/2;
y2=getmaxy()/2;
car= Escoger_punto(&x2,&y2);
while(car==ENTER)
{
x1=x2;
y1=y2;
car=Escoger_punto(&x2,&y2);
if(car==ENTER)
line(x1,y1,x2,y2);
}
}

/* FUNCION DIB_CURSOR */

void Dib_cursor(int x,int y)
{
int i;
for(i=0;i<Tamcurs;i++)
{
XOR_PIXEL(x-i,y);
XOR_PIXEL(x+i,y);
XOR_PIXEL(x,y-i);
XOR_PIXEL(x,y+i);
}
}

/*FUNCION XOR_PIXEL*/

void XOR_PIXEL(int x,int y)
{
putpixel(x,y,Col_curs^getpixel(x,y) );
}

/* FUNCION ESCOGER_PUNTO */

int Escoger_punto(int * x,int * y)
{
int c;
int ct_arriba=0;
int ct_abajo=0;
int ct_der=0;
int ct_izq=0;
int paso_acel=5;
Poner_cursor(*x,*y);
for (;
{
switch(c=Leer())
{
case ARRIBA:
if( maxy(*y)!=0 )
{
Borrar_cursor(*x,*y);
*y+=(++ct_arriba<paso_acel)?-1:-paso_acel;
ct_abajo=ct_der=ct_izq=0;
Poner_cursor(*x,*y);
}
break;

case ABAJO:
if( maxy(*y)!=1 )
{
*y+=(++ct_abajo<paso_acel)?1:paso_acel;
ct_arriba=ct_izq=ct_der=0;
Poner_cursor(*x,*y);
}
break;

case IZQ:
if( maxx(*x)!=1 )
{
Borrar_cursor(*x,*y);
*x+=(++ct_izq<paso_acel)?-1:paso_acel;
ct_arriba=ct_abajo=ct_der=0;
Poner_cursor(*x,*y);
}
break;
case DER:
if(maxx(*x)!=0)
{
Borrar_cursor(*x,*y);
*x+=(++ct_der<paso_acel)?1:paso_acel;
ct_abajo=ct_arriba=ct_izq=0;
Poner_cursor(*x,*y);
}
break;
default:
Borrar_cursor(*x,*y);
return©;

}
/* FUNCION LEER */

int Leer(void)
{
int tecla;
while((tecla=getch())!=0)
if (tecla==ENTER)
return(tecla);
return(getch());
}
/*FUNCION AREA_DIB*/
void area_dib(void)
{
int x,y;
x=getmaxx()/2;
y=getmaxy()/2;
setcolor(BLUE);
rectangle(x-300,y-150,x+300,y+150);
}

/*FUNCION MAXx*/
int maxx(int *x)
{
int min1,max1;

max1=(getmaxx()/2)+300;
min1=(getmaxx()/2)-300;
if(*x>=max1)
return(0);
if(*x<=max1)
return(1);

}

/*FUNCION MAXy*/
int maxy(int *y)
{
int min2,max2,centro2;

max2=(getmaxy()/2)+150;
min2=(getmaxy()/2)-150;
if(*y>=max2)
return(0);

if(*y<=max2) return(1);

}

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Grafica Cruz Y Marca Coordenadas
« Respuesta #1 en: Lunes 11 de Abril de 2005, 05:38 »
0
Lo primero que debes hacer es replantear tu porblema, ya que no muchas pesonas se centraran en estudiar tu odigo...
creoq eu si defeines cual es concreta y realmente tu porblema tendras mas ayuda.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Faustox

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Grafica Cruz Y Marca Coordenadas
« Respuesta #2 en: Jueves 14 de Abril de 2005, 07:00 »
0
Todo lo que quiero es que me imprima las coordenadas por donde se vaya moviendo la cruz pero no que me imprima todas una tras otra sino que se reemplace que sea una sobre otra

ej: 200,10 pasa a ser impreso en el mismo lugar
     200,11 pero el 200,10 desaparece de ese lugar para ser ocupado por 200,11

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Grafica Cruz Y Marca Coordenadas
« Respuesta #3 en: Jueves 14 de Abril de 2005, 15:07 »
0
:huh: Bueno sigo sin entender nada.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

niko24

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Grafica Cruz Y Marca Coordenadas
« Respuesta #4 en: Jueves 14 de Abril de 2005, 15:56 »
0
¿te refieres a que se visualicen los datos en una posicion determinada en la pantalla?

¿¿ como lo que hace la funcion gotoxy () ??  :rolleyes:

niko24

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Grafica Cruz Y Marca Coordenadas
« Respuesta #5 en: Jueves 14 de Abril de 2005, 15:58 »
0
:smartass:  me salio por duplicado  :whistling:

Faustox

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Grafica Cruz Y Marca Coordenadas
« Respuesta #6 en: Viernes 15 de Abril de 2005, 03:14 »
0
Gracias por el intento de entender el lio que estoy haciendo. :P

Trate de poner un dibujo de la pantalla y como debe aparecer pero al postearlo se distorciono &lt;_&lt;

El código alterado ya lo hice funcionar (aunque todavia no me muestra las coordenadas) lo que hace es que dibuja una cruz  y la desplaza borrando pixels, mediante presionar las flechas direccionales el "cursor" debe moverse por la pantalla ademas solo en un area delimitada por un rectangulo (el rectangulo solo es guia en realidad es un mero dibujo) entonces el problema que tengo es que hay que imprimir arriba de la pantalla y fuera del rectangulo que ya hice lo siguiente:

Las coordenadas originales son: /*Aqui debe aparecer el primer punto donde se presiono enter*/

Las coordenadas actuales son:
 /*aqui debe aparecer la coordenada en la que se encuentra el dibujo de la cruz o cursor como le llamemos y va cambiando conforme mueves las flechas y el dibujito cambia de posicion en la pantalla, yo las imprimo pero enves de reemplazarse como por ejemplo cuando un reloj digital cambia minutos y horas (a eso me refiero con reemplazar) me las imprime todas y se me llena la pantalla de coordenadas.  Necesito que cambien como un reloj no que se impriman en toda la pantalla.  Y si tienen que imprimirse en un solo lugar y el letrero de "coordenadas actuales son" no debe cambiar nunca ¿sugerencias?  :comp: