Accueil > > > DÉMINEUR EN SDL
DÉMINEUR EN SDL
Information sur la source
Description
Voilà un démineur classique. L'intéret de cette source réside dans l'utilisation de la SLD et la gestion des évènements souris. On peut aussi voir comment charger et afficher des images. Et éventuellement on peux jouer :D
Source
- #include <stdlib.h>
- #include <stdio.h>
- #include <SDL/SDL.h>
- #include <string>
- #include <iostream>
- using namespace std;
-
- # define NBRE_MINES 40
-
- //
- // PROGRAMME POUR OBTENIR UN NOMBRE ALEATOIRE ENTRE 1 ET MAXI
- //
- int aleat(int maxi)
- {
- return 1 + (rand() % maxi);
- }
-
- //
- // PROGRAMME DE GESTION DES ACTIONS
- //
- void execute_action(int (&matr)[21][16], string &status, string action, int a=0, int b=0)
- {
- if(action=="drapeau" && matr[a][b]<0)
- {
- if(matr[a][b]==-2 || matr[a][b]==-4) {matr[a][b]++;}
- else {matr[a][b]--;}
- int nbre_drapeaux=0; bool bon_placement=true; int i,j;
- for(i=1; i<=19; i++)
- {
- for(j=1; j<=14; j++)
- {
- switch(matr[i][j])
- {
- case -4:
- nbre_drapeaux++;
- break;
- case -2:
- nbre_drapeaux++;
- bon_placement=false;
- break;
- }
- }
- }
- if(nbre_drapeaux==NBRE_MINES && bon_placement) status = "gagne";
- if(nbre_drapeaux==NBRE_MINES && !bon_placement) status = "perdu";
- }
-
- if(action=="essai" && matr[a][b]==-3)
- {
- status="perdu";
- }
-
- if(action=="essai" && matr[a][b]==-1)
- {
- int k=0;
- if(matr[a-1][b-1]<=-3) k++;
- if(matr[a-1][b]<=-3) k++;
- if(matr[a-1][b+1]<=-3) k++;
- if(matr[a][b-1]<=-3) k++;
- if(matr[a][b+1]<=-3) k++;
- if(matr[a+1][b-1]<=-3) k++;
- if(matr[a+1][b]<=-3) k++;
- if(matr[a+1][b+1]<=-3) k++;
- matr[a][b]=k;
- if(k==0)
- {
- if(a != 1 && b!= 1) execute_action(matr,status,"essai",a-1,b-1);
- if(a != 1) execute_action(matr,status,"essai",a-1,b);
- if(a != 1 && b != 14) execute_action(matr,status,"essai",a-1,b+1);
- if(b != 1) execute_action(matr,status,"essai",a,b-1);
- if(b != 14) execute_action(matr,status,"essai",a,b+1);
- if(a != 19 && b!= 1) execute_action(matr,status,"essai",a+1,b-1);
- if(a != 19) execute_action(matr,status,"essai",a+1,b);
- if(a != 19 && b != 14) execute_action(matr,status,"essai",a+1,b+1);
- }
- }
- }
-
- //
- // PROGRAMME DE GESTION DES EVENEMENTS
- //
- void gere_even(int (&matr)[21][16], string &status, int &curseurX, int &curseurY)
- {
- bool reste = true;
- string action="";
- SDL_Event event;
- while (reste)
- {
- SDL_Delay(5);
- SDL_WaitEvent(&event);
- switch(event.type)
- {
- case SDL_QUIT:
- status="quitte";
- reste=false;
- break;
- case SDL_MOUSEMOTION:
- if(event.button.x>=20 && event.button.x<779 && event.button.y>=20 && event.button.y<579)
- {
- curseurX = (event.button.x-19)/40 + 1;
- curseurY = (event.button.y-19)/40 + 1;
- }
- else
- {
- curseurX = 0; curseurY = 0;
- }
- reste=false;
- break;
- case SDL_MOUSEBUTTONUP:
- switch(event.button.button)
- {
- case SDL_BUTTON_RIGHT:
- if(curseurX != 0) execute_action(matr, status, "drapeau", curseurX, curseurY);
- break;
- case SDL_BUTTON_LEFT:
- if(curseurX != 0) execute_action(matr, status, "essai", curseurX, curseurY);
- break;
- }
- reste=false;
- break;
- }
- }
- }
-
-
- //
- // PROGRAMME DE CONSTRUCTION DE LA FENETRE
- //
- void construction(int (&matr)[21][16], SDL_Surface *&ecran ,int &curseurX, int &curseurY, int a, int b)
- {
- if(a==0) SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 17, 206, 112));
- if(a==-1) SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 17+(238*b)/30, 206-(206*b)/30, 112-(112*b)/30));
- if(a==1) SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 17+(63*b)/30, 206-(126*b)/30, 112+(143*b)/30));
- SDL_Surface *rectangle;
- SDL_Rect position;
- int i,j;
- for (i=1; i<=14; i++)
- {
- for(j=1; j<=19; j++)
- {
- position.x = 40*j-20;
- position.y = 40*i-20;
- switch(matr[j][i])
- {
- case -4:
- rectangle = SDL_LoadBMP("bloc_drapeau.bmp");
- break;
- case -2:
- rectangle = SDL_LoadBMP("bloc_drapeau.bmp");
- break;
- case 0:
- rectangle = SDL_LoadBMP("bloc_0.bmp");
- break;
- case 1:
- rectangle = SDL_LoadBMP("bloc_1.bmp");
- break;
- case 2:
- rectangle = SDL_LoadBMP("bloc_2.bmp");
- break;
- case 3:
- rectangle = SDL_LoadBMP("bloc_3.bmp");
- break;
- case 4:
- rectangle = SDL_LoadBMP("bloc_4.bmp");
- break;
- case 5:
- rectangle = SDL_LoadBMP("bloc_5.bmp");
- break;
- case 6:
- rectangle = SDL_LoadBMP("bloc_6.bmp");
- break;
- case 7:
- rectangle = SDL_LoadBMP("bloc_7.bmp");
- break;
- case 8:
- rectangle = SDL_LoadBMP("bloc_8.bmp");
- break;
- case 100:
- rectangle = SDL_LoadBMP("bloc_erreur.bmp");
- break;
- default:
- rectangle = SDL_LoadBMP("bloc_inconnu.bmp");
- break;
- }
- SDL_BlitSurface(rectangle, NULL, ecran, &position);
- SDL_FreeSurface(rectangle);
- }
- }
- rectangle = SDL_CreateRGBSurface(SDL_HWSURFACE, 760, 1, 32, 0, 0, 0, 0);
- SDL_FillRect(rectangle, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
- position.x=19;
- for(i=1; i<= 15; i++)
- {
- position.y=40*i-21;
- SDL_BlitSurface(rectangle, NULL, ecran, &position);
- }
- rectangle = SDL_CreateRGBSurface(SDL_HWSURFACE, 1, 560, 32, 0, 0, 0, 0);
- SDL_FillRect(rectangle, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
- position.y=19;
- for(i=1; i<= 20; i++)
- {
- position.x=40*i-21;
- SDL_BlitSurface(rectangle, NULL, ecran, &position);
- }
-
- if(curseurX != 0)
- {
- if(matr[curseurX][curseurY]==-1 || matr[curseurX][curseurY]==-3)
- {
- rectangle = SDL_LoadBMP("bloc_selectionne.bmp");
- position.x = 40*curseurX-20;
- position.y = 40*curseurY-20;
- SDL_BlitSurface(rectangle, NULL, ecran, &position);
- SDL_FreeSurface(rectangle);
- }
- }
-
- SDL_Flip(ecran);
- }
-
- //
- // MAIN
- //
- int main(int argc, char** argv)
- {
- srand(time(NULL));
- SDL_Surface *ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
- SDL_WM_SetCaption("Demineur", NULL);
- SDL_WM_SetIcon(SDL_LoadBMP("icone.bmp"), NULL);
- int matr[21][16]; int i,j,k; //Initialisation de MATR, qui contiendra les valeurs
- for(i=0; i<=20; i++) //matr[i][j] contiendra l'élément (i,j) sachant que ceux du bord vaudront toujours -1
- { // -4 : Pas découvert, Drapeau , Mine
- for(j=0; j<=15; j++) // -3 : Pas découvert, Pas Drapeau, Mine
- { // -2 : Pas découvert, Drapeau , Pas mine
- matr[i][j]=-1; // -1 : Pas découvert, Pas drapeau, Pas mine
- } // 0..8 : Découvert, a proximité il y a 0..8 mines
- } // 100 : Erreur, une mine !
- for(k=1; k<=NBRE_MINES; k++) //
- { //
- i=aleat(19); j=aleat(14); //
- if(matr[i][j] != -3) //
- { matr[i][j] = -3; //
- cout<<"Mine "<<k<<" posée en ["<<i<<"x"<<j<<"]"<<endl;
- } //
- else //
- { k--; } //
- } //
-
- int curseurX=0, curseurY=0; //CURSEUR qui contient la donnée en X et Y de la case en cours. OxO : en dehors.
- string status = "en jeu"; //STATUS, qui donne le status en cours.
-
- while(status=="en jeu")
- {
- construction(matr, ecran, curseurX, curseurY,0,0);
- gere_even(matr, status, curseurX, curseurY);
- }
-
- if(status=="perdu")
- {
- for(i=1; i<=19; i++)
- {
- for(j=1; j<=14; j++)
- {
- if(matr[i][j]==-3) matr[i][j]=100;
- if(matr[i][j]==-2) matr[i][j]=-1;
- }
- }
- for(i=1; i<=30; i++)
- {
- construction(matr, ecran, curseurX, curseurY,-1,i);
- }
- }
-
- if(status=="gagne")
- {
- for(i=1; i<=30; i++)
- {
- construction(matr, ecran, curseurX, curseurY,1,i);
- }
- }
-
- if(status != "quitte")
- {
- SDL_Event event; bool fin=false;
- while(!fin)
- {
- SDL_WaitEvent(&event);
- if(event.type == SDL_QUIT) fin=true;
- }
- }
-
- SDL_Quit();
- return 1;
- }
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <string>
#include <iostream>
using namespace std;
# define NBRE_MINES 40
//
// PROGRAMME POUR OBTENIR UN NOMBRE ALEATOIRE ENTRE 1 ET MAXI
//
int aleat(int maxi)
{
return 1 + (rand() % maxi);
}
//
// PROGRAMME DE GESTION DES ACTIONS
//
void execute_action(int (&matr)[21][16], string &status, string action, int a=0, int b=0)
{
if(action=="drapeau" && matr[a][b]<0)
{
if(matr[a][b]==-2 || matr[a][b]==-4) {matr[a][b]++;}
else {matr[a][b]--;}
int nbre_drapeaux=0; bool bon_placement=true; int i,j;
for(i=1; i<=19; i++)
{
for(j=1; j<=14; j++)
{
switch(matr[i][j])
{
case -4:
nbre_drapeaux++;
break;
case -2:
nbre_drapeaux++;
bon_placement=false;
break;
}
}
}
if(nbre_drapeaux==NBRE_MINES && bon_placement) status = "gagne";
if(nbre_drapeaux==NBRE_MINES && !bon_placement) status = "perdu";
}
if(action=="essai" && matr[a][b]==-3)
{
status="perdu";
}
if(action=="essai" && matr[a][b]==-1)
{
int k=0;
if(matr[a-1][b-1]<=-3) k++;
if(matr[a-1][b]<=-3) k++;
if(matr[a-1][b+1]<=-3) k++;
if(matr[a][b-1]<=-3) k++;
if(matr[a][b+1]<=-3) k++;
if(matr[a+1][b-1]<=-3) k++;
if(matr[a+1][b]<=-3) k++;
if(matr[a+1][b+1]<=-3) k++;
matr[a][b]=k;
if(k==0)
{
if(a != 1 && b!= 1) execute_action(matr,status,"essai",a-1,b-1);
if(a != 1) execute_action(matr,status,"essai",a-1,b);
if(a != 1 && b != 14) execute_action(matr,status,"essai",a-1,b+1);
if(b != 1) execute_action(matr,status,"essai",a,b-1);
if(b != 14) execute_action(matr,status,"essai",a,b+1);
if(a != 19 && b!= 1) execute_action(matr,status,"essai",a+1,b-1);
if(a != 19) execute_action(matr,status,"essai",a+1,b);
if(a != 19 && b != 14) execute_action(matr,status,"essai",a+1,b+1);
}
}
}
//
// PROGRAMME DE GESTION DES EVENEMENTS
//
void gere_even(int (&matr)[21][16], string &status, int &curseurX, int &curseurY)
{
bool reste = true;
string action="";
SDL_Event event;
while (reste)
{
SDL_Delay(5);
SDL_WaitEvent(&event);
switch(event.type)
{
case SDL_QUIT:
status="quitte";
reste=false;
break;
case SDL_MOUSEMOTION:
if(event.button.x>=20 && event.button.x<779 && event.button.y>=20 && event.button.y<579)
{
curseurX = (event.button.x-19)/40 + 1;
curseurY = (event.button.y-19)/40 + 1;
}
else
{
curseurX = 0; curseurY = 0;
}
reste=false;
break;
case SDL_MOUSEBUTTONUP:
switch(event.button.button)
{
case SDL_BUTTON_RIGHT:
if(curseurX != 0) execute_action(matr, status, "drapeau", curseurX, curseurY);
break;
case SDL_BUTTON_LEFT:
if(curseurX != 0) execute_action(matr, status, "essai", curseurX, curseurY);
break;
}
reste=false;
break;
}
}
}
//
// PROGRAMME DE CONSTRUCTION DE LA FENETRE
//
void construction(int (&matr)[21][16], SDL_Surface *&ecran ,int &curseurX, int &curseurY, int a, int b)
{
if(a==0) SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 17, 206, 112));
if(a==-1) SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 17+(238*b)/30, 206-(206*b)/30, 112-(112*b)/30));
if(a==1) SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 17+(63*b)/30, 206-(126*b)/30, 112+(143*b)/30));
SDL_Surface *rectangle;
SDL_Rect position;
int i,j;
for (i=1; i<=14; i++)
{
for(j=1; j<=19; j++)
{
position.x = 40*j-20;
position.y = 40*i-20;
switch(matr[j][i])
{
case -4:
rectangle = SDL_LoadBMP("bloc_drapeau.bmp");
break;
case -2:
rectangle = SDL_LoadBMP("bloc_drapeau.bmp");
break;
case 0:
rectangle = SDL_LoadBMP("bloc_0.bmp");
break;
case 1:
rectangle = SDL_LoadBMP("bloc_1.bmp");
break;
case 2:
rectangle = SDL_LoadBMP("bloc_2.bmp");
break;
case 3:
rectangle = SDL_LoadBMP("bloc_3.bmp");
break;
case 4:
rectangle = SDL_LoadBMP("bloc_4.bmp");
break;
case 5:
rectangle = SDL_LoadBMP("bloc_5.bmp");
break;
case 6:
rectangle = SDL_LoadBMP("bloc_6.bmp");
break;
case 7:
rectangle = SDL_LoadBMP("bloc_7.bmp");
break;
case 8:
rectangle = SDL_LoadBMP("bloc_8.bmp");
break;
case 100:
rectangle = SDL_LoadBMP("bloc_erreur.bmp");
break;
default:
rectangle = SDL_LoadBMP("bloc_inconnu.bmp");
break;
}
SDL_BlitSurface(rectangle, NULL, ecran, &position);
SDL_FreeSurface(rectangle);
}
}
rectangle = SDL_CreateRGBSurface(SDL_HWSURFACE, 760, 1, 32, 0, 0, 0, 0);
SDL_FillRect(rectangle, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
position.x=19;
for(i=1; i<= 15; i++)
{
position.y=40*i-21;
SDL_BlitSurface(rectangle, NULL, ecran, &position);
}
rectangle = SDL_CreateRGBSurface(SDL_HWSURFACE, 1, 560, 32, 0, 0, 0, 0);
SDL_FillRect(rectangle, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
position.y=19;
for(i=1; i<= 20; i++)
{
position.x=40*i-21;
SDL_BlitSurface(rectangle, NULL, ecran, &position);
}
if(curseurX != 0)
{
if(matr[curseurX][curseurY]==-1 || matr[curseurX][curseurY]==-3)
{
rectangle = SDL_LoadBMP("bloc_selectionne.bmp");
position.x = 40*curseurX-20;
position.y = 40*curseurY-20;
SDL_BlitSurface(rectangle, NULL, ecran, &position);
SDL_FreeSurface(rectangle);
}
}
SDL_Flip(ecran);
}
//
// MAIN
//
int main(int argc, char** argv)
{
srand(time(NULL));
SDL_Surface *ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
SDL_WM_SetCaption("Demineur", NULL);
SDL_WM_SetIcon(SDL_LoadBMP("icone.bmp"), NULL);
int matr[21][16]; int i,j,k; //Initialisation de MATR, qui contiendra les valeurs
for(i=0; i<=20; i++) //matr[i][j] contiendra l'élément (i,j) sachant que ceux du bord vaudront toujours -1
{ // -4 : Pas découvert, Drapeau , Mine
for(j=0; j<=15; j++) // -3 : Pas découvert, Pas Drapeau, Mine
{ // -2 : Pas découvert, Drapeau , Pas mine
matr[i][j]=-1; // -1 : Pas découvert, Pas drapeau, Pas mine
} // 0..8 : Découvert, a proximité il y a 0..8 mines
} // 100 : Erreur, une mine !
for(k=1; k<=NBRE_MINES; k++) //
{ //
i=aleat(19); j=aleat(14); //
if(matr[i][j] != -3) //
{ matr[i][j] = -3; //
cout<<"Mine "<<k<<" posée en ["<<i<<"x"<<j<<"]"<<endl;
} //
else //
{ k--; } //
} //
int curseurX=0, curseurY=0; //CURSEUR qui contient la donnée en X et Y de la case en cours. OxO : en dehors.
string status = "en jeu"; //STATUS, qui donne le status en cours.
while(status=="en jeu")
{
construction(matr, ecran, curseurX, curseurY,0,0);
gere_even(matr, status, curseurX, curseurY);
}
if(status=="perdu")
{
for(i=1; i<=19; i++)
{
for(j=1; j<=14; j++)
{
if(matr[i][j]==-3) matr[i][j]=100;
if(matr[i][j]==-2) matr[i][j]=-1;
}
}
for(i=1; i<=30; i++)
{
construction(matr, ecran, curseurX, curseurY,-1,i);
}
}
if(status=="gagne")
{
for(i=1; i<=30; i++)
{
construction(matr, ecran, curseurX, curseurY,1,i);
}
}
if(status != "quitte")
{
SDL_Event event; bool fin=false;
while(!fin)
{
SDL_WaitEvent(&event);
if(event.type == SDL_QUIT) fin=true;
}
}
SDL_Quit();
return 1;
}
Conclusion
L'exécutable est renommé en .ex_ à renommer en .exe Pour le lancer, décompresser la totalité du zip dans un répertoire, seuls les fichiers .dev, .layout et .cpp ne sont pas nécessaires.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Librairie graphique et controle... [ par frednet01 ]
J'ai un projet personnelle, qui consisterais a déplacer des images (des pions) sur une autre image (une carte) avec différent effet graphique ( smog,
initiation interface graphique [ par developvbdebut ]
Bonjour tout le mondeApres avoir passé de moi à étudié la language c en mode console, je souhaiterais m'initier au interface graphique en c.Je souhai
Position du curseur. [ par mohdaef ]
Bonsoir tout le monde. Je me trouve confronté à un légé soucis. J'utilise la SDL afin de créer une fenêtre initialisée avec OpenGl. J'utilise donc la
MASTERMIND (MODE GRAPHIQUE EN SDL) [ par imadonline ]
slt tt le monde,je viens de m'initier un peu dans le SDL mé g encor un problém avec les sprites et la gestion de clavier,etant donné ke
Recherche d'une source de calculatrice graphique [ par max12 ]
Voila je connais l'existence d'une source sur le site même, d'une calculatrice avec un affichage graphique très avancé qui pouvais r
SDL et FPS [ par tazkeum ]
Bonjour, Voici un petit code qui ne fait rien d'autre qu'afficher un ecran noir. Le calcul des FPS donne 50 images par secondes. C'est lent pour un P4
comment tester les collisions avec sdl? [ par StrikerFred ]
Bonjour, je commence à faire des petits prog en me servant de sdlJ'aimerais juste savoir comment on teste les collisions ? la manière plus e
SDL getion de souris [ par imadonline ]
slt tout le monde,g pa trouvé la ou apprendr la gestion de souri en SDL g besoin de votr aid
Message d'erreur de SDL [ par The_Sin ]
Salut,J'ai fais un programme en SDL en C, il marche bien mais que je le lance dans un terminal ( je suis sous Ubuntu Linux) à la fermeture je m'a
Lire des données puis exploiter sur un graphique [ par Refrigerator ]
Bonjour à tous.Dans le cadre de mes TPE, cette année, je dois créer un logiciel [langage de programmation au choix] qui permet de lire
|
Derniers Blogs
[TECHDAYS2012] OUI J'Y SERAI![TECHDAYS2012] OUI J'Y SERAI! par JeremyJeanson
Bonsoir, Certes, je l'annonce avec un peu de retard, mais je serai effectivement au Techdays demain. Comme l'an dernier, je participerai au programme ATE (Ask The Expert). Si vous avez des questions Workflow, WCF, AppFabric ou plus généralement .net, n'hé...
Cliquez pour lire la suite de l'article par JeremyJeanson TFS INTEGRATION TOOLS - SUIVI DES SYNCHRONISATIONS AVEC REPORTING SERVICESTFS INTEGRATION TOOLS - SUIVI DES SYNCHRONISATIONS AVEC REPORTING SERVICES par vfabing
Afin de s'assurer du bon fonctionnement des différentes synchronisations effectuées par les TFS Integration Tools, 2 rapports sont présents dès l'installation. Il suffit alors d'effectuer les manipulations suivantes pour pouvoir les visualiser : Loca...
Cliquez pour lire la suite de l'article par vfabing CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks
Forum
RE : ARBRE BINAIRERE : ARBRE BINAIRE par pacotheking
Cliquez pour lire la suite par pacotheking
Logiciels
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 COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.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 LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|