Programando un juego

gixgg

Lanero Reconocido
14 Jul 2007
153
El proyecto que estoy realizando se llama "Wyrneh" y es un juego estilo Aventura/RPG de primera persona.

Lo estoy desarrollando en Dev-C++/Allegro. Inicialmente es un Port/Emulador del juego que ya había programado antes como pasatiempo en 4 versiones:

2 versiones completas en una Computadora de Bolsillo Casio FX-850P usando el lenguaje Basic.
1 version incompleta en una PDA Casio PV-S400 PLUS usando el lenguaje OWBasic
(El OWBasic es un lenguaje exclusivo de las Casio Pocket Viewers, más poderoso que el Basic y con una importante influencia del lenguaje C)
1 version incompleta en una Pocket PC iPaq RX-3115 usando el lenguaje C# .NET framework.

Nota: En las versiones incompletas sólo programé el engine gráfico, podía uno moverse por el mapa pero no había items, armas, enemigos, ni mision, ni nada que hacer.

Pero la idea es comenzar con el port que utiliza inicialmente gráficos 3D estáticos (por pantallazos) para desarrollarlo más adelante a un engine 3D real...Tengan en cuenta que aunque ya había programado antes, estoy empezando de cero en Dev-C++/Allegro pues ni sabía que existían. Pero ya llevo como una semana y se me ha hecho fácil.

El proyecto lo estoy desarrollado de la siguiente manera:

FASE1a Port/Emulador de la version PV-S400 PLUS traduciendo código OWBasic en C++
FASE1b Port/Emulador de la versión iPaq RX-3115 traduciendo código C# en C++
FASE2 Versión completamente nueva con las capacidades que brinda C++/Allegro
FASE3 Versión completamente nueva con engine 3D real.

El Port de la FX-850P no lo voy a realizar pues no tengo el código a la mano (lo tengo escrito en algún cuaderno pero quien sabe donde)

Tengan en cuenta que la FASE1a es extrictamente port/emulador de la PV-S400 PLUS...para que se den una idea...era una PDA con pantalla blanco y negro (como los celulares mas viejos) y con resolucion de 160x160 pixels. Esto para que juzguen los gráficos acorde a las capacidades de dicho sistema. Aqui les adelanto un pantallazo

wyrnehpv02.jpg

Toda la introducción al proyecto (algo extensa), capturas de pantalla y avances que voy logrando están publicados en el foro "Proyectos con Allegro" de la página de www.ennoiacreations.com.

Si tienen tiempo echenle un vistazo y me cuentan que les parece. Si alguien le suena interesante o les parece que amerita ir publicando avances y pantallazos aca en laneros me avisan.

Si alguien quiere unirse al proyecto, bienvenido. No necesariamente que sepa programar...pues pueden ir aportando otras cosas, por ejemplo:

1) Ideas para incluir en el juego.
2) Alguien bueno para el dibujo podría suministrar los sprites (personajes, items, armas, etc)
3) Alguien que sepa de musica y se le mida a crear el tema original (jeje, hasta ahora todas las versiones del juego han sido sin sonido)
4) Incluso hasta beta testers para probarlo en acción y dar opiniones.
5) Estoy previendo que los mapas puedan ser editados por fuera del programa en formato txt. E incluso más adelante podría crear un programa aparte como editor de mapas, de manera que cualquier persona pueda intervenir.

(NOTAS ESPECIALES, ACTUALIZACIONES O INFORMACION NUEVA)

Título oficial para la pantalla inicial:
wyrneh-piedra.jpg

Acuerdense de visitar el foro de www.ennoiacreations.com pues es donde voy publicando los avances
(Siempre coloco lo que voy logrando apenas puedo, aunque a veces tardo varios días).

El juego está completamente mejorado en la presentación gráfica (desde que publiqué este foro) pero todavía no he avanzado en el desarrollo de la aventura como tal (no items, no armas, no objetos ni mision, pero ya puede uno caminar por el mapa).

Pantalla inicial:
wyrneh-menu-ppal.jpg


El juego ahora soporta 15 resoluciones estándar (incluyendo HD720p y Full HD 1080i) y funciona en pantallas Normales o Widescreen :cool:
Fijense en la diferencia VGA(Normal) Vs WXGA+(Widescreen):
w640vs1280despues.jpg


Los gráficos de fondo son ahora renders en 3D. En primer pantallazo que coloqué, la PVS400 PLUS era una foto que descargué de internet.

Ahora usé la misma foto como textura en un render 3D. Para que lo vean mejor mirenlo en otro ángulo:

pv400render.jpg
 
Entré al link y me pareció muy bacana la versión del juego para Casio PV-S400.

Tengo unas preguntas :
- Cual es la licencia del juego? piensas volverlo libre?
- La versión de para Pocket PC corré en el emulador de Pocket PC?
 
jomunoz dijo:
Entré al link y me pareció muy bacana la versión del juego para Casio PV-S400.
Tengo unas preguntas :
- Cual es la licencia del juego? piensas volverlo libre?
- La versión de para Pocket PC corré en el emulador de Pocket PC?

Gracias por los comentarios y respecto a tus preguntas:

Bueno, la verdad no es un proyecto que tenga pensado como algo comercial, sólo lo vengo desarrollando como hobbie, por lo que estoy dispuesto a compartir el código fuente con los que estén interesados, ya sea para aportarle al juego o para cacharrearle algo al código. Lo que si me gustaría es ser algo selectivo con las personas a las que les comparta de manera que, todo persona que aporte, asi sea sólo una idea, pueda ser debidamente incluído en los créditos. Sería bueno convertirlo en Open Source, pero no tengo conocimientos muy claros de como se maneja el tema para que no se vuelva un despelote de versiones por ahí. Además también leí el foro de Open Source Laneros, donde pretendían elaborar un software de Administración para Cafes Internet, y me dí cuenta que la idea no despegó. De todas maneras estoy abierto a sugerencias.

La versión de Pocket PC está programada en C# de .NET Compact Framework que compila aplicaciones .exe para Windows Mobile así que debería funcionar en un emulador de Pocket PC. El problema es que el programa tomaba los gráficos de una carpeta que estaba grabada en la tarjeta SD:

Así está definida la ruta dentro del programa:
@"\SD Card\wyrnehbmp"

y no sé como se manejaría esto desde el emulador. Pero además esa es una version incompleta y no tengo ya manera de hacerle cambios y compilarlos. Es decir, el .exe que tengo es la última compilación y no recuerdo en que estado lo dejé, por lo que no vale la pena perderle tiempo (a menos que alguien le siga desarrollando en Pocket PC). De todas formas, si tienes ese emulador y quieres intentar, me avisas y te mando el .exe y la carpeta de imagenes a ver que tal (el primer beta tester :D jeje).
 
Hola, yo tambien tengo que hacer un proyecto en Dev c++ y tengo pensado hacer un black jack, me gustaria saber q libreria grafica me recomiendas, es en orientado a objetos y ps te agradezco.
 
Diegof dijo:
Hola, yo tambien tengo que hacer un proyecto en Dev c++ y tengo pensado hacer un black jack, me gustaria saber q libreria grafica me recomiendas, es en orientado a objetos y ps te agradezco.

Bueno, yo no soy ing. de sistemas ni conozco otras librerías gráficas como para aconsejarte mejor, pero si estoy seguro que la librería Allegro que estoy usando es bastante poderosa y no es difícil de aprender y usar. Podrías igualar y hasta superar cualquier juego de cartas de esos de Windows (solitario, carta blanca, etc), pues Allegro te permite cargar gráficos .bmp...es decir, puedes hasta escanear un juego de cartas real y usarlos en tu black jack.
 
gixgg dijo:
Bueno, yo no soy ing. de sistemas ni conozco otras librerías gráficas como para aconsejarte mejor, pero si estoy seguro que la librería Allegro que estoy usando es bastante poderosa y no es difícil de aprender y usar. Podrías igualar y hasta superar cualquier juego de cartas de esos de Windows (solitario, carta blanca, etc), pues Allegro te permite cargar gráficos .bmp...es decir, puedes hasta escanear un juego de cartas real y usarlos en tu black jack.

oye ps si, estoy usando allegro y me he dado cuenta de eso y lo de escanear las cartas es una excelente idea, ahi voy aprendiendo si alguien tiene dudas o yo las tengo espero aqui nos podamos colaborar.
 
Diegof dijo:
...ahi voy aprendiendo si alguien tiene dudas o yo las tengo espero aqui nos podamos colaborar.

Si claro, sería bueno pues así vamos mejorando.

Aunque yo generalmente trato de buscar primero en la página oficial www.allegro.cc pues está el manual con todos los comandos y hasta tiene un foro donde casi siempre he encontrado las respuestas a las dudas que tengo. Asi que te la recomiendo (claro que está en ingles).

En esa página de allegro a la izquierda haces click en "manual" y alli encuentras todo explicado. Lo bueno de este método es que los comandos están adecuadamente agrupados y cuando buscas información de algún comando de paso conoces otros que también podrían servirte.

Si por allí no encuentras lo que buscas, puedes regresar otra vez a la página de inicio y a la izquierda haces click en "search", buscas por el nombre del comando y te aparecen toda clase de resultados (incluyendo también de los foros). Revisando un poco es casi seguro que uno encuentra lo que busca.

De todas maneras podemos colaborarnos por aca también. Todo es ganancia.
 
davprog dijo:
Hola...!!! muy interesante lo del proyecto! como puede uno colaborar?

Bueno la idea es inicialmente (dentro de poco) colocar un demo jugable para que puedan probarlo y así cada quien decida en que puede colaborar.

Así solo sea para criticarlo o dar ideas, Por ejemplo:

"No me parece tal cosa..."
"Mejor cambiale esto..."
"Porqué no incluyes...?"
"Que tal si colocas un item que cuando..."


También es importante para detectar errores en el juego, Por ejemplo:

"Hice tal cosa y sucedió esto..."
"El programa se bloquea cuando..."
"En mi computador pasa esto..."
"Se supone que cuando....pase esto?"
O incluso sólo para decir que "Todo me funciona bien"


Entonces podría incluirte en los créditos como "BETA TESTER". Es decir, estas participando, entras a los créditos y no necesitas realmente saber nada específico.

O si tienes conocimientos de algo que pueda ser útil para el desarrollo del juego (sabes dibujar, escribir música, manejas programas de diseño 3D, o cualquier otra habilidad artística) entonces puedes colaborar asi:

"Bueno yo se dibujar...y ahora que?"
"Me parece que tal gráfico puede mejorarse....yo dibuje esto..."
"Compuse esta música...como la incluímos?"
"Realicé este render en 3D para usarlo en..."


Nuevamente estarías incluído en los créditos de acuerdo al aporte.

Otra posibilidad es que sepas programar, entonces puedes colaborar de varias maneras:

"Revisé esta parte del código y creo que mejor puede manejarse de esta otra forma..."
"Listo...yo entonces voy a desarrollar el bloque de código para tal cosa..."
"Yo me encargo de todo el código para sonido y música..."
"Yo voy a desarrollar un editor de mapas independiente..."


Y uno no sabe con que otra cosa puedan intervenir...pero que podrían proponer.

Como guía coloco las herramientas de desarrollo que estoy usando:

Todo el juego lo estoy programando con DevC++ (freeware) y la librería para juegos Allegro (giftware).

Actualmente estoy manejando los gráficos de fondo renderizados en 3D con POVray (freeware).

El resto de los gráficos son generados dentro del programa con líneas y rectángulos. Pero los items y objetos si voy a dibujarlos con Paint (pero muy sencillos, en blanco y negro y del tamaño de un ícono). Hasta ahora sólo tengo dibujado un pequeño icono de reloj de 10x10 pixels (que se muestra en un mensaje de Espera...)

Para la música ya descargué un programa llamado Easy Music Composer (freeware) que permite crear música en formato MIDI (colocando notas). Aunque no he hecho nada todavía con el. Con este programa puede uno incluir 8 instrumentos simultáneamente y hasta percusión. El problema es ubicar las notas correctamente y que suene bien.

En general, la idea es que todo aporte sea original (no copiado de alguien) y usando sólo freeware, pues si se va a colocar créditos de algo debe ser así.

--------------------

IMPORTANTE: Finalmente no pude usar el Easy Music Composer pues me aparecía un error con un archivo MCI32.ocx.

Buscando otra alternativa, leí acerca de librerías adicionales para Allegro que permiten utilizar formatos superiores al MIDI en calidad CD o superior. Asi que ahora estoy utilizando la librería adicional DUMB (freeware) que soporta formatos IT, XM, S3X y MOD.

Entonces para la creacion de la música en los nuevos formatos descargué otro software llamado MODPlug Tracker (freeware) en su versión Quick Start Kit que incluye un tutorial y ejemplos.
 
Saludo

Hola,
he estado leyendo el foro y me parece muy interesante lo que estas haciendo, yo soy programador pero no he trabajado con Dev c++ ni tampoco con la libreria Allegro (No he hecho juegos!) pero de todos modos me gustaria ver el demo y poder colaborarte en lo que pueda... :alien:
 
pajeware dijo:
Hola, he estado leyendo el foro y me parece muy interesante lo que estas haciendo, yo soy programador pero no he trabajado con Dev c++ ni tampoco con la libreria Allegro (No he hecho juegos!) pero de todos modos me gustaria ver el demo y poder colaborarte en lo que pueda... :alien:

Gracias por el apoyo y tu interés. Apenas lo tenga listo me pongo en contacto contigo.

La verdad, el programa ya es funcional, pero lo que yo quiero es que por lo menos tenga ya implementada una misión con algunos ítems (Aunque de pronto saco el demo con algo más simple como "Encuentra la salida").

Y por lo que me cuentas de que nunca has trabajado con DevC++/Allegro, mira que yo llevo lo que tiene este foro con 1 o 2 semanas más y nunca siquiera había usado C++ ni había escuchado de Allegro. Pero se me ha hecho fácil sobre todo porque Allegro tiene una página excelente y prácticamente tiene comandos o funciones para casi todo lo que uno va necesitando.

Mira, la cuestion es así: uno usa DevC++ para toda la parte del programa en C++ normal:

Variables
Funciones
Arrays
for
if-else
switch-case
do-while
Operaciones matemáticas de C++ ( +,-,/,*,%,++,-- )
Operaciones lógicas ( ==,!=,>=,<= )

Y todo con lo que uno haría un programa como "sumar a+b" y todos esos que colocan de ejercicio a los estudiantes. Entre más sepa uno de esto mejor pues con esto se maneja toda la lógica del programa o juego que uno va a hacer. Con el primer tutorial que encontré aprendí todo esto. Obviamente, el conocimiento previo de programación en Quickbasic me sirvió pues algunos conceptos son parecidos (if, for-next, switch-case,do-while).

El Allegro tiene son comandos y funciones para configurar la resolucion de pantalla, dibujar, manejar archivos, trabajar con gráficos hechos fuera del programa (bmp y otros formatos), entradas del teclado y el mouse, incluir musica y sonidos (MIDI o WAV) y es muy fácil de usar, Por ejemplo:

PHP:
#include <allegro.h>
// incluye la librería Allegro

void main()
{
allegro_init();
// inicia Allegro

install_keyboard();
// nos permite usar el teclado

install_mouse();
// nos permite usar el mouse

set_color_depth(16); 
// coloca la pantalla en modo de colores de 16 bit

set_gfx_mode(GFX_AUTODETECT,640,480,0,0);
// cambia la resolucion de pantalla a 640x480

clear_to_color(screen,makecol(0,180,0));
// Borra la pantalla y la deja de un color verde
// con makecol(rojo, verde, azul) se crean combinaciones de colores

rectfill(screen,220,220,420,270,makecol(0,0,100));
// dibuja un rectángulo relleno en color azul oscuro en la pantalla 

textout_centre_ex(screen,font,"Click para salir",320,240,makecol(255,255,255),makecol(0,0,100));
//coloca el mensaje en color blanco sobre el boton azul

show_mouse(screen);
// muestra el mouse en pantalla

do{}while(!key[KEY_ESC] && !(mouse_b&1 && mouse_x>=220 && mouse_x<=420 && mouse_y>=220 && mouse_y<=270));
//continua el ciclo do-while mientras no se presione ESC
//ni se haga click izquierdo del mouse en las coordenadas del boton azul

allegro_exit();
// sale de allegro

} END_OF_MAIN();

si te fijas bien lo único de C++ es

PHP:
void main()
{
do{ }while();
}

El resto son funciones de Allegro y lo que hace el programa es esto:
Dibuja un boton "Click aqui para salir" en la mitad de la pantalla.
y pues cuando uno presiona ESC o hace click en el boton se sale :D.

ejemploboton.jpg
 
Diegof dijo:
Hola, estoy varado pq no se como leer una cadena en allegro??
Hasta donde he podido investigar, Allegro no tiene ningun comando para leer cadenas de caracteres, solamente detecta cada tecla presionada. Asi que toca programar una funcion especificamente para eso.

Aca coloco un código que programé, solo usalo en tu programa:

PHP:
#include <allegro.h>
#include <string> // para usar cadenas de caracteres
using namespace std;
BITMAP *fondoinput;
string CADENA;
int x;
int y;
int cursorpoint=0;
int cursorx=0;
int tecla;
string textaux;
void cursor()
{
cursorpoint=1-cursorpoint;
rectfill(screen,x+2+cursorx*8,y+4,x+2+cursorx*8+6,y+13,makecol(70+185*cursorpoint,70+185*cursorpoint,70+185*cursorpoint));
}
string input(int tipoDato,string Mensaje,int px, int py)
{
cursorx=0;
int largocadena=0;
int cadenascroll=0;
string Cadena="";
int puntodecimal=0;
int posicionpuntodecimal=0;
x=px;
y=py;
textprintf_ex(screen,font,x,y,makecol(255,255,255),-1,"%s",Mensaje.c_str());
x=x+ustrlen(Mensaje.c_str())*8+3;
y=y-5;
blit(screen,fondoinput,x-1,y-1,0,0,362,22);
rectfill(screen,x-1,y-1,x+360,y+18,makecol(0,0,0));
rectfill(screen,x,y,x+361,y+19,makecol(130,130,130));
rectfill(screen,x,y,x+360,y+18,makecol(70,70,70));
install_int(cursor,500);
do{
tecla=readkey() & 0x00ff;
if(tipoDato<=1) // números enteros
{
if(tecla == 45 && largocadena==0) {Cadena=Cadena+"-"; largocadena++;}
if(tecla == 48) {Cadena=Cadena+"0"; largocadena++;}
if(tecla == 49) {Cadena=Cadena+"1"; largocadena++;}
if(tecla == 50) {Cadena=Cadena+"2"; largocadena++;}
if(tecla == 51) {Cadena=Cadena+"3"; largocadena++;}
if(tecla == 52) {Cadena=Cadena+"4"; largocadena++;}
if(tecla == 53) {Cadena=Cadena+"5"; largocadena++;}
if(tecla == 54) {Cadena=Cadena+"6"; largocadena++;}
if(tecla == 55) {Cadena=Cadena+"7"; largocadena++;}
if(tecla == 56) {Cadena=Cadena+"8"; largocadena++;}
if(tecla == 57) {Cadena=Cadena+"9"; largocadena++;}
}
if(tipoDato==1) // números decimales
{
if(tecla == 45 && largocadena==0) {Cadena=Cadena+"-"; largocadena++;}
if(tecla == 46 && puntodecimal==0)
{
if(largocadena==0 || (largocadena==1 && Cadena=="-")) {Cadena=Cadena+"0"; largocadena++;}
Cadena=Cadena+".";
largocadena++; puntodecimal=1; posicionpuntodecimal=largocadena;
}
}
if(tipoDato==2) // cadena de texto letras solo mayusculas numeros y simbolos
{
if(tecla >= 32 && tecla <= 126 )
{
Cadena=Cadena+string(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]~_~ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~",tecla-32,1);
largocadena++;
}
}
if(tipoDato==3) // cadena de texto cualquier letra (mayuscula o minuscula) numeros y simbolos
{
if(tecla >= 32 && tecla <= 126 )
{
Cadena=Cadena+string(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]~_~abcdefghijklmnopqrstuvwxyz{|}~",tecla-32,1);
largocadena++;
}
}
if(key[KEY_BACKSPACE] && largocadena>0) {Cadena=string(Cadena,0,(largocadena--)-1); cursorpoint=0; if(puntodecimal==1 && largocadena<posicionpuntodecimal) {puntodecimal=0; posicionpuntodecimal=0;} }
if(key[KEY_DEL]) {Cadena=""; largocadena=0; cursorpoint=0; puntodecimal=0; posicionpuntodecimal=0;}
rectfill(screen,x,y,x+360,y+18,makecol(70,70,70));
if(largocadena>43)
{
cursorx=43;
cadenascroll=largocadena-43;
}
else
{
cursorx=largocadena;
cadenascroll=0;
}
textprintf_ex(screen,font,x+2,y+5,makecol(255,255,255),-1,"%s",string(Cadena,cadenascroll,43).c_str());
}while(!key[KEY_ENTER]);
remove_int(cursor);
blit(fondoinput,screen,0,0,x-1,y-1,362,22);
if(tipoDato==0){textprintf_ex(screen,font,x+2,y+5,makecol(255,255,255),-1,"%i",atoi(Cadena.c_str()));}
if(tipoDato==1){textprintf_ex(screen,font,x+2,y+5,makecol(255,255,255),-1,"%f",atof(Cadena.c_str()));}
if(tipoDato>=2){textprintf_ex(screen,font,x+2,y+5,makecol(255,255,255),-1,"%s",Cadena.c_str());}
return Cadena;
}
void main()
{
allegro_init();
install_keyboard();
install_timer();
set_color_depth(16);
set_gfx_mode(GFX_AUTODETECT,800,600,0,0);
clear_to_color(screen,makecol(100,100,175));
fondoinput=create_bitmap(362,22);
//ejemplo para leer un numero entero:
int Numero_Entero;
CADENA=input(0,"Entrar un numero entero?",10,100);
Numero_Entero=atoi(CADENA.c_str());
//ejemplo para leer un numero decimal:
double Numero_Decimal;
CADENA=input(1,"Entrar un numero cualquiera?",10,130);
Numero_Decimal=atof(CADENA.c_str());
//ejemplo para leer una cadena (letras mayusculas, numeros o simbolos):
string Cadena_Mayusculas;
Cadena_Mayusculas=input(2,"Cadena de Caracteres (letras mayusculas, numeros o simbolos)?",10,160);
//ejemplo para leer una cadena (letras mayusculas o minusculas, numeros o simbolos):
string Cadena_Teclado_Completo;
Cadena_Teclado_Completo=input(3,"Cadena de Caracteres (teclado completo)?",10,190);
destroy_bitmap(fondoinput);
allegro_exit();
}END_OF_MAIN();
 
El código de arriba te permite entrar 4 tipos de datos:

  • Números enteros
  • Decimales
  • Cadenas de texto con mayusculas, numeros y simbolos
  • Cadenas de texto con mayusculas o minusculas, numeros y simbolos

Pero si solo necesitas las cadenas de texto puedes usar esta versión simplificada:

PHP:
#include <allegro.h>
#include <string> // para usar cadenas de caracteres

using namespace std;

BITMAP *fondoinput;

string CADENA;
int x;
int y;
int cursorpoint=0;
int cursorx=0;
int tecla;
string textaux;

void cursor()
{
 cursorpoint=1-cursorpoint;
 rectfill(screen,x+2+cursorx*8,y+4,x+2+cursorx*8+6,y+13,makecol(70+185*cursorpoint,70+185*cursorpoint,70+185*cursorpoint));
}

string input(string Mensaje,int px, int py)
{
cursorx=0;
int largocadena=0;
int cadenascroll=0;
string Cadena="";
x=px;
y=py;
textprintf_ex(screen,font,x,y,makecol(255,255,255),-1,"%s",Mensaje.c_str());
x=x+ustrlen(Mensaje.c_str())*8+3;
y=y-5;
blit(screen,fondoinput,x-1,y-1,0,0,362,22);
rectfill(screen,x-1,y-1,x+360,y+18,makecol(0,0,0));
rectfill(screen,x,y,x+361,y+19,makecol(130,130,130));
rectfill(screen,x,y,x+360,y+18,makecol(70,70,70));
install_int(cursor,500);
do{
    tecla=readkey() & 0x00ff;
      if(tecla >= 32 && tecla <= 126 )
         {
          Cadena=Cadena+string(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]~_~abcdefghijklmnopqrstuvwxyz{|}~",tecla-32,1);
          largocadena++;
         }

if(key[KEY_BACKSPACE] && largocadena>0) {Cadena=string(Cadena,0,(largocadena--)-1); cursorpoint=0;}
if(key[KEY_DEL]) {Cadena=""; largocadena=0; cursorpoint=0;}

rectfill(screen,x,y,x+360,y+18,makecol(70,70,70));
if(largocadena>43)
                  {
                  cursorx=43;
                  cadenascroll=largocadena-43;
                  }
                  else
                  {
                  cursorx=largocadena;
                  cadenascroll=0;
                  }
                  
textprintf_ex(screen,font,x+2,y+5,makecol(255,255,255),-1,"%s",string(Cadena,cadenascroll,43).c_str());
}while(!key[KEY_ENTER]);
remove_int(cursor);
blit(fondoinput,screen,0,0,x-1,y-1,362,22);
textprintf_ex(screen,font,x+2,y+5,makecol(255,255,255),-1,"%s",Cadena.c_str());
return Cadena;
}

void main()
{
allegro_init();
install_keyboard();
install_timer();

set_color_depth(16);
set_gfx_mode(GFX_AUTODETECT,800,600,0,0);
clear_to_color(screen,makecol(100,100,175));
fondoinput=create_bitmap(362,22);

//ejemplo para leer una cadena
string Tu_Variable_Cadena;
Tu_Variable_Cadena=input("Escribe un texto de prueba:",10,10);

destroy_bitmap(fondoinput);
allegro_exit();

}END_OF_MAIN();
 

Los últimos temas