Como hacer un programa sencillo para puppy linux

Message
Author
User avatar
mister_electronico
Posts: 969
Joined: Sun 20 Jan 2008, 20:20
Location: Asturias_ España
Contact:

Hola Walter...

#46 Post by mister_electronico »

Mediante comandos del Bash como tipo scanf podemos detectar cuando hemos tecleado una tecla y la metemos en una variable., y luego con el comando If__ Then --- fi seleccionamos la accion que queremos realizar y luego con el comando aplay de linux , ejecutamos el archivo dela nota que queremos tocar........ Mediante Gtkdialog lo podemos hacer bonito para que marque las notas...... Bueno Walter ..... mucho animo y al toro........jejeje

[/quote]

Azulete
Posts: 3
Joined: Thu 25 Mar 2010, 12:12

#47 Post by Azulete »

Saludos a la comunidad.
Recientemente he descubierto esta maravilla de sistema. Puppy recien instalado.

Azulete
Posts: 3
Joined: Thu 25 Mar 2010, 12:12

#48 Post by Azulete »

Aqui les dejo este pequeño aporte. Es una pequeña traduccion del manual que se menciona mas arriba.

1.- POR DONDE EMPEZAR

>> La documentacion de gtkdialog es escasa, pero esto es un comienzo. La encontraras en /usr/share/doc/gtkdialog/gtkdialog.txt.
Lo mismo esta en la web, pero con otro formato.

>> El aprendizage con ejemplos es mucho mejor, y es mas fácil de entender. Estan ubicados en /usr/share/doc/gtkdialog/examples
Además necesitaras tener instalado
dev_save.sfs
el cual tabien lo puedes encontrar en la web.

Nota: Puppy usa los comandos de gtkdialog3 en lugar de los de gtkdialog. Por ello debes cambiar esto en los ejemplos. Otra opcion que tienes es teclear en la consola:
ln -s /usr/sbin/gtkdialog3 /usr/sbin/gtkdialog

>> Encontraras mas informacion de gtkdialog en goblinX forum
>> Si tecleas 'gtkdialog3 --help' en la consola te mostrara los parametros que tiene.
>> technosaurus ha realizado algunas plantillas que las puedes descargar de aqui here.



2.) SINTAXIS: Como usar las variables en el codigo.


Empecemos. Abre una comsola y teclea:

ln -s /usr/sbin/gtkdialog3 /usr/sbin/gtkdialog

Para mostrar el contenido de una variable en gtkdialog necesitamos ponerla entre comillas simples. Seria algo como:
TEXT='Hello world'
Esto guardara en la variable TEXT la cadena Hola mundo.

Una vez guarda si la queremos mostrar pondriamos
“$TEXT

User avatar
mister_electronico
Posts: 969
Joined: Sun 20 Jan 2008, 20:20
Location: Asturias_ España
Contact:

Bienvenido a este foro Azulete...

#49 Post by mister_electronico »

Bienvenido a este foro Azulete, hay un minicurso en ingles abierto por Zigbert que progarma para puppy con programas como Pburn, este minicurso es bastante interesante.


http://www.murga-linux.com/puppy/viewtopic.php?t=38608


Si a la gente le interesa y traducir este minicurso o poner ejemplos comentados de este post en ingles aqui, pues tienen mi colobaracion...

Un saludo.

User avatar
walter leonardo
Posts: 234
Joined: Thu 10 Dec 2009, 22:10

hola

#50 Post by walter leonardo »

Hola.
Me podrias dar un ejemplo mister, porque estoy en blanco y no me sale nada :? .

User avatar
mister_electronico
Posts: 969
Joined: Sun 20 Jan 2008, 20:20
Location: Asturias_ España
Contact:

Es que el programita que propones no es secillito....

#51 Post by mister_electronico »

Walter es que el programa que propones no es precisamente sencillito, por eso te decia
suerte y al toro.... jejeje...

No soy ningun entendido en Gtkdialog ni tampoco en el leguaje de Shell.....

Aunque tampoco es necesario que lo escribieras en estos lenguajes, por que tu programa como dices no requiere mas que de teclado para ir apretando teclas y produciendos sonidos...

En realidad lo podrias escribir en C y luego que se ejecutara desde Gtkdialog y se matara el proceso desde Gtkdialog cuando acabaras....

Necesitas conseguir los archivos sonoros de cada una de las notas que quieres ejecutar

El programa que esta abajo en el C no esta depurado ni comprobado, pero mas o menos esta es la idea lo llamamos por ejemplo nota...

Cada vez que lo ejecutemos lo llamaremos con nota "numero" numero es de 1 a 6 por ejemplo que corresponde a una nota musical do re mi fa so la .....

se le pasa con el argumento argc de C. lee ese numero y mediante la comparacion con if ejecuta la orden de llamada a comando del systema linux que en este caso es el
comando "aplay" que ejecuta el archivo sonoro correspondiente.

Cada vez que aprietes una tecla del teclado tienes que llamar a este programa nota...


#include <stdio.h> // Prueba de parámetros para función main

int main(int argc)

{
int i;
i = argc;

if(i=1) Then system("aplay do.wav");
if(i=2) Then system("aplay re.wav");
if(i=3) Then system("aplay mi.wav");
if(i=4) Then system("aplay fa.wav");
if(i=5) Then system("aplay so.wav");
if(i=4) Then system("aplay la.wav");

return 0;
}


Bueno esto es una de las miles de posibilidades que tienes....

Espero que te sirva de algo....

Un saludo Walter...

User avatar
mister_electronico
Posts: 969
Joined: Sun 20 Jan 2008, 20:20
Location: Asturias_ España
Contact:

Otra forma de hacerlo...

#52 Post by mister_electronico »

Otra forma de hacerlo es el siguiente programa....

#include <stdio.h> // Prueba de parámetros para función main

int main(void)

{
char ch;

while( scanf( "%c", &ch ) != 's' ) /* Ejecutalo mientras no sea igua a s */
{
if(ch=='a') Then system("aplay do.wav");
if(ch=='b') Then system("aplay re.wav");
if(ch=='c') Then system("aplay mi.wav");
if(ch=='d') Then system("aplay fa.wav");
if(ch=='e') Then system("aplay so.wav");
}



return 0;
}


Este programa no esta depurado ni comprobado...

La diferencia con el primer programa es que este se ejecutara indefinidamente mientras no apretemos la tecla "s"

Un saludo nos vemos....

User avatar
walter leonardo
Posts: 234
Joined: Thu 10 Dec 2009, 22:10

hola

#53 Post by walter leonardo »

Bueno encontré esto por Internet pero no me acuerdo donde jeje, pero si me acuerdo para que servia.
Es un programa que tiene 3 aplicaciones adentro:
1: keyloger (capta el teclado)
2: capturador de pantalla
y el mas importante,
3: es una aplicacion para designarle a una tecla del teclado reproducir un sonido.(justo lo que quiero yo)
Pero hay que compilarlo y yo no pude porque me daba error, pero si alguien puedo se lo agradecere.
Nota: el programa parece estar hecho en C.
Attachments
kbdevents-1.1.tar.gz
(48.29 KiB) Downloaded 717 times

User avatar
goshujinsama
Posts: 30
Joined: Wed 31 Mar 2010, 04:22
Location: MX

hola

#54 Post by goshujinsama »

Hola a todos, para mi lo mas facil de hacer para lo que proponen seria hacer el programa en c, pero con sdl, y su libreria sdl mixer, de echo yo estaba programando un juego :oops: con esas librerias en guindos :lol: , pero tambien me gustaria pasarlo a linux, lo intentare, voy a checar tambien el tar a ver si se compilarlo, y hay que seguir con esto amigos 8) .

User avatar
walter leonardo
Posts: 234
Joined: Thu 10 Dec 2009, 22:10

hola

#55 Post by walter leonardo »

hola, bienvenido :D .
Seria bueno que pases tus programas hechos en C para linux asi lo usemos todos.
Yo no quiero hacer programas en C por la razon que nose compilarlos para puppy pero si para windos y por eso empece a aprender algo de gtk :D .
Saludos.

User avatar
goshujinsama
Posts: 30
Joined: Wed 31 Mar 2010, 04:22
Location: MX

c compiling

#56 Post by goshujinsama »

Hola de nuevo a todos, walter, lo primero que debes de tener para compilar tus programas en c en puppy son las librerias necesarias par compilarlos, luego en geany seleccionas el tipo de archivo que es, creo que es en el menu document, de ahi ya teniendolo escrito lo conpilas con f8 y despues lo construyes con f9 y por ultimo, para probarlo abres una terminal y ejecutas tu programa poniendo su ruta, espero y este claro como hacerlo y cualquier duda pues por aqui nos leemos.

User avatar
walter leonardo
Posts: 234
Joined: Thu 10 Dec 2009, 22:10

hola

#57 Post by walter leonardo »

Que bueno, esa de construir no la sabia, eso era lo que me faltaba :D .
Que paquetes tendría que instalar en puppy 4.3.1 para compilar solo en C porque yo no quiero instalar el paquete devx_431.sfs para compilar solo en C porque tuve una mala experiencia al instalarme ese paquete, cuando lo instale empece a tener problemas el sistema y los programas :? .
Hay algun paquete liviano para instalar para compilar en C?
Me das un ejemplo de como el programa de lo que quiero hacer(asignar un sinido a una tecla).
Gracias por la explicación :D .
A me estaba olvidando,
Como hago para ejecutar con un script el archivo compilado en C para no tener que estar entrando en la terminal y ejecutarlo de ahy, osea quiero ejecutarlo de un solo click.

User avatar
goshujinsama
Posts: 30
Joined: Wed 31 Mar 2010, 04:22
Location: MX

Hola

#58 Post by goshujinsama »

Hola de nuevo, bueno, no se si haiga algo mas ligero solo para compilar c, pero pues el paquete dev a mi no me a causado ningun problema, y eso que yo tengo una full install, bueno, creo que podria ser por el tipo de instalacion que tienes, sobre el ejemplo del programa, dejame nadamas y checo unos errores que me da la libreria sdl, tengo que checar como linkear bien las librerias, pero yo ya pude hacer una calculadora sencilla en c con librerias estandar, asi que solo es cuestion de investigar como hacer lo que quiero, saludos.

User avatar
mister_electronico
Posts: 969
Joined: Sun 20 Jan 2008, 20:20
Location: Asturias_ España
Contact:

Yo utilizo devx_XXX

#59 Post by mister_electronico »

Yo utilizo el dev y la verdad es que nunca me ha dado ningun problema .... ni me ha afectado a ningun programa.

Un ejemplo:

#include <stdio.h>

int main()
{
printf(" Hola que tal \n");

return (0);
}


guardarlo como hola.c y se compila.

gcc hola.c -o hola

Para ejecutarlo se ejecuta desde el termial ./hola


Para ejecutarlo desde un script podemos hacer.....

#!/bin/bash

#Ejecutar un programa C hola desde un script.

hola


Guardamos este texto en un archivo por ejemplo: prueba.sh

Le damos orden para poder ejecutarse chmod +x prueba.sh

Y colocamos el archivo hola ejecutable de C dentro del directoria /USR/BIN.

Y ejecutamos el script ./prueba.sh

Si no queremos colocar el programa en C dentro de /USR/BIN entonces dentro del script tendremos que dar el Path o direccion donde se encuentra el ejecutable como por ejemplo /mnt//home/hola

Nos vemos un saludo..

User avatar
goshujinsama
Posts: 30
Joined: Wed 31 Mar 2010, 04:22
Location: MX

Hola

#60 Post by goshujinsama »

Bueno, lo primero de todo es conseguir las librerias, para esto nos vamos a www.libsdl.org y descargamos la SDL, SDL_image, SDL_mixer, SDL_ttf(al menos son las que considero indispensables).

Nos bajamos las que son .tar.gz, y las instalamos con el tipico procedimiento de:

./configure
make
make install

Y Pues aqui dejo un pequeño ejemplo:

MAIN.CPP
//===============================================================================
/*Este codigo es propiedad de Fernando Escutia Rodriguez, escrito el 05/04/2010*/
//===============================================================================
/*Iniciamos las cabezeras necesarias para el programa*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_mixer.h>
#include <SDL/SDL_ttf.h>
#include "csprite.h"

/*Definimos las definiciones y variables globales*/
SDL_Surface *screen, *texto;
SDL_Color bgcolor, fgcolor;
SDL_Rect rectangulo;
TTF_Font *fuente, *fon;
char msg[100];
CFrame ftitle;
CSprite title;
CFrame fmagic;
CSprite magic;
Mix_Music *tit;
Uint32 ini_milisegundos, fin_milisegundos, frametime;

/*estructura del cartel magic puzzle*/
struct mag{
int x, y;
} magi;

/*Cargamos los sprites*/
int initsprites(){
ftitle.load("img/title.bmp");
title.addframe(ftitle);
fmagic.load("img/magic.bmp");
magic.addframe(fmagic);
}

/*Cargamos los archivos de musica*/
void inicializa(){
tit = Mix_LoadMUS("music/trust.mp3");
}

/*iniciamos las coordenadas moviles*/
void moviles(){
magi.x = -5;
magi.y = 100;
}

/*Iniciamos el frameo*/
void ResetTimeBase() {
ini_milisegundos=SDL_GetTicks();
}

int CurrentTime() {

fin_milisegundos=SDL_GetTicks();
return fin_milisegundos-ini_milisegundos;
}

/*iniciamos los textos que vamos a usar*/
const char text[100]="Presione espacio para continuar o esc para salir";

/*Iniciamos codigo del programa*/
int main(int argc, char *argv[]) {

int done = 0;
int estado = 1;
int pan = 0;
SDL_Event event;
Uint8 *keys;

/*Iniciamos SDL*/
if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO) < 0) {
printf("No se pudo iniciar SDL: %s\n", SDL_GetError());
exit(1);
}

/*Iniciamos modo de video*/
screen = SDL_SetVideoMode(598, 429, 24, SDL_HWSURFACE|SDL_DOUBLEBUF);
if (screen == NULL){
printf("No se puede iniciar el modo grafico: %s\n", SDL_GetError());
exit(1);
}

/*Iniciamos SDL_ttf*/
if (TTF_Init() < 0){
printf("No se puede iniciar SDL_ttf: %s\n", SDL_GetError());
exit(1);
}
atexit(TTF_Quit);

/*Iniciamos el audio*/
if (Mix_OpenAudio(44100,AUDIO_S16SYS,2,4096) < 0){
printf("No se puede iniciar el audio: %s\n", Mix_GetError());
exit(1);
}
atexit(Mix_CloseAudio);

/*Cargamos las fuentes*/
fuente = TTF_OpenFont("Fonts/ionic.ttf", 20);
fon = TTF_OpenFont("Fonts/monofont.ttf", 20);

/*Iniciamos los colores para las fuentes*/
bgcolor.r = 255;
bgcolor.g = 0;
bgcolor.b = 0;

initsprites();
inicializa();
moviles();

/*Iniciamos ejecucion del programa*/
while (done == 0){
switch (estado){

/*Iniciamos la pantalla de presentación*/
case 1:
Mix_PlayMusic(tit, -1);
while ((done == 0) && (estado == 1)){
ResetTimeBase();

title.setx(0);
title.sety(0);
title.draw(screen);

magic.setx(magi.x);
magic.sety(magi.y);
magic.draw(screen);

if (pan == 0){
fgcolor.r = 0;
fgcolor.g = 14;
fgcolor.b = 255;

sprintf(msg, "%s", text);
texto = TTF_RenderText_Blended(fuente, msg, fgcolor);
rectangulo.y = 370;
rectangulo.x = 87;
rectangulo.w = texto->w;
rectangulo.h = texto->h;

SDL_BlitSurface(texto, NULL, screen, &rectangulo);
}

SDL_Flip(screen);

keys=SDL_GetKeyState(NULL);

if (pan == 1){
if((magi.x < 270) && (magi.y < 260)){
magi.x=magi.x+(43);
magi.y=magi.y+(41);
}
}

/*Iniciamos el timing*/
do {
frametime=CurrentTime();
} while (frametime<300);

/*Iniciamos el chequeo de eventos*/
while (SDL_PollEvent(&event)){
if (event.type == SDL_QUIT){done = 1;}
if (event.type == SDL_KEYDOWN){
if (event.key.keysym.sym == SDLK_ESCAPE){done = 1;}
if (event.key.keysym.sym == SDLK_SPACE){
if (pan == 0){pan = 1;}
}
}
}
}
break;
}
}
/*Paramos la musica*/
Mix_HaltMusic();

/*Liberamos el recurso de la musica*/
Mix_FreeMusic(tit);

/*Liberamos recursos de fuentes*/
TTF_CloseFont(fuente);
TTF_CloseFont(fon);

return 0;
}

CSPRITE.H
#ifndef CSPRITE_H_

#define CSPRITE_H_

#define TRUE 1

#define FALSE 0

// CFrame representa un frame independiente de un sprite.

class CFrame {

public:

SDL_Surface *img;

void load(char *path);

void unload();

};

// La clase CSprite esta formada por un array de frames;

class CSprite {

private:

int posx,posy;

int estado;

int nframes;

int cont;

public:

CFrame *sprite;

CSprite(int nf);

CSprite();

void finalize();

void addframe(CFrame frame);

void selframe(int nf);

int frames() {return cont;}

void setx(int x) {posx=x;}

void sety(int y) {posy=y;}

void addx(int c) {posx+=c;}

void addy(int c) {posy+=c;}

int getx() {return posx;}

int gety() {return posy;}

int getw() {return sprite[estado].img->w;}

int geth() {return sprite[estado].img->h;}

void draw(SDL_Surface *superficie);

int colision(CSprite sp);

int colision2(CSprite sp);

};

#endif /* CSPRITE_H_ */


CSPRITE.CPP
#include <SDL/SDL.h>

#include "csprite.h"

#include <SDL/SDL_image.h>

// Sprite Class implementation

void CFrame::load(char *path) {

img=IMG_Load(path);

// Asignamos el color transparente al color rojo.

SDL_SetColorKey(img,SDL_SRCCOLORKEY|SDL_RLEACCEL, SDL_MapRGB(img->format,255,0,0));

img=SDL_DisplayFormat(img);

}

void CFrame::unload(){

SDL_FreeSurface(img);

}

CSprite::CSprite(int nf) {

sprite=new CFrame[nf];

nframes=nf;

cont=0;

}

CSprite::CSprite() {

int nf=1;

sprite=new CFrame[nf];

nframes=nf;

cont=0;

}

void CSprite::finalize() {

int i;

for (i=0 ; i<=nframes-1 ; i++)

sprite.unload();

}

void CSprite::addframe(CFrame frame) {

if (cont<nframes) {

sprite[cont]=frame;

cont++;

}

}

void CSprite::selframe(int nf) {

if (nf<=nframes) {

estado=nf;

}

}

void CSprite::draw(SDL_Surface *superficie) {

SDL_Rect dest;

dest.x=posx;

dest.y=posy;

SDL_BlitSurface(sprite[estado].img,NULL,superficie,&dest);

}

int CSprite::colision(CSprite sp) {

int w1,h1,w2,h2,x1,y1,x2,y2;

w1=getw(); // ancho del sprite1

h1=geth(); // altura del sprite1

w2=sp.getw(); // ancho del sprite2

h2=sp.geth(); // alto del sprite2

x1=getx(); // pos. X del sprite1

y1=gety(); // pos. Y del sprite1

x2=sp.getx(); // pos. X del sprite2

y2=sp.gety(); // pos. Y del sprite2

if (((x1+w1)>x2)&&((y1+h1)>y2)&&((x2+w2)>x1)&&((y2+h2)>y1)) {

return TRUE;

} else {

return FALSE;

}

}

int CSprite::colision2(CSprite sp) {

int w1,h1,w2,h2,x1,y1,x2,y2;

w1=getw()+2; // ancho del sprite1

h1=geth()+2; // altura del sprite1

w2=sp.getw()+2; // ancho del sprite2

h2=sp.geth()+2; // alto del sprite2

x1=getx()-1; // pos. X del sprite1

y1=gety()-1; // pos. Y del sprite1

x2=sp.getx()-1; // pos. X del sprite2

y2=sp.gety()-1; // pos. Y del sprite2

if (((x1+w1)>x2)&&((y1+h1)>y2)&&((x2+w2)>x1)&&((y2+h2)>y1)) {

return TRUE;

} else {

return FALSE;

}

}


Para que este funcione, debemos de tener los tres archivos en un mismo directorio, y meter el siguiente comando en una terminal:

g++ -L/usr/lib -lSDL -lSDL_image -lSDL_mixer -lSDL_ttf -lpthread -I/usr/include/SDL -D_REENTRANT /mnt/sda7/c01/game/main.cpp /mnt/sda7/c01/game/csprite.cpp -o /mnt/sda7/c01/game/magic_puzzle

Los directorios los substituyes por los tuyos.

Y he aqui el resultado:
Image

NOTA: Si las librerias y las cabezeras no estan en los directorios especificados arriba, se encuentran en /mnt/home/usr/local/include/SDL y /mnt/home/usr/local/lib, nadamas habria que copiar las librerias y cabeceras sdl a los directorios de arriba o poner en la linia para compilar estos directorios en lugar de otros a la hora de compilar.

Espero y les sirva, de todos modos recomiendo que busquen en google por "[ebook]programacion de videojuegos con sdl.pdf", cualquier duda pueden hacermela llegar y tratare de darle respuesta lo mas pronto posible.

Azulete
Posts: 3
Joined: Thu 25 Mar 2010, 12:12

Traduccion

#61 Post by Azulete »

3.) RECOGER DATOS EN EL SCRIPT: Organizar y estructurar el codigo

Vamos a ver como funcionan los cuadros de dialogo y como recoger lo que pulsamos cuando hacemos yes o no. Vamos a dividir el los ejemplos en cuadros de dialogo en dos grupos simles y complejos. Los simples tendrán botones del tipo yes, no y los otros serán mas complejos. Tendran mas botones y mas opciones.

>> Simple
Los cuadros de dialogo simple normalmente estan esperando por una respuesta por parte del usuario del tipo:
- Desea continuar?
- Elija una opcion de la lista?
- ...
Cuando el usuario hace click en los botones yes/no/cancel/ok el script continua de una u otra manera dependiendo que boton haya pulsadoel usuario. Veamos un ejemplo:

Code:
#!/bin/bash
export script='
<vbox>
<text><label>Esta seguro?</label></text>
<hbox>
<button no></button>
<button yes><action>EXIT:sure</action></button>
</hbox>
</vbox>'

I=$IFS; IFS=""
for STATEMENTS in $(gtkdialog3 --program=script); do
eval $STATEMENTS
done
IFS=$I

[ $EXIT = sure ] && gxmessage 'Esta seguro'

Muestra dos botones <button no> y <button yes>. Se evalua una condicion $IFS y despues se ejecuta el bucle for. Lo que hace el bucle for es evaluar la entrada del ususario dependiendo del boton que haya pulsado.

>> Complejo
Para cuadros de dialogos mas complejos hemos de mantener el gui incluso si el usuario hace click en cualquier parte, por lo que la opcion de usar EXIT parece no ser la mas adecuada. La solucion pasa por usar las funciones que estan predefinidas en gtkdialog. Recordar que hemos de exportar las funciones antes de ejecutarlas en nuestro gui. Añadimos la siguiente linea para exportar la funcion y listo.
export -f now
Veamos un ejemplo:
Code:
#!/bin/sh

now () {
date > /tmp/date
}
export -f now

export script='
<vbox>
<entry>
<variable>ENTRY_DATE</variable>
<input>cat /tmp/date</input>
</entry>
<button>
<label>Refresh</label>
<action>now</action>
<action>refresh:ENTRY_DATE</action>
</button>
</vbox>'

gtkdialog3 -p script


>> Proyecto
Cuando tu proyecto crece en complegidad cambiene estructurarlo, hacer un menu de inicio, dividir el codigo en varios archivos. De esta manera si hay un error es mas facil localizarlo. Una solucion bastante comun suele ser poner las funciones en un archivo para cada vez que las necesitemos las usemos desde ese archivo. En el ejemplo que se muestra acontinuacion, el archivo que contiene nuestras funciones esta en /root/test . Veamos un ejemplo de como estructurar nuestro pequeño programa. Abrir un editor de texto y añadir:

Code:
#!/bin/sh

case $1 in
-funcionahora)
date > /tmp/date
exit;;
esac
Guardarlo con el nombre test dentro de /root/. Guardar otro archivo llamado ejemplo2.sh con el codigo y concederle permisos de ejecucion:
Code:
export script='
<vbox>
<entry>
<variable>ENTRY_DATE</variable>
<input>cat /tmp/date</input>
</entry>
<button>
<label>Refresh</label>
<action>/root/test - funcionahora </action>
<action>refresh:ENTRY_DATE</action>
</button>
</vbox>'

I=$IFS; IFS=""
for STATEMENTS in $(gtkdialog3 -p script); do
eval $STATEMENTS
done
IFS=$I

User avatar
mister_electronico
Posts: 969
Joined: Sun 20 Jan 2008, 20:20
Location: Asturias_ España
Contact:

Que interesante SD.....

#62 Post by mister_electronico »

Que bueno tu post ujinsama , que interesante el SDL sobre todo para entorno de programacion de graficos...

g++ -L/usr/lib -lSDL -lSDL_image -lSDL_mixer -lSDL_ttf -lpthread -I/usr/include/SDL -D_REENTRANT /mnt/sda7/c01/game/main.cpp /mnt/sda7/c01/game/csprite.cpp -o /mnt/sda7/c01/game/magic_puzzle

Podias explicar mejor la compilacion, compilas los dos programas a la vez , csprite.cpp y main.cpp, aunque entiendo que csprite.cpp se comporta como un fichero de inclusion, ya que no tiene funcion main(), y te crea un fichero de salida magic_puzzle.

Al g++ creo enteder que le dices que las librerias estan en usr/lib pero lo demas no lo entiendo...

Otra cosa es la imagen que te sale en la presentacion ¿ de donde sale?

Bueno un saludo ... y gracias por tu post...

Voy a bajar el SDL y intentar instalarlo... te cuento..

User avatar
mister_electronico
Posts: 969
Joined: Sun 20 Jan 2008, 20:20
Location: Asturias_ España
Contact:

Ah ahora empiezo a entender.....

#63 Post by mister_electronico »

Ahora empiezo a entender:


g++ -L/usr/lib -lSDL -lSDL_image -lSDL_mixer -lSDL_ttf -lpthread -I/usr/include/SDL -D_REENTRANT /mnt/sda7/c01/game/main.cpp /mnt/sda7/c01/game/csprite.cpp -o /mnt/sda7/c01/game/magic_puzzle




ISDL_image a sido la libreria que te bajaste SDL_imabe como dices,
ISDL_mixer la otra...
ISDL__ttf es otra...

REENTRANT no se que es .... ni leptheread...

Ok espero que sigas por aqui.... asiduamente.... Gracias por tu post.... y nos vemos...

User avatar
goshujinsama
Posts: 30
Joined: Wed 31 Mar 2010, 04:22
Location: MX

Teclado-MK sound test con sdl

#64 Post by goshujinsama »

Hola de nuevo compañeros amantes de la programacion, bueno, walter aqui te dejo el programa con su codigo de lo que querias hacer de asignar sonido a una tecla, espero y no haberme equivocado en lo que querias.

mister-electronico, gracias por las flores :oops: , bueno, en cuanto a la compilacion -L/usr/lib, como dijiste es el directorio donde en mi caso tengo las librerias, -lSDL, -lSDL_image, lSDL_mixer y -lSDL_ttf, son las librerias que deseamos linkear, lpthread aun no tengo idea, pero supongo que decimos con esto al g++ que nos carge todos los archivos referantes a estas librerias, -I/usr/include/SDL es donde en mi caso tengo los archivos .h de SDL, -D_REENTRANT tampoco estoy muy seguro, pero supongo que con esto le decimos a g++ que compile y construya con mas de un archivo.

Con respecto a la imagen que dices, no es solo una, son 2, una de fondo que nos abarca toda la pantalla, es en la que salen las criaditas *W*, la otra es el cartel de magic puzzle, el programa tiene definido como color transparente el RGB 255,0,0, y tambien ahi hay un renderizado de un texto"Presione espacio para continuar o esc para salir", y no solo eso, ya que es imagen no se puede mostrar pero la aplicacion esta corriendo una musica de fondo.

la aplicacion esta leyendo los recursos desde su propia ruta, por ejemplo las imagenes se encuentran en el directorio raiz de la aplicacion en una carpeta llamada img, para cargarlas con las funciones de las librerias que incluimos en nuestro proyecto tendriamos que expecificarlas con "img/title.bmp" por ejemplo, esto aplica par cualquier tipo de formato que queramos usar y que sea compatible.

User avatar
goshujinsama
Posts: 30
Joined: Wed 31 Mar 2010, 04:22
Location: MX

#65 Post by goshujinsama »

Por cierto, se me olvidaba, a este tipo de programas solo los he logrado corre dandole click en la aplicacion, no los puedo correr con la terminal, si alguien sabe por que se da esto, digamelo.

Post Reply