Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Mover un circulo con Winbgim (Problema)

Estas en el tema de Mover un circulo con Winbgim (Problema) en el foro de C/C++ en Foros del Web. Código: #include <winbgim.h> #include <stdio.h> #include <stdlib.h> #include <time.h> #include <stdint.h> #include <string.h> int main() { int x, y, radius; char flecha; initwindow(1024,768); settextstyle(0,0,2); setcolor(COLOR(200,240,45)); ...
  #1 (permalink)  
Antiguo 20/08/2012, 10:37
 
Fecha de Ingreso: agosto-2012
Mensajes: 94
Antigüedad: 12 años, 3 meses
Puntos: 7
Mover un circulo con Winbgim (Problema)

Código:
#include <winbgim.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdint.h>
#include <string.h>



int main()
{
    int x, y, radius;
    char flecha;
    initwindow(1024,768); 
    settextstyle(0,0,2);
    setcolor(COLOR(200,240,45));
    outtextxy(200,300,"Mover un circulo");
    outtextxy(200,400,"Pulse una tecla para continuar...");
    while(!kbhit());
    setcolor(BLACK);
    outtextxy(200,300,"Mover un circulo");
    outtextxy(200,400,"Pulse una tecla para continuar...");
    
    outtextxy(400,400,"Para mover el circulo, use las flechas. Para finalizar, presione la tecla Fin");
    outtextxy(400,500,"Presione una tecla para continuar");
    while(!kbhit());
    
    
    x = 500;
    y = 500;
    radius = 200;
    setcolor(WHITE);
    circle(x,y,radius);
    
    do{
                       
                       fflush(stdin);
                       flecha = getch();
                      if(flecha == 0); 
                      
                      {         
                                getch();
                                if(flecha = KEY_UP)
                                { 
                                      fflush(stdin);
                                      outtextxy(100,100,"Muevete para arriba");
                                      setcolor(BLACK);
                                      circle(x,y,radius);
                                      y = y - 10;
                                      delay(1);
                                      setcolor(WHITE);
                                      circle(x,y,radius);
                                      fflush(stdin);
                                }
                                fflush(stdin);
                                getch();      
                                      if(flecha = KEY_DOWN)
                                      {
                                      outtextxy(200,200,"Muevete hacia abajo");
                                      setcolor(BLACK);
                                      circle(x,y,radius);
                                      fflush(stdin);
                                      y = y + 10;
                                      setcolor(WHITE);
                                      circle(x,y,radius);
                                      }
                                      fflush(stdin);
                                      getch();
                                      if(flecha = KEY_LEFT)
                                      {
                                      setcolor(BLACK);
                                      circle(x,y,radius);
                                      x = x - 10;
                                      setcolor(WHITE);
                                      circle(x,y,radius);
                                      }
                                      fflush(stdin);
                                      getch(); 
                                       if(flecha = KEY_RIGHT)
                                        {
                                      setcolor(BLACK);
                                      circle(x,y,radius);
                                      x = x + 10;
                                      setcolor(WHITE);
                                      circle(x,y,radius);
                                      }
                                      fflush(stdin);
                                      getch(); 
                      
                      }
                      
}while(getch()!=KEY_END);
while(!kbhit());
closegraph();
return 0;
}
Hola!!!

Este programa, tecnicamente permite mover un circulo con las flechas del teclado, sin embargo, no mueve el circulo, cuando apreto una flecha titila, y si saco un if, hace los otros tres, al parecer, el getch me reconoce las cuatro flechas a la vez, y cualquier tecla presionada lo considera las cuatro teclas

¿Porque?

Gracias de Antemano.

Saludos!!
  #2 (permalink)  
Antiguo 20/08/2012, 13:21
Avatar de L3m0n  
Fecha de Ingreso: diciembre-2011
Mensajes: 219
Antigüedad: 12 años, 10 meses
Puntos: 46
Respuesta: Mover un circulo con Winbgim (Problema)

Bueno la verdad que yo no se como funciona esta libreria, pero de lo que he podido leer del codigo hay una cosa que no entiendo, es el
Código C:
Ver original
  1. if(flecha == 0)
  2. {
  3. ...
  4. }

Quiero decir tiene algun proposito, ya que anteriormente no le asignas ningun valor a flecha.
Prueba quitando ese if a ver que pasa.


PD: NO USEIS FFLUSH(STDIN) que me duelen los ojos solo de verlo :)

Saludos
  #3 (permalink)  
Antiguo 21/08/2012, 06:56
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 11 meses
Puntos: 25
Respuesta: Mover un circulo con Winbgim (Problema)

las condiciones de los 4 if que comprueban que tecla se presiono estan mal, estas usando el operador de igualacion = en lugar del de comparacion ==... si te equivocaste en el 1er if, al copiarlo arrastraste el error, proba camiandolos.


otra cosa, cuando pongas el codigo en highlight, elegi el lenguaje, asi queda mas lindo :)

Código C++:
Ver original
  1. #include <winbgim.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5. #include <stdint.h>
  6. #include <string.h>
  7.  
  8.  
  9.  
  10. int main()
  11. {
  12.     int x, y, radius;
  13.     char flecha;
  14.     initwindow(1024,768);
  15.     settextstyle(0,0,2);
  16.     setcolor(COLOR(200,240,45));
  17.     outtextxy(200,300,"Mover un circulo");
  18.     outtextxy(200,400,"Pulse una tecla para continuar...");
  19.     while(!kbhit());
  20.     setcolor(BLACK);
  21.     outtextxy(200,300,"Mover un circulo");
  22.     outtextxy(200,400,"Pulse una tecla para continuar...");
  23.    
  24.     outtextxy(400,400,"Para mover el circulo, use las flechas. Para finalizar, presione la tecla Fin");
  25.     outtextxy(400,500,"Presione una tecla para continuar");
  26.     while(!kbhit());
  27.    
  28.    
  29.     x = 500;
  30.     y = 500;
  31.     radius = 200;
  32.     setcolor(WHITE);
  33.     circle(x,y,radius);
  34.    
  35.     do{
  36.                        
  37.                        fflush(stdin);
  38.                        flecha = getch();
  39.                       if(flecha == 0);
  40.                      
  41.                       {        
  42.                                 getch();
  43.                                 if(flecha == KEY_UP)
  44.                                 {
  45.                                       fflush(stdin);
  46.                                       outtextxy(100,100,"Muevete para arriba");
  47.                                       setcolor(BLACK);
  48.                                       circle(x,y,radius);
  49.                                       y = y - 10;
  50.                                       delay(1);
  51.                                       setcolor(WHITE);
  52.                                       circle(x,y,radius);
  53.                                       fflush(stdin);
  54.                                 }
  55.                                 fflush(stdin);
  56.                                 getch();      
  57.                                       if(flecha == KEY_DOWN)
  58.                                       {
  59.                                       outtextxy(200,200,"Muevete hacia abajo");
  60.                                       setcolor(BLACK);
  61.                                       circle(x,y,radius);
  62.                                       fflush(stdin);
  63.                                       y = y + 10;
  64.                                       setcolor(WHITE);
  65.                                       circle(x,y,radius);
  66.                                       }
  67.                                       fflush(stdin);
  68.                                       getch();
  69.                                       if(flecha == KEY_LEFT)
  70.                                       {
  71.                                       setcolor(BLACK);
  72.                                       circle(x,y,radius);
  73.                                       x = x - 10;
  74.                                       setcolor(WHITE);
  75.                                       circle(x,y,radius);
  76.                                       }
  77.                                       fflush(stdin);
  78.                                       getch();
  79.                                        if(flecha == KEY_RIGHT)
  80.                                         {
  81.                                       setcolor(BLACK);
  82.                                       circle(x,y,radius);
  83.                                       x = x + 10;
  84.                                       setcolor(WHITE);
  85.                                       circle(x,y,radius);
  86.                                       }
  87.                                       fflush(stdin);
  88.                                       getch();
  89.                      
  90.                       }
  91.                      
  92. }while(getch()!=KEY_END);
  93. while(!kbhit());
  94. closegraph();
  95. return 0;
  96. }


saludos
  #4 (permalink)  
Antiguo 24/08/2012, 07:51
 
Fecha de Ingreso: agosto-2012
Mensajes: 94
Antigüedad: 12 años, 3 meses
Puntos: 7
Respuesta: Mover un circulo con Winbgim (Problema)

ahhhhhhhh, ahi me anduvo, sere tonto, jeje.

Muchisimas gracias, estoy por empezar a hacer un juegito de plataformas, y esto es basico, ya saben, mover algo con las teclas, (mario brothers, Snake, algo por el estilo).

Lo que si, me gustaria saber porque es tan lento. En esta compu yo hago andar juegitos que tienen que hacer mucho mas que solo mover un circulo (Half Life, Counter Strike, etc), y para mover el circulo le toma unos milisegundos, son realmente poquitos, pero mis ojos lo notan, o sea, no es lo suficientemente rapido.

Porque?

Acaso C no es un lenguaje muy rapido?

Che, y porque no hay que usar FFLUSH(STDIN)? Como borro el buffer de teclado?

Saludos

EDITO: Despues de leer un rato sobre FFLUSH(STDIN), y despues de curarme de la patada psicologica, jeje, ya se que no debo usarlo, y mas o menos entiendo porque, jeje.

Pero ahora, tengo otro problema. He quitado todos los FFLUSH(STDIN), y los he reemplazado por

Cita:
while(getchar()!='\n');
Pero ahora directamente no anda.

Dejo el codigo completo, con las ediciones listas. He revisado la logica del codigo, al menos de forma visual, (aunque deberia diagramarlo completo, aunque ya lo hice antes del FFlush, ahora he cambiado un poquito la logica, no veo alguna razon por la cual no funciona.

Dejo el Code.

Cita:
#include <winbgim.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdint.h>
#include <string.h>
#include <conio.h>
#define KEY_UP 72
#define KEY_DOWN 80
#define KEY_LEFT 75
#define KEY_RIGHT 77


int main()
{
int x, y, radius;
char flecha;
initwindow(1024,768);
settextstyle(0,0,2);
setcolor(COLOR(200,240,45));
outtextxy(200,300,"Mover un circulo");
outtextxy(200,400,"Pulse una tecla para continuar...");
while(!kbhit());
setcolor(BLACK);
outtextxy(200,300,"Mover un circulo");
outtextxy(200,400,"Pulse una tecla para continuar...");

outtextxy(400,400,"Para mover el circulo, use las flechas. Para finalizar, presione la tecla Fin");
outtextxy(400,500,"Presione una tecla para continuar");
while(!kbhit());


x = 500;
y = 500;
radius = 200;
setcolor(WHITE);
circle(x,y,radius);

do{

while(getchar()!='\n');
flecha = getch();
getch();
if(flecha == KEY_UP)
{
setcolor(BLACK);
circle(x,y,radius);
y = y - 10;
setcolor(WHITE);
circle(x,y,radius);
}


if(flecha == KEY_DOWN)
{

setcolor(BLACK);
circle(x,y,radius);
y = y + 10;
setcolor(WHITE);
circle(x,y,radius);
}

if(flecha == KEY_LEFT)
{
setcolor(BLACK);
circle(x,y,radius);
x = x - 10;
setcolor(WHITE);
circle(x,y,radius);
}

if(flecha == KEY_RIGHT)
{
setcolor(BLACK);
circle(x,y,radius);
x = x + 10;
setcolor(WHITE);
circle(x,y,radius);
}



}while(getch()!=KEY_END);
while(!kbhit());
closegraph();
return 0;
}




Última edición por harryarcoiris; 24/08/2012 a las 12:47
  #5 (permalink)  
Antiguo 27/08/2012, 10:34
Avatar de L3m0n  
Fecha de Ingreso: diciembre-2011
Mensajes: 219
Antigüedad: 12 años, 10 meses
Puntos: 46
Respuesta: Mover un circulo con Winbgim (Problema)

Y una pregunta, para hacer todo esto porque no te miras alguna libreria grafica que tambien tenga control del input como SDL. Yo he hecho algunas cosas con ella y es muy buena y te ahrraras todos estos problemas de inputs.

Saludos.
  #6 (permalink)  
Antiguo 28/08/2012, 11:57
 
Fecha de Ingreso: agosto-2012
Mensajes: 94
Antigüedad: 12 años, 3 meses
Puntos: 7
Respuesta: Mover un circulo con Winbgim (Problema)

Si, ya la descargue, alguien tiene un buen tutorial? (No importa si esta en ingles, pero de preferencia, español)

Etiquetas: circulo, int, programa, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:17.