/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Crear un asterisco que se mueva en la pantalla

 
      Índice del Foro elrincondelc.com -> C/C++ en General
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Eduard0l



Registrado: 13 Oct 2008
Mensajes: 9

MensajePublicado: 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)

MensajePublicado: 16/10/2008 4:04 pm
Título:

Hola como andas, fijate probando este código:

Código:
#include <conio.h>
#include <stdio.h>

/* 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;
   
    do{
        clrscr();
        gotoxy(x,y);
        printf("*");
        c=getch();
        switch(c)
        {
            case ARR:
                y-=1;
                if(y<1)y=1;
                break;
            case ABJ:
                y+=1;
                break;
            case IZQ:
                x-=1;
                if(x<1)x=1;
                break;
            case DER:
                x+=1;
                if(x>80)x=80;
                break;
        }
    }while(c!='0'); //El programa termina cuando se presiona 0
   
    return 0;
}


Si hay alguna parte que no entiendas escribi Very Happy .

Un Saludo!
_________________
Divida sus archivos con facilidad usando File Breaker Smile

"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

MensajePublicado: 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)

MensajePublicado: 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 Smile

"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

MensajePublicado: 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. Embarassed
_________________
the truth is out there
Volver arriba
eagleoneraptor



Registrado: 20 May 2008
Mensajes: 118
Ubicación: Buenos Aires(Argentina)

MensajePublicado: 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 Smile

"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)

MensajePublicado: 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

MensajePublicado: 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)

MensajePublicado: 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 Very Happy .
Suerte.
Un Saludo!
_________________
Divida sus archivos con facilidad usando File Breaker Smile

"Aquel que hace una bestia de si mismo se libra del dolor de ser un hombre". Dr. Hunter S. Thompson
Volver arriba
      Índice del Foro elrincondelc.com -> C/C++ en General
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com