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
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
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
probléme de linker "SDL" [ par yoshiv ]
Bonjour, bonsoir. J'ai un probléme avec un exercice (morpion en SDL) [u]mon system[/u]: vista. visual c++ express 2008. Le code ou il y a le probléme
C++ interface graphique [ par maohacker ]
Salut a tous je suis un programmeur C ki sinitie au C++ et je voudrai savoir kel environement me conseillez vous? PS: jutilise Dev Cpp
problème sdl [ par gameditor ]
Je ne sait pas me servir de codes::bloks pour la sdl et à ton besoin d'apprendre le c++ qu'est qu'un code sources[^^choc][^^confus2][^^confus2][^^conf
moteur physique [ par Jackyzgood ]
Bonjour à tous ! J'essaye actuellement de créer une fonction qui me gère des trajectoires simple dans un champ de pesanteur avec rebond. Mon problème
[HELP] Créer une fenêtre GUI de forme personnalisé avec SDL [ par etoileastrale ]
Bonjour, je souhaite en utilisant la bibliothèque SDL et VC++ 2008 pour créer une fenêtre non pas carré comme d'habitude mais de forme personnalisé.
tablette graphique wacom bamboo alterner mode souris / stylet Code por gerer la tablette? [ par gregroar ]
Bonjour voilà mon probleme: je souhaiterais pouvoir gerer moi meme les réglages de ma tablette graphique et recupérer notemment les clics gauche et le
|
Derniers Blogs
[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Arnault Nouvel et Antoine Dongois Le processus à prendre : Apprendre (découvrir la plateforme) Préparer (documenter l'historique et choisir la méthode de MAJ) Test (Test de MAJ) Implémenter (Effectuer la MAJ) Valid...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOURTECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOUR par ROMELARD Fabrice
Après un retour sur l'histoire des TechDays de Paris et le fait que ce soit le plus gros event MS au monde (du fait de sa gratuité), le président de MS France (Eric Boustoullier) a fait une présentation de la vision Microsoft pour les années à venir...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
WIN APIWIN API par omarino_007
Cliquez pour lire la suite par omarino_007
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|