/
Inicio :: Foros

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

Hacer un programa de consola que mueva una letra

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
serpastor



Registrado: 05 Oct 2012
Mensajes: 1

MensajePublicado: 05/10/2012 9:44 am
Título: Hacer un programa de consola que mueva una letra

Tengo varios problemas, y quiero enumerarlos pero también ir por partes Cool
Problema principal: Quiero aprender acerca del manejo de gráficos en c/c++ para desarrollar, más que todo juegos. Quiero hacer un juego de culebrita. Primero en la consola y luego en interfaz usando GTK.
Pero, como dije, hay que ir por partes, y en este momento no sé nada ni de GTK ni de OpenGL, ni de nada. Sé a duras penas imprimir en la consola, y con eso debo lidiar justo ahora.

Tengo un problema por ahora: Cómo hago para que el C escriba donde yo le digo y que escriba lo que quiero. Logré hacer una especie de Timer con usleep() de unistd.h, pero siempre que le digo que me escriba no escribe nada. Se queda pegado esperando a que acabe el programa.
Entonces, yo espero que escriba 1, 2, 3, 4, 5, ... , 20 al principio de la linea no escribe nada, y se queda pegado....

Quisiera que me ayudaran con eso, y si pueden con un tuto donde vea cómo desarrollar un juego pequeño en c/c++ para coger cancha y mandármele al juego de culebrita Wink

Adjunto el código. Gracias por su atención

Código:

#include <stdio.h>
#include <time.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
    int cuenta=0;
    for(int i=0;i<20;i++)
    {

    printf("%d\r",cuenta);
    cuenta++;
    usleep(100000);
    }
}



Nota: Estoy usando Debian GNU/Linux con el compilador GCC
Nota2: Gracias por mover el tema a donde correspondía Cool
Volver arriba
Sorancio



Registrado: 29 May 2009
Mensajes: 1157
Ubicación: España

MensajePublicado: 05/10/2012 10:55 am
Título:

Deberías echar un vistazo a ncurses. Es una librería de Linux para hacer "aplicaciones con interfaz rica" en consola. De alguna forma interesante, tiene soporte para coloreado, botones cutres y demás parafernalia.

http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/helloworld.html

Mucha suerte. Cualquier duda para eso estamos.
_________________
Mi página web (en inglés):
Volver arriba
digies



Registrado: 18 Nov 2005
Mensajes: 1000
Ubicación: Blumenau (Br)

MensajePublicado: 26/12/2012 6:21 pm
Título:

Hola. Contesto esta pregunta porque recién la veo.

serpastor, antes de pasarte de lleno a la programación gráfica en C con GTK+, primero aprende bien el C Estándar y el uso de funciones implementadas en los headers que te brinda -en tu caso- GNU/Linux.

En el caso del código que expones, no necesitas usar la cabecera time.h porque ya tienes unistd de *NIX, tampoco string.h porque no usas sus funciones.

La función printf() no escribe directamente en la pantalla (salida estándar) sino en una memoria intermedia llamada buffer. El contenido (cadena) de printf() envía a la pantalla cuando recién el buffer se llena o cuando encuentra el carécter de nueva línea '\n'. En tu caso debes usar la función fflush(stdout) para que éste envíe a la salida estándar todo lo que hay en el buffer.

Código:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int cuenta = 0;
    int i;

    for (i = 0; i < 20; i++)
    {
        printf("%d\r", cuenta++);
        fflush(stdout);
        usleep(100000);
    }

    return EXIT_SUCCESS;
}

Supongo que lo que tu quieres es hacer algo como una barra de progreso, entonces como dijo Sorancio, utiliza la biblioteca NCurses. Ejemplo:

Código:
#include <ncurses.h>
#include <stdlib.h>

void printporc(int n);

int main(void)
{
    int i;

    initscr();

    curs_set(0);

    addstr("BARRA DE PROGRESO:\n\n");
    for (i = 0; i < 101; i++)
    {
        printporc(i);
        napms(200);
    }
    addstr("\n\nCOMPLETO.\nPulse una tecla para finalizar: ");
    refresh();
    curs_set(1);
    getch();

    endwin();

    return EXIT_SUCCESS;
}

void printporc(int n)
{
    int av;

    addstr("\r");
    for (av = 0; av < 34; av++)
    {
        addch(ACS_CKBOARD);
        if (av == 16 && n != 100)
            printw("%02d%%", n);
    }
    addstr("\r");
    for (av = 0; av < n/3; av++)
    {
        addch(ACS_BLOCK);
        if (av == 16)
            printw("%02d%%", n);
    }
    refresh();

    return;
}


Un saludo
_________________
With enough eyes, all bugs are easy to find.

Eric S. Raymond
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
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