Accueil > > > APPRENDRE SDL AVEC MARIO
APPRENDRE SDL AVEC MARIO
Information sur la source
Description
ce petit programme vient dans le cadre d'apprentissage de la SDL avec le C++, sur ce programme j'utilise pas la notion de classe, et je traite pas les collisions, vous pouvez l'améliorer, c'est enrichissant pour les débutants, n'hésiter pas à me contacter sur "migon.31@hotmail.fr".
Source
- //Les fichiers d'entête
- #include "SDL/SDL.h"
- #include "SDL/SDL_image.h"
- #include <string>
-
- //Les attributs de l'écran (640 * 480)
- const int SCREEN_WIDTH = 640;
- const int SCREEN_HEIGHT = 480;
- const int SCREEN_BPP = 32;
-
- //Les attributs de la feuille de sprites de mario
- const int SHEET_WIDTH = 382;
- const int SHEET_HEIGHT = 1131;
-
- //Les attributs de la feuille de sprites de mario
- const int SHEET_WIDTH2 = 60;
- const int SHEET_HEIGHT2 = 25;
-
- //Les surfaces
- SDL_Surface *faces = NULL;
- SDL_Surface *arriere_plan = NULL;
- SDL_Surface *enemis = NULL;
- SDL_Surface *screen = NULL;
-
- //La structure d'événements
- SDL_Event event;
-
- //les premiers coordonées de mario
- int posx=100,posy=415;
-
- //le numero de l'image à afficher
- int anim=0;
-
- //proprité de l'enemie
- int posx_e=0,posy_e=430, anim_e=0;
-
-
- //les images de mario
- SDL_Rect clip[ 10 ];
-
- //les images des enemis
- SDL_Rect clip2[ 5 ];
-
- //charger une image
- SDL_Surface *load_image( std::string filename, int *R=NULL, int *G=NULL, int *B=NULL)
- {
- //L'image qui est chargée
- SDL_Surface* loadedImage = NULL;
-
- //L'image optimisée qu'on va utiliser
- SDL_Surface* optimizedImage = NULL;
-
- //Chargement de l'image
- loadedImage = IMG_Load( filename.c_str() );
-
- //Si l'image est chargée
- if( loadedImage != NULL )
- {
- //Création de l'image optimisée
- optimizedImage = SDL_DisplayFormat( loadedImage );
-
- //Libération de l'ancienne image
- SDL_FreeSurface( loadedImage );
-
- //Si la création de l'image optimisée s'est bien passée
- if( optimizedImage != NULL )
- {
- Uint32 colorkey = SDL_MapRGB( optimizedImage->format, *R, *G, *B);
- SDL_SetColorKey( optimizedImage, SDL_RLEACCEL | SDL_SRCCOLORKEY,colorkey);
- }
- }
-
- //On retourne l'image optimisée
- return optimizedImage;
- }
-
- /*
- avant je faisais une fonction de chargement pour chaque couleur de transparence ce qui n'été pas une bonne méthode ;)
-
- //charger une image sans le vert
- SDL_Surface *load_image( std::string filename )
- {
- //L'image qui est chargée
- SDL_Surface* loadedImage = NULL;
-
- //L'image optimisée qu'on va utiliser
- SDL_Surface* optimizedImage = NULL;
-
- //Chargement de l'image
- loadedImage = IMG_Load( filename.c_str() );
-
- //Si l'image est chargée
- if( loadedImage != NULL )
- {
- //Création de l'image optimisée
- optimizedImage = SDL_DisplayFormat( loadedImage );
-
- //Libération de l'ancienne image
- SDL_FreeSurface( loadedImage );
-
- //Si la création de l'image optimisée s'est bien passée
- if( optimizedImage != NULL )
- {
- Uint32 colorkey = SDL_MapRGB( optimizedImage->format, 48, 169, 66);
- SDL_SetColorKey( optimizedImage, SDL_RLEACCEL | SDL_SRCCOLORKEY,colorkey);
- }
- }
-
- //On retourne l'image optimisée
- return optimizedImage;
- }
-
- //charger une image sans le blanc
- SDL_Surface *load_image2( std::string filename )
- {
- //L'image qui est chargée
- SDL_Surface* loadedImage = NULL;
-
- //L'image optimisée qu'on va utiliser
- SDL_Surface* optimizedImage = NULL;
-
- //Chargement de l'image
- loadedImage = IMG_Load( filename.c_str() );
-
- //Si l'image est chargée
- if( loadedImage != NULL )
- {
- //Création de l'image optimisée
- optimizedImage = SDL_DisplayFormat( loadedImage );
-
- //Libération de l'ancienne image
- SDL_FreeSurface( loadedImage );
-
- //Si la création de l'image optimisée s'est bien passée
- if( optimizedImage != NULL )
- {
- Uint32 colorkey = SDL_MapRGB( optimizedImage->format, 255, 255, 255);
- SDL_SetColorKey( optimizedImage, SDL_RLEACCEL | SDL_SRCCOLORKEY,colorkey);
- }
- }
-
- //On retourne l'image optimisée
- return optimizedImage;
- }*/
-
- void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination, SDL_Rect* clip = NULL )
- {
- SDL_Rect offset;
-
- offset.x = x;
- offset.y = y;
-
- //On blitte la surface
- SDL_BlitSurface( source, clip, destination, &offset );
- }
-
- bool init()
- {
- //Initialisation de tous les sous-systèmes de SDL
-
- if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 )
- {
- return false;
- }
-
- //Mise en place de l'écran
- screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE|SDL_FULLSCREEN );
-
- //S'il y a une erreur lors de la mise en place de l'écran
- if( screen == NULL )
- {
- return false;
- }
-
- //Mise en place de la barre caption
- SDL_WM_SetCaption( "JV_ ABDOU", NULL );
-
- //Si tout s'est bien passé
- return true;
- }
-
- bool load_files()
- {
- //Chargement de la feuille de sprite
- int r=48, g=169, b=66;
- faces = load_image( "mario.png", &r, &g, &b );
- arriere_plan = load_image( "nature.png", &r, &g, &b);
- r=255; g=255; b=255;
- enemis= load_image( "enemis.png", &r, &g, &b);
-
- //Si tout s'est bien passé
- return true;
- }
-
- void clean_up()
- {
- //On libère la feuille de sprites
- SDL_FreeSurface( faces );
- SDL_FreeSurface( enemis );
- SDL_FreeSurface( arriere_plan );
- SDL_FreeSurface( screen );
-
- //On quitte SDL
- SDL_Quit();
- }
-
- //decouper la feuille de mario
- void decoupage ()
- {
- //On coupe la partie en haut à gauche (premier sprite)
- clip[ 0 ].x = SHEET_WIDTH/25;
- clip[ 0 ].y = 20+2*SHEET_HEIGHT/27;
- clip[ 0 ].w = SHEET_WIDTH/15;
- clip[ 0 ].h = SHEET_HEIGHT/30;
-
- //On coupe la partie en haut à droite (second sprite)
- clip[ 1 ].x = SHEET_WIDTH/25+SHEET_WIDTH/15;
- clip[ 1 ].y = 20+2*SHEET_HEIGHT/27;
- clip[ 1 ].w = SHEET_WIDTH/15;
- clip[ 1 ].h = SHEET_HEIGHT/30;
-
- //On coupe la partie en bas à gauche (troisième sprite)
- clip[ 2 ].x = SHEET_WIDTH/25+2*(SHEET_WIDTH/15);
- clip[ 2 ].y = 20+2*SHEET_HEIGHT/27;
- clip[ 2 ].w = SHEET_WIDTH/15-5;
- clip[ 2 ].h = SHEET_HEIGHT/30;
-
- clip[ 3 ].x = SHEET_WIDTH/25+3*(SHEET_WIDTH/15)-5;
- clip[ 3 ].y = 20+2*SHEET_HEIGHT/27;
- clip[ 3 ].w = SHEET_WIDTH/15-6;
- clip[ 3 ].h = SHEET_HEIGHT/30;
-
- clip[ 4 ].x = SHEET_WIDTH/25+4*(SHEET_WIDTH/15)-10;
- clip[ 4 ].y = 20+2*SHEET_HEIGHT/27;
- clip[ 4 ].w = SHEET_WIDTH/15-6;
- clip[ 4 ].h = SHEET_HEIGHT/30;
-
- clip[ 5 ].x = SHEET_WIDTH/25+5*(SHEET_WIDTH/15)+3;
- clip[ 5 ].y = 20+2*SHEET_HEIGHT/27;
- clip[ 5 ].w = SHEET_WIDTH/15-2;
- clip[ 5 ].h = SHEET_HEIGHT/30;
-
- clip[ 6 ].x = SHEET_WIDTH/25+6*(SHEET_WIDTH/15)-20;
- clip[ 6 ].y = 20+2*SHEET_HEIGHT/27;
- clip[ 6 ].w = SHEET_WIDTH/15-3;
- clip[ 6 ].h = SHEET_HEIGHT/30;
-
- clip2[ 0 ].x = 0;
- clip2[ 0 ].y = 0;
- clip2[ 0 ].w = SHEET_WIDTH2/3;
- clip2[ 0 ].h = SHEET_HEIGHT2;
-
- clip2[ 1 ].x = SHEET_WIDTH2/3;
- clip2[ 1 ].y = 0;
- clip2[ 1 ].w = SHEET_WIDTH2/3;
- clip2[ 1 ].h = SHEET_HEIGHT2;
-
- clip2[ 2 ].x = 2*SHEET_WIDTH2/3;
- clip2[ 2 ].y = 0;
- clip2[ 2 ].w = SHEET_WIDTH2/3;
- clip2[ 2 ].h = SHEET_HEIGHT2;
-
- }
-
- //traiter les evenements
- void evenement()
- {
- //Obtenir les KeyStates
- Uint8 *keystates = SDL_GetKeyState( NULL );
- bool move= false;
- if( keystates[ SDLK_UP ] )
- {
- posy-=3;
- move= true;
- }
-
- //Si Bas est pressé (la fleche)
- if( keystates[ SDLK_DOWN ] )
- {
- posy+=3;
- move= true;
- }
-
- //Si Gauche est pressé (la fleche)
- if( keystates[ SDLK_LEFT ] )
- {
- posx-=3;
- if ( posx < 0 ) posx++;
- move= true;
- }
-
- //Si Droite est pressé (la fleche)
- if( keystates[ SDLK_RIGHT ] )
- {
- posx+=3;
- if (posx >= SCREEN_WIDTH-15 ) posx--;
- move= true;
- }
-
- if ( move == true ) anim++;
- else anim = 6;
- if ( anim == 7) anim = 0;
- }
-
- void evenement_enemis()
- {
- //cette fonction permet l'animation de l'enemis
- apply_surface( posx_e, posy_e, enemis, screen, &clip2[anim_e] );
- //changer la position de l'enemi
- posx_e++;
- //changé l'animation
- anim_e++;
- if ( posx_e == SCREEN_WIDTH ) posx_e=0;
- if (anim_e == 2 ) anim_e=0;
- }
-
-
- int main( int argc, char* args[] )
- {
- //Ce qui va nous permettre de quitter
- bool quit = false;
-
- //Initialisation
- if( init() == false )
- {
- return 1;
- }
-
- //Chargement des fichiers
- if( load_files() == false )
- {
- return 1;
- }
-
- decoupage();
-
- //Tant que l'utilisateur n'a pas quitter
- while( quit == false )
- {
- //preparer l'arriere plan
- apply_surface( 0, 0, arriere_plan, screen);
-
- //traiter les evenement clavier
- evenement();
-
- //preparer le personnage mario
- apply_surface( posx, posy, faces, screen, &clip[anim] );
-
-
- //si l'enemi n'est pas toucher
- evenement_enemis();
-
- //afficher
- SDL_Flip( screen);
-
- //Tant qu'il y a un événement
- while( SDL_PollEvent( &event ) )
- {
- switch (event.key.keysym.sym)
- {
- case SDLK_ESCAPE: /* Appui sur la touche Echap, on arrête le programme */
- quit = true;
- break;
- }
- }
-
- }
-
- //On libère les images et on quitte SDL
- clean_up();
-
- return 0;
- }
-
-
//Les fichiers d'entête
#include "SDL/SDL.h"
#include "SDL/SDL_image.h"
#include <string>
//Les attributs de l'écran (640 * 480)
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
const int SCREEN_BPP = 32;
//Les attributs de la feuille de sprites de mario
const int SHEET_WIDTH = 382;
const int SHEET_HEIGHT = 1131;
//Les attributs de la feuille de sprites de mario
const int SHEET_WIDTH2 = 60;
const int SHEET_HEIGHT2 = 25;
//Les surfaces
SDL_Surface *faces = NULL;
SDL_Surface *arriere_plan = NULL;
SDL_Surface *enemis = NULL;
SDL_Surface *screen = NULL;
//La structure d'événements
SDL_Event event;
//les premiers coordonées de mario
int posx=100,posy=415;
//le numero de l'image à afficher
int anim=0;
//proprité de l'enemie
int posx_e=0,posy_e=430, anim_e=0;
//les images de mario
SDL_Rect clip[ 10 ];
//les images des enemis
SDL_Rect clip2[ 5 ];
//charger une image
SDL_Surface *load_image( std::string filename, int *R=NULL, int *G=NULL, int *B=NULL)
{
//L'image qui est chargée
SDL_Surface* loadedImage = NULL;
//L'image optimisée qu'on va utiliser
SDL_Surface* optimizedImage = NULL;
//Chargement de l'image
loadedImage = IMG_Load( filename.c_str() );
//Si l'image est chargée
if( loadedImage != NULL )
{
//Création de l'image optimisée
optimizedImage = SDL_DisplayFormat( loadedImage );
//Libération de l'ancienne image
SDL_FreeSurface( loadedImage );
//Si la création de l'image optimisée s'est bien passée
if( optimizedImage != NULL )
{
Uint32 colorkey = SDL_MapRGB( optimizedImage->format, *R, *G, *B);
SDL_SetColorKey( optimizedImage, SDL_RLEACCEL | SDL_SRCCOLORKEY,colorkey);
}
}
//On retourne l'image optimisée
return optimizedImage;
}
/*
avant je faisais une fonction de chargement pour chaque couleur de transparence ce qui n'été pas une bonne méthode ;)
//charger une image sans le vert
SDL_Surface *load_image( std::string filename )
{
//L'image qui est chargée
SDL_Surface* loadedImage = NULL;
//L'image optimisée qu'on va utiliser
SDL_Surface* optimizedImage = NULL;
//Chargement de l'image
loadedImage = IMG_Load( filename.c_str() );
//Si l'image est chargée
if( loadedImage != NULL )
{
//Création de l'image optimisée
optimizedImage = SDL_DisplayFormat( loadedImage );
//Libération de l'ancienne image
SDL_FreeSurface( loadedImage );
//Si la création de l'image optimisée s'est bien passée
if( optimizedImage != NULL )
{
Uint32 colorkey = SDL_MapRGB( optimizedImage->format, 48, 169, 66);
SDL_SetColorKey( optimizedImage, SDL_RLEACCEL | SDL_SRCCOLORKEY,colorkey);
}
}
//On retourne l'image optimisée
return optimizedImage;
}
//charger une image sans le blanc
SDL_Surface *load_image2( std::string filename )
{
//L'image qui est chargée
SDL_Surface* loadedImage = NULL;
//L'image optimisée qu'on va utiliser
SDL_Surface* optimizedImage = NULL;
//Chargement de l'image
loadedImage = IMG_Load( filename.c_str() );
//Si l'image est chargée
if( loadedImage != NULL )
{
//Création de l'image optimisée
optimizedImage = SDL_DisplayFormat( loadedImage );
//Libération de l'ancienne image
SDL_FreeSurface( loadedImage );
//Si la création de l'image optimisée s'est bien passée
if( optimizedImage != NULL )
{
Uint32 colorkey = SDL_MapRGB( optimizedImage->format, 255, 255, 255);
SDL_SetColorKey( optimizedImage, SDL_RLEACCEL | SDL_SRCCOLORKEY,colorkey);
}
}
//On retourne l'image optimisée
return optimizedImage;
}*/
void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination, SDL_Rect* clip = NULL )
{
SDL_Rect offset;
offset.x = x;
offset.y = y;
//On blitte la surface
SDL_BlitSurface( source, clip, destination, &offset );
}
bool init()
{
//Initialisation de tous les sous-systèmes de SDL
if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 )
{
return false;
}
//Mise en place de l'écran
screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE|SDL_FULLSCREEN );
//S'il y a une erreur lors de la mise en place de l'écran
if( screen == NULL )
{
return false;
}
//Mise en place de la barre caption
SDL_WM_SetCaption( "JV_ ABDOU", NULL );
//Si tout s'est bien passé
return true;
}
bool load_files()
{
//Chargement de la feuille de sprite
int r=48, g=169, b=66;
faces = load_image( "mario.png", &r, &g, &b );
arriere_plan = load_image( "nature.png", &r, &g, &b);
r=255; g=255; b=255;
enemis= load_image( "enemis.png", &r, &g, &b);
//Si tout s'est bien passé
return true;
}
void clean_up()
{
//On libère la feuille de sprites
SDL_FreeSurface( faces );
SDL_FreeSurface( enemis );
SDL_FreeSurface( arriere_plan );
SDL_FreeSurface( screen );
//On quitte SDL
SDL_Quit();
}
//decouper la feuille de mario
void decoupage ()
{
//On coupe la partie en haut à gauche (premier sprite)
clip[ 0 ].x = SHEET_WIDTH/25;
clip[ 0 ].y = 20+2*SHEET_HEIGHT/27;
clip[ 0 ].w = SHEET_WIDTH/15;
clip[ 0 ].h = SHEET_HEIGHT/30;
//On coupe la partie en haut à droite (second sprite)
clip[ 1 ].x = SHEET_WIDTH/25+SHEET_WIDTH/15;
clip[ 1 ].y = 20+2*SHEET_HEIGHT/27;
clip[ 1 ].w = SHEET_WIDTH/15;
clip[ 1 ].h = SHEET_HEIGHT/30;
//On coupe la partie en bas à gauche (troisième sprite)
clip[ 2 ].x = SHEET_WIDTH/25+2*(SHEET_WIDTH/15);
clip[ 2 ].y = 20+2*SHEET_HEIGHT/27;
clip[ 2 ].w = SHEET_WIDTH/15-5;
clip[ 2 ].h = SHEET_HEIGHT/30;
clip[ 3 ].x = SHEET_WIDTH/25+3*(SHEET_WIDTH/15)-5;
clip[ 3 ].y = 20+2*SHEET_HEIGHT/27;
clip[ 3 ].w = SHEET_WIDTH/15-6;
clip[ 3 ].h = SHEET_HEIGHT/30;
clip[ 4 ].x = SHEET_WIDTH/25+4*(SHEET_WIDTH/15)-10;
clip[ 4 ].y = 20+2*SHEET_HEIGHT/27;
clip[ 4 ].w = SHEET_WIDTH/15-6;
clip[ 4 ].h = SHEET_HEIGHT/30;
clip[ 5 ].x = SHEET_WIDTH/25+5*(SHEET_WIDTH/15)+3;
clip[ 5 ].y = 20+2*SHEET_HEIGHT/27;
clip[ 5 ].w = SHEET_WIDTH/15-2;
clip[ 5 ].h = SHEET_HEIGHT/30;
clip[ 6 ].x = SHEET_WIDTH/25+6*(SHEET_WIDTH/15)-20;
clip[ 6 ].y = 20+2*SHEET_HEIGHT/27;
clip[ 6 ].w = SHEET_WIDTH/15-3;
clip[ 6 ].h = SHEET_HEIGHT/30;
clip2[ 0 ].x = 0;
clip2[ 0 ].y = 0;
clip2[ 0 ].w = SHEET_WIDTH2/3;
clip2[ 0 ].h = SHEET_HEIGHT2;
clip2[ 1 ].x = SHEET_WIDTH2/3;
clip2[ 1 ].y = 0;
clip2[ 1 ].w = SHEET_WIDTH2/3;
clip2[ 1 ].h = SHEET_HEIGHT2;
clip2[ 2 ].x = 2*SHEET_WIDTH2/3;
clip2[ 2 ].y = 0;
clip2[ 2 ].w = SHEET_WIDTH2/3;
clip2[ 2 ].h = SHEET_HEIGHT2;
}
//traiter les evenements
void evenement()
{
//Obtenir les KeyStates
Uint8 *keystates = SDL_GetKeyState( NULL );
bool move= false;
if( keystates[ SDLK_UP ] )
{
posy-=3;
move= true;
}
//Si Bas est pressé (la fleche)
if( keystates[ SDLK_DOWN ] )
{
posy+=3;
move= true;
}
//Si Gauche est pressé (la fleche)
if( keystates[ SDLK_LEFT ] )
{
posx-=3;
if ( posx < 0 ) posx++;
move= true;
}
//Si Droite est pressé (la fleche)
if( keystates[ SDLK_RIGHT ] )
{
posx+=3;
if (posx >= SCREEN_WIDTH-15 ) posx--;
move= true;
}
if ( move == true ) anim++;
else anim = 6;
if ( anim == 7) anim = 0;
}
void evenement_enemis()
{
//cette fonction permet l'animation de l'enemis
apply_surface( posx_e, posy_e, enemis, screen, &clip2[anim_e] );
//changer la position de l'enemi
posx_e++;
//changé l'animation
anim_e++;
if ( posx_e == SCREEN_WIDTH ) posx_e=0;
if (anim_e == 2 ) anim_e=0;
}
int main( int argc, char* args[] )
{
//Ce qui va nous permettre de quitter
bool quit = false;
//Initialisation
if( init() == false )
{
return 1;
}
//Chargement des fichiers
if( load_files() == false )
{
return 1;
}
decoupage();
//Tant que l'utilisateur n'a pas quitter
while( quit == false )
{
//preparer l'arriere plan
apply_surface( 0, 0, arriere_plan, screen);
//traiter les evenement clavier
evenement();
//preparer le personnage mario
apply_surface( posx, posy, faces, screen, &clip[anim] );
//si l'enemi n'est pas toucher
evenement_enemis();
//afficher
SDL_Flip( screen);
//Tant qu'il y a un événement
while( SDL_PollEvent( &event ) )
{
switch (event.key.keysym.sym)
{
case SDLK_ESCAPE: /* Appui sur la touche Echap, on arrête le programme */
quit = true;
break;
}
}
}
//On libère les images et on quitte SDL
clean_up();
return 0;
}
Historique
- 15 août 2008 13:17:47 :
- suite à une remarque faite par mon ami "ALUCARDS" qui m'a proposer de faire qu'une seule fonction de "load_image" qui prendra en paramètre la couleur de transparence, j'ai modifié la source toute en laissant les deux fonctions que j'utilisais en commentaire.
merci "ALUCARDS" ;).
- 15 août 2008 20:25:42 :
- ;).
- 03 septembre 2008 13:53:53 :
- Suppression d'une instruction inutile. (Merci ALUCARDS)
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|