| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
Eduard0l
Registrado: 13 Oct 2008 Mensajes: 9
| Publicado: 16/10/2008 2:43 pm | | | Título: Crear un asterisco que se mueva en la pantalla |
| Saludos
Quisiera que me ayuden porfavor, soy principiante en C++ y necesito crear un asterisco(o cualquier otro simbolo) que se mueva en la pantalla con las teclas direccionales(arriba, abajo, derecha, izuiqerda)
Tengo que hacerlo en Borland c++ builder 6.0
Agradeceria mucho su ayuda. _________________ the truth is out there |
| | Volver arriba | |  | eagleoneraptor
Registrado: 20 May 2008 Mensajes: 118 Ubicación: Buenos Aires(Argentina)
| | | Volver arriba | |  | Eduard0l
Registrado: 13 Oct 2008 Mensajes: 9
| Publicado: 16/10/2008 6:18 pm | | | Título: |
| Muchas gracias man me fue de muchisima ayuda, ahora si no fuera mucho pedir quisiera pedirte otra cosa:
Envez de que sea un asterisco salga en pantalla una flechita indicando la direccion a donde va.
Esta es la flecha :
Te lo agradeceria mucho. _________________ the truth is out there |
| | Volver arriba | |  | | eagleoneraptor
Registrado: 20 May 2008 Mensajes: 118 Ubicación: Buenos Aires(Argentina)
| Publicado: 17/10/2008 10:25 am | | | Título: |
| No es problema, solo unos sencillos cambios:
| Código: | #include <conio.h> #include <iostream> using namespace std;
/* Teclas de codigo extendido */ #define ARR 72 #define ABJ 80 #define DER 77 #define IZQ 75
int main() { int x=1,y=1; int c; char AMostrar=16; do{ clrscr(); gotoxy(x,y); printf("%c",AMostrar); c=getch(); switch(c) { case ARR: y-=1; if(y<1)y=1; AMostrar=30; break; case ABJ: y+=1; AMostrar=31; break; case IZQ: x-=1; if(x<1)x=1; AMostrar=17; break; case DER: x+=1; if(x>80)x=80; AMostrar=16; break; } }while(c!='0'); //El programa termina cuando se presiona 0 return 0; }
|
Espero que te sirva. Un Saludo! _________________ Divida sus archivos con facilidad usando File Breaker 
"Aquel que hace una bestia de si mismo se libra del dolor de ser un hombre". Dr. Hunter S. Thompson |
| | Volver arriba | |  | Eduard0l
Registrado: 13 Oct 2008 Mensajes: 9
| Publicado: 17/10/2008 4:08 pm | | | Título: |
| Brother eres lo maximo, no sabes cuanto agradesco tu ayuda.
Ahora si no fuera demasiado pedir quisiera saber si se puede hacer que la flecha se mueva sola con solo teclear una vez, sin necesidad de estar presionando el boton por cada espacio que avanza, como la serpiente del juego snake.
Muchisimas gracias.  _________________ the truth is out there |
| | Volver arriba | |  | eagleoneraptor
Registrado: 20 May 2008 Mensajes: 118 Ubicación: Buenos Aires(Argentina)
| Publicado: 18/10/2008 3:32 pm | | | Título: |
| Aquí cambia un poco la historia, lo que tendrías que hacer (o por lo menos lo que yo haría), serían 2 hilos, o sea, 2 procesos que se ejecuten al mismo tiempo, en el mismo programa, uno que aguarde la presión de una tecla como en el programa que ya viste, y otro que vaya dibujando el caracter en intervalos de tiempo, estos 2 hilos tendrán que compartir una variable, que será la dirección de la vibora, para que lo entiendas un poco mejor aquí te paso un ejemplo usando el sistema de hilos del API de Windows, pero no se si se podra usar en Borland:
| Código: | #include <conio.h> #include <stdion.h> #include <windows.h>
//Teclas de codigo extendido #define ARR 72 #define ABJ 80 #define DER 77 #define IZQ 75
int DireccionActual=ABJ; bool EnEjecucion=true;
DWORD WINAPI Hilo_Tecla(void *data) { int c; while(EnEjecucion){ c=getch(); if(c==ARR||c==ABJ||c==DER||c==IZQ) DireccionActual=c; if(c=='0') EnEjecucion=false; } return 1; }
DWORD WINAPI Hilo_Movimiento(void *data) { int x=1,y=1; char AMostrar; while(EnEjecucion){ clrscr(); switch(DireccionActual){ case ARR: y-=1; if(y<1)y=1; AMostrar=30; break; case ABJ: y+=1; AMostrar=31; break; case IZQ: x-=1; if(x<1)x=1; AMostrar=17; break; case DER: x+=1; if(x>80)x=80; AMostrar=16; break; } gotoxy(x,y); printf("%c",AMostrar); Sleep(300); } return 1; } int main() { HANDLE hilotecla,hilomovimiento; hilotecla=CreateThread(NULL,0,Hilo_Tecla,NULL,0,NULL); hilomovimiento=CreateThread(NULL,0,Hilo_Movimiento,NULL,0,NULL); DWORD Valor_Hilo; do{ GetExitCodeThread(hilomovimiento,&Valor_Hilo); }while(Valor_Hilo==STILL_ACTIVE); //El programa sigue en ejecución mientras el hilo de dibujado este activo. CloseHandle(hilotecla); CloseHandle(hilomovimiento); return 0; }
|
Ah, y ya que estoy quisiera hacer una pregunta: ¿Hay funciones de C/C++ estandar para la creación de hilos?
Un Saludo! _________________ Divida sus archivos con facilidad usando File Breaker 
"Aquel que hace una bestia de si mismo se libra del dolor de ser un hombre". Dr. Hunter S. Thompson |
| | Volver arriba | |  | | cheroky
Registrado: 22 Sep 2005 Mensajes: 1905 Ubicación: Valladolid (España)
| Publicado: 18/10/2008 4:08 pm | | | Título: |
| | eagleoneraptor escribió: | Ah, y ya que estoy quisiera hacer una pregunta: ¿Hay funciones de C/C++ estandar para la creación de hilos? |
De momento no, habrá que esperar si incluyen boost en el próximo estándar de C++.
S2. _________________ A good code is just read it, no comment.
-Alan Cox-
|
| | Volver arriba | |  | Eduard0l
Registrado: 13 Oct 2008 Mensajes: 9
| Publicado: 01/11/2008 1:24 pm | | | Título: |
| Brother esta perfecto eso es lo que quiero peor el problema esque estoy estdiando programacion 1 y no puedo usar esos ultimos comandos que has usado(aparte no entendi nada xD), no hay otra forma de hacerlo? me dijieorn que tengo que usar las funciones kbhit, Sleep,
Gracias de antemano _________________ the truth is out there |
| | Volver arriba | |  | eagleoneraptor
Registrado: 20 May 2008 Mensajes: 118 Ubicación: Buenos Aires(Argentina)
| Publicado: 03/11/2008 8:04 am | | | Título: |
| Bueno claro que hay otra forma, infinitas, todo depende de como se explaye el programador, aquí te paso el código según las exigencias del ejercicio (que es muy parecido al primero), lo que pasa es que desconocía la funcionalidad de la función kbhit, el código es mucho mas sencillo, igual le puse unos cuantos comentarios para que no te queden dudas y se pueda explicar.
| Código: | #include <conio.h> #include <stdio.h> #include <windows.h>
//Teclas de codigo extendido #define ARR 72 #define ABJ 80 #define DER 77 #define IZQ 75
int main() { //Posicion de la flechita int x=1,y=1; //Tecla pulsada int c; //Direccion de la flecha, inicialmente a la derecha int DireccionActual=DER; //Caracter de la flechita a mostrar segun el ASCII char AMostrar=16; //Inicia el bucle principal do{ //Borramos la flecha clrscr(); //La dibujamos en la posicion correspondiente gotoxy(x,y); printf("%c",AMostrar); //Si hubo una tecla pulsada... if(kbhit()){ //...se revisa cual fue c=getch(); //Si se pulso alguna flecha del teclado se actualiza la dirección if(c==ARR||c==ABJ||c==DER||c==IZQ) DireccionActual=c; } //Movemos la flecha según la direccion actual //También actualizamos AMostrar para que la flecha cambie de forma switch(DireccionActual) { case ARR: y-=1; if(y<1)y=1; AMostrar=30; break; case ABJ: y+=1; AMostrar=31; break; case IZQ: x-=1; if(x<1)x=1; AMostrar=17; break; case DER: x+=1; if(x>80)x=80; AMostrar=16; break; } //Esperamos 100 milisegundos Sleep(100); }while(c!='0'); //El programa termina cuando se presiona '0' return 0; } |
Como veras es muy parecido al 2º código posteado, lo único que se agrega es la variable DireccionActual y el uso de la función kbhit
Espero que esto si te sirva . Suerte. Un Saludo! _________________ Divida sus archivos con facilidad usando File Breaker 
"Aquel que hace una bestia de si mismo se libra del dolor de ser un hombre". Dr. Hunter S. Thompson |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |