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

¡Es muy complicado hacer esto en C?

Estas en el tema de ¡Es muy complicado hacer esto en C? en el foro de C/C++ en Foros del Web. Gola amigo. Soy una persona que está aprendiendo algo de C sobre la marcha" programando pequeñas tonterías como modo de práctica. Uso Turbo C++ 3.0 ...
  #1 (permalink)  
Antiguo 13/05/2013, 12:09
 
Fecha de Ingreso: mayo-2013
Ubicación: Bella Vista, Buenos Aires
Mensajes: 4
Antigüedad: 11 años
Puntos: 0
Pregunta ¡Es muy complicado hacer esto en C?

Gola amigo.
Soy una persona que está aprendiendo algo de C sobre la marcha" programando pequeñas tonterías como modo de práctica. Uso Turbo C++ 3.0 corriendolo en DOSBOX y Dev C++ usando la librería que emula las funciones del antiguo conio.h llamada conio2.h.
Estoy empezando con crear sencillos menúes de opciones. Un ejemplo:

#include<stdio.h>
#include<conio2.h>
int main(void)
{
char opcion;
do{
clrscr();
gotoxy(20,2);printf("***MENU TONTO***");
gotoxy(1,5);printf("1- Ver como me llamo");
gotoxy(1,6);printf("2- Mi opinion acerca de los pedofilos");
gotoxy(1,7);printf("3- Salir");
gotoxy(20,20);printf("PRESIONE EL NUMERO INDICADO EN LA OPCION...");
opcion=getch();
switch(opcion)
{
case '1':
clrscr();
printf("Yo me llamo Nicolas");
getch();
break;
case '2':
clrscr();
printf("Esa gente es vil");
getch();
break;

}
}while(opcion!='3');
clrscr();
printf("¡¡¡HASTA LA VISTA, BABY!!!");
getch();
}

En este tonto menú de práctica el usuario escoge la opción sencillamente presionando el número indicado en dicha opción, ahora lo que yo desearía hacer es ese mismo tonto menú, pero en el que el usuario use las flechas de los cursores para "resaltar" la opción a elegir y después deba presionar Enter para elegir la opción resaltada. Algunas pistas tengo de cómo lograrlo. He visto el código de las teclas de los cursores:
Arriba: 0 72
Abajo: 0 80
Izquierda: 0 75
Derecha: 0 77
Esc: 27
Enter: 13
y creo que lo que hay que usar para resaltar la opción son las funciones textbackground y textcolor respectivamente. Me parece que otra forma más sencilla de leer las teclas de los cursores es: Supongamos esto:

char tecla;
obviamente despues colocar: tecla=getch();
Y referirse a los cursores de esta manera:
if(tecla=='M') Me refiero a la tecla Arriba
if(tecla=='K') Me refiero a la tecla Abajo
if(tecla=='H') Me refiero a la tecla Izquierda
if(tecla=='P') Me refiero a la tecla Derecha

El tema es que yo podría empezar resaltando con textbackground y textcolor la primera opción, pero ¿Cómo hago para que al pulsar hacia abajo ese textbackground y textcolor resalte la otra opción y deje sin resaltar la opción anterior?. Quiero crear exactamente ese tonto menú, pero usando ese otro sistema de selección mencionado. Ayuda, please. Saludos. Nico
  #2 (permalink)  
Antiguo 13/05/2013, 15:22
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 9 meses
Puntos: 28
Respuesta: ¡Es muy complicado hacer esto en C?

Aver, si estás aprendiendo por tu cuenta partes de bases equivocadas.

Turbo C es de hace 10 años, deberías usar IDE más actualizados. Personalmente te recomiendo Codeblocks:
http://www.codeblocks.org/downloads/26

(la versión que incluye Mingw, que es el compilador).

Por otro lado, las conio es la librería más inutil que encontraras. No hay ninguna cosa de las conio que no puedan ser reemplazadas por cosas de la librería estándar, y la mayor ventaja que tiene la librería estándar esque es multiplataforma (el mismo código te vale para Windows, Linux y Mac). Es una buena costumbre de programación hacer los códigos multi-plataforma.

En cuanto a lo que comentas, la idea sería pintar cada línea de color blanco y la seleccionada de amarillo. Si pulsas el botón de abajo, se reescribe la línea de color blanco y se reescribe la línea de abajo de color amarillo.

Básicamente, lo que estoy diciendo esque escribas encima del texto. Si está resaltado su color será amarillo y si no lo está será blanco.
  #3 (permalink)  
Antiguo 14/05/2013, 16:06
 
Fecha de Ingreso: mayo-2013
Ubicación: Bella Vista, Buenos Aires
Mensajes: 4
Antigüedad: 11 años
Puntos: 0
Respuesta: ¡Es muy complicado hacer esto en C?

Miren: Entiendo que voy por un camino equivocado usar el antiguo Turbo C++ 3.0. Experimentando y experimentando logré hacer ese menú, pero con muchísimo código y bastante repetitivo:

#include<stdio.h>
#include<conio.h>
#include<dos.h>
void menu(void)
{
int opcion=1;
char tecla;
_setcursortype(_NOCURSOR);
textbackground(BLUE);
textcolor(WHITE);
clrscr();

gotoxy(30,2);cprintf("***OPCIONES***");
textbackground(RED);
textcolor(YELLOW);
gotoxy(10,6);cprintf("El planeta m*s cercano al sol");
textbackground(BLUE);
textcolor(WHITE);
gotoxy(10,7);cprintf("El planeta m*s lejano al Sol");
gotoxy(10,8);cprintf("Nombre de nuestra galaxia");
gotoxy(10,9);cprintf("Salir");
gotoxy(10,20);cprintf("ARRIBA/ABAJO: RESALTAR OPCION, <ENTER>: SELECCIONAR...");
do{
tecla=getch();

if(tecla==72) opcion--;
if(tecla==80) opcion++;
if(opcion>4) opcion=1;
if(opcion<1) opcion=4;
switch(opcion)
{
case 1:
textbackground(RED);
textcolor(YELLOW);
gotoxy(10,6);cprintf("El planeta m*s cercano al sol");
textbackground(BLUE);
textcolor(WHITE);
gotoxy(10,7);cprintf("El planeta m*s lejano al Sol");
gotoxy(10,8);cprintf("Nombre de nuestra galaxia");
gotoxy(10,9);cprintf("Salir");
break;
case 2:
gotoxy(10,6);cprintf("El planeta m*s cercano al sol");
textbackground(RED);
textcolor(YELLOW);
gotoxy(10,7);cprintf("El planeta m*s lejano al Sol");
textbackground(BLUE);
textcolor(WHITE);
gotoxy(10,8);cprintf("Nombre de nuestra galaxia");
gotoxy(10,9);cprintf("Salir");
break;
case 3:
textbackground(BLUE);
textcolor(WHITE);
gotoxy(10,6);cprintf("El planeta m*s cercano al sol");
gotoxy(10,7);cprintf("El planeta m*s lejano al Sol");
textbackground(RED);
textcolor(YELLOW);
gotoxy(10,8);cprintf("Nombre de nuestra galaxia");
textbackground(BLUE);
textcolor(WHITE);
gotoxy(10,9);cprintf("Salir");
break;
case 4:
textbackground(BLUE);
textcolor(WHITE);
gotoxy(10,6);cprintf("El planeta m*s cercano al sol");
gotoxy(10,7);cprintf("El planeta m*s lejano al Sol");
gotoxy(10,8);cprintf("Nombre de nuestra galaxia");
textbackground(RED);
textcolor(YELLOW);
gotoxy(10,9);cprintf("Salir");

break;
}
}while(tecla!=13);
switch(opcion)
{
case 1:
textbackground(WHITE);
textcolor(BLUE);
clrscr();
cprintf("El planeta m*s cercano al sol es J£piter...");
getch();
clrscr();
menu();
break;
case 2:
textbackground(0);
textcolor(YELLOW);
clrscr();
cprintf("El planeta m*s lejano al sol es Plut¢n...");
getch();
clrscr();
menu();
break;
case 3:
textbackground(RED);
textcolor(GREEN);
clrscr();
cprintf("Nuestra galaxia se llama V¡a L*ctea...");
getch();
clrscr();
menu();
break;
case 4:
_setcursortype(_NORMALCURSOR);
textbackground(0);
textcolor(WHITE);
clrscr();
printf("***HASTA LA VISTA, BABY!!!");
getch();
clrscr();
}
}
void main(void)
{
menu();
}

Lo bueno de conio.h es que están las funciones gotoxy (Para mí importantísima) y las funciones textbackground y textcolor (Yeah!, pude colorear las selecciones). Ahora si hay que hacer un programa que tenga varios menúes de estos. ¡Zas!. Igual tengo fé a que debe haber maneras más simplificadas de lograr esto y con menos código. Si tienen algunas sugerencias, díganmelas. Saludos y gracias. Nico

Etiquetas: funcion, int, programa, usuario
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 09:52.