Teclas direccionales

jchaves83
08 de Noviembre del 2005
Quisiera saber si me pueden ayudar a resolver un problema con un proyecto, la idea es que a partir de un grafico generado por una funcion f(x) pueda realizar efectos de zoom y desplazamiento con las teclas direccionales, si tienen idea de como realizar esta ultiima parte por favor ponganse en contacto conmigo al correo [email protected] , gracias de antemano

Noel Solw
08 de Noviembre del 2005
Puede que tenga algo de lo que pides.
Con que compiler esta trabajando ?

jchaves83
08 de Noviembre del 2005
con el compilador Turbo C++ 3.0 de Borland

Noel Solw
08 de Noviembre del 2005
Te mando la solucion de las teclas en grafica, en borland c++, ver 3.1.
No tengo la version 3.0, pero supongo que es lo mismo.
A tu dispocision, para cualquier otra cosa que necesites

// program flechas.cpp
// written in borland c++ - ver 3.1
// 23/4/2005

#include <iostream.h>
#include <iomanip.h>
#include <conio.h>
#include <graphics.h>

const int dx = 70,
dy = 50,
delta = 10,
minix = 1,
maxix = 639-dx-delta,
miniy = 1,
maxiy = 479-dy-delta;

void Show(int x,int y,int color)
{
setcolor(color);
moveto(x,y);
rectangle(x,y,x+dx,y+dy);
} // SHOW

int main()
{
int driver, mode;
detectgraph(&driver, &mode);
initgraph(&driver, &mode, "d:\borlandc\bgi");


int x = 300,y = 200;
Show(x,y,LIGHTCYAN);
for(char a = '*';a != 27;)
{
a = getch();
if(!a)
a = getch();
switch(a)
{
case 'H' : if(y < miniy)
break;
Show(x,y,BLACK);
y -= delta;
Show(x,y,LIGHTCYAN);
break;
case 'P' :
case '2' : if(y > maxiy)
break;
Show(x,y,BLACK);
y += delta;
Show(x,y,LIGHTCYAN);
break;
case 'K' :
case '0' : if(x < minix)
break;
Show(x,y,BLACK);
x -= delta;
Show(x,y,LIGHTCYAN);
break;
case 'M' :
case '6' : if(x > maxix)
break;
Show(x,y,BLACK);
x += delta;
Show(x,y,LIGHTCYAN);
break;
}

}
closegraph();
}

Noel Solw
08 de Noviembre del 2005
Te agrego un programa grafico que tal vez pueda resultarte de utilidad :

// program para.cpp
// dibujar una parabola en la pantalla.
// 14/4/2005 - written in borland c++ - ver 3.1

#include <graphics.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>

const float MAX_ROW = 479; // graphic's screen dimention
const float MAX_COL = 639;
const float Xo = MAX_COL/2; // initial graphic's position
const float Yo = MAX_ROW/2; // " " "
const float A = 0.15; // parabola constantes
const float B = 5; // " "
const float C = -150; // " "
const float kx = 5;
const float ky = 1;

int Round(long double num) // rounds real number to integer
{
return int(num+0.5);
} // ROUND

int XtoCol(long double x)
{ // transform x value
return Round(Xo+x*kx); // to display column value
} // X TO COL

int YtoRow(long double y)
{ // transform y value
return Round(Yo-y*ky); // to display row value
} // Y TO ROW

long f(int x) // parabola's function
{ // aqui puede introducirse cualquier
return(x*x*A + x*B + C); // otra funcion.
} // f

void DibujarEjes()
{
setcolor(LIGHTCYAN);
line(XtoCol(-Xo),YtoRow(0),XtoCol(Xo),YtoRow(0));
line(XtoCol(0),YtoRow(-Yo),XtoCol(0),YtoRow(Yo));
settextstyle(DEFAULT_FONT,VERT_DIR,1);
for(int x = -Xo-1; x < Xo;x+=10)
{
line(XtoCol(x),YtoRow(3),XtoCol(x),YtoRow(-3));
char str[10];
itoa(x,str,10);
outtextxy(XtoCol(x+2),YtoRow(-15),str);
}
settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
for(int y = -Yo-11; y < Yo;y+=50)
{
if(!y)
continue;
line(XtoCol(-1),YtoRow(y),XtoCol(1),YtoRow(y));
char str[10];
itoa(y,str,10);
outtextxy(XtoCol(2),YtoRow(y),str);
}
} // DIBUJAR EJES

void DibujarParabola()
{
setcolor(YELLOW);
moveto(XtoCol(-Xo),YtoRow(f(-Xo)));
for(int x = -Xo+1;x < Xo;x++)
lineto(XtoCol(x),YtoRow(f(x)));
} // DIBUJAR PARABOLA

void main()
{
int driver, mode;
detectgraph(&driver,&mode);
initgraph(&driver,&mode,"d:\borlandc\bgi");
DibujarEjes();
DibujarParabola();
getch();
closegraph();
} // MAIN

browsons
08 de Noviembre del 2005
yo tengo un problema similar, nesecito hacer un juego interactivo y me gustaria saber como decirle al programa que si aprieto flecha arriba aga un accion o si aprieto Ctrl.

por fabor una respuesta a [email protected]