(Proyecto) Librería minihack - Herramientas para desarrollar

Iniciado por cin.get();, 9 Julio 2013, 15:27 PM

0 Miembros y 1 Visitante están viendo este tema.

cin.get();

Nueva versión: http://foro.elhacker.net/programacion_cc/herramientas_para_c_libreria_minihack_10-t394454.0.html


Hola a todos, aquí les presento una librería que estoy desarrollando desde Linux, aunque luego probaré la probaré en Windows ;)


MINIHACK es una mini-librería para las plataformas Windows y Linux con múltiples herramientas para el desarrollo de software en el lenguaje de programación C++.

En un principio el objetivo era desarrollar una alternativa a la librería conio.h la cual incluyen algunos compiladores de C/C++ para Windows.

Actualmente contiene herramientas muy simples para el desarrollo de software sin entorno gráfico, ofreciendo una filosofía y estructura totalmente diferente la cual facilita el desarrollo de software, además de que el desarrollo será mucho más rápido.
Si bien existen más y mejores alternativas que ofrecen poder hacer un entorno más amigable con el usuario, algunas veces el proyecto a realizar es muy simple como para usar esos paquetes.

Novedades de la última versión

   Se define la dirección de las siguientes teclas: ARRIBA, ABAJO, IZQUIERDA, DERECHA y ESCAPE.
   La función vgetch() ahora detecta si se ha pulsado tecla antes de intentarla obtenerla. Logrando así no pausar el programa esperando que se pulse una tecla. (Recordar que no se necesita dar enter).
   Función vkbhit(). Retorna true si se ha presionado una tecla.


Características
Minihack se basa principalmente en las siguientes características:

Claridad. Existen gran cantidad de utilidades para ayudar a el desarrollo de software, la mayoría de estos paquetes ayudan a facilitar el desarrollo de algunas funciones, pero el código queda algo extenso y difícil de entender. Minihack intenta obtener las mejores funciones con la mayor simplicidad y funcionalidad.
Eficiencia. Otro punto importante a tomar en cuenta es la eficiencia, no sólo lograr que el software haga lo que se quiere si no también que el desarrollo del mismo sea en el menor tiempo.
Portabilidad. Para un desarrollador resulta más fácil crear un programa multiplataforma, que ese mismo código que escribe para Linux sirva para los demás sistemas, cosa que minihack domina, el código escrito funciona muy bien en diferentes sistemas.
Velocidad. Cuando nos referimos a velocidad, no sólo es en el desarrollo del programa, si no que el ejecutable funcione a una buena velocidad y de manera estable.

¿Cómo funciona?
Minihack funciona de la siguiente manera, todo lo que se quiera pintar en pantalla, ya sea un rectángulo u otro elemento se almacena en una matriz de caracteres, luego de pintar lo que se quiera, es necesario llamar a la función vrefresca() para mostrar en pantalla todo lo que se ha pintado, para borrar toda esta matriz de caracteres simplemente se llama a la función vlimpia().

Nota: si el contenido en ventana no se muestra de la forma correcta, deberás cambiar en la librería minihack los valores vancho y valto que representan el tamaño de la ventana.


Funciones
A continuación se explica con claridad cada función de la librería.

void vlimpia()

   Limpia nuestra ventana para imprimir nuevos objetos.

void vrefresca()

   Luego de situar objetos en nuestro programa hay que mostrarlos, esta función los muestra.

bool vsucia()

   Regresa un valor true o false indicando si hay objetos en nuestra ventana.

void vpunto(int x, int y)

   Dibuja un simple punto.

void vrectangulo(int x1, int y1, int x2, int y2)

   Dibuja el marco de un rectángulo en las coordenadas indicadas.

void vrectangulo_lleno(int x1, int y1, int x2, int y2)

   Dibuja un rectángulo relleno en las coordenadas indicadas.

void vstring(int x, int y, string texto)

   Dibuja texto en las coordenadas indicadas.

void vgetch()   ¡Actualizado!

   Lee una tecla del teclado sin la necesidad de presionar la tecla enter (parecido a getch).

void vespera_seg(int seg)

   Detiene el programa una cantidad de segundos determinados.

void vespera_micro(int micro)

   Detiene el programa una cantidad de microsegundos determinados.

int vrand(int num_min, int num_max)

   Regresa un valor aleatorio entre un número mínimo y un número máximo.

void vrand_s()

   Cambia la semilla aleatoria, se recomienda llamar esta función al inicio de los programas que usen la función vrand.


int vkbhit() ¡Nuevo!

   Retorna true si se ha presionado una tecla.

Teclas
Minihack tiene definidas las direcciónes de presión de las siguientes teclas:
ESCAPE, ARRIBA, ABAJO, IZQUIERDA, DERECHA

Basta con escribir el nombre de alguna tecla anterior en mayúscula y listo.


IMPORTANTE: Para no poner tantos links en este post, mejor les dejo la web oficial del proyecto, donde también existen cursos, y un foro.
http://www.codigo-hack.tk/p/libreria-minihack.html


eferion

Es un buen comienzo.

No soy un fan de las aplicaciones de consola, por lo que no te sabría valorar la utilidad de tu api, pero todo lo que sea abstraer al programador de la programación a bajo nivel ( si es con cierto sentido ) siempre es bien recibido.

Consejo: La api, o la creas con funciones en español o la creas con funciones en inglés... mezclar ambos idiomas no suele ser intuitivo cuando el sistema crece.

Consejo 2: Creo que si la api crece sería más manejable y eficiente implementar las funciones para que acepten estructuras para el caso, por ejemplo, de puntos y rectángulos. Soy partidario de pasar una estructura como referencia a tener que meter 4 parámetros en una función.

Consejo 3: Desde mi punto de vista falta al menos una función que te devuelva los límites de la pantalla.

Un saludo.

amchacon

¿Todo usando funciones estándares? Bueno trabajo  ;-)

En librerías más grandes convendría compilarla en un .a y dejar el header con los prototipos ;).
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

cin.get();

Cita de: amchacon en  9 Julio 2013, 15:58 PM
¿Todo usando funciones estándares? Bueno trabajo  ;-)

En librerías más grandes convendría compilarla en un .a y dejar el header con los prototipos ;).
jeje muchas gracias se puede lo que se hace

cin.get();

Cita de: eferion en  9 Julio 2013, 15:45 PM
Es un buen comienzo.

No soy un fan de las aplicaciones de consola, por lo que no te sabría valorar la utilidad de tu api, pero todo lo que sea abstraer al programador de la programación a bajo nivel ( si es con cierto sentido ) siempre es bien recibido.

Consejo: La api, o la creas con funciones en español o la creas con funciones en inglés... mezclar ambos idiomas no suele ser intuitivo cuando el sistema crece.

Consejo 2: Creo que si la api crece sería más manejable y eficiente implementar las funciones para que acepten estructuras para el caso, por ejemplo, de puntos y rectángulos. Soy partidario de pasar una estructura como referencia a tener que meter 4 parámetros en una función.

Consejo 3: Desde mi punto de vista falta al menos una función que te devuelva los límites de la pantalla.

Un saludo.
muy buenos tus consejos, muchas gracias, y para los limites de pantalla esta definido vancho y valto

eferion

Cita de: juan.valadez en  9 Julio 2013, 16:10 PM
muy buenos tus consejos, muchas gracias, y para los limites de pantalla esta definido vancho y valto

Esos no estaban en tu mensaje ;)

En ese caso retiro mi consejo 3.

Por cierto, a mi también me ha gustado eso de que intentas que sea multiplataforma.

cin.get();

Cita de: eferion en  9 Julio 2013, 16:20 PM
Esos no estaban en tu mensaje ;)

En ese caso retiro mi consejo 3.

Por cierto, a mi también me ha gustado eso de que intentas que sea multiplataforma.

jaja mucha razón, eso no lo agregué en la descripción, Saludos!

eferion

También he visto que la librería está pensada para ser utilizada con c++... no te sale más a cuenta en este caso agrupar las funciones y presentarlas encapsuladas en clases ??

creo que el manejo entonces sería muchísimo más intuitivo a la par de sencillo.

No se, se me ocurre quizas un código tal que:

Código (cpp) [Seleccionar]

ventana.Clean( );
ventana.DrawRect( rect1 );
ventana.DrawPoint( point1 );

random.NewSeed( );
int number = random.GetRandom( 0, 20 );


En vez de estar llamando una y otra vez a funciones inconexas.

cin.get();

Cita de: eferion en  9 Julio 2013, 16:56 PM
También he visto que la librería está pensada para ser utilizada con c++... no te sale más a cuenta en este caso agrupar las funciones y presentarlas encapsuladas en clases ??

creo que el manejo entonces sería muchísimo más intuitivo a la par de sencillo.

No se, se me ocurre quizas un código tal que:

Código (cpp) [Seleccionar]

ventana.Clean( );
ventana.DrawRect( rect1 );
ventana.DrawPoint( point1 );

random.NewSeed( );
int number = random.GetRandom( 0, 20 );


En vez de estar llamando una y otra vez a funciones inconexas.
ooo tienes mucha razón, en un principio pensé hacerla también para C no sólo para C++ y por eso no lo hice así, pero seguiré tu consejo, en la próxima versión tendrá muchos cambios xD

eferion

Si pensabas hacerla compatible con c la cagaste al usar la clase string en la interfaz ...

También puedes revertirlo y usar un array de char en vez de la clase string