IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Programme démineur java


Sujet :

avec Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Programme démineur java
    Bonjour à tous ! J'ai commencé le java il y a très peu de temps et je dois créer un démineur. Le problème étant que je ne comprends pas ce que je dois modifier afin de réussir à le compiler. Si vous réussissiez à m'aider vous me seriez d'un grand secours. Merci d'avance !

    Voici le programme:

    import java.util.Scanner;
    public class Demi {

    int lignes,colonnes; // lignes les lignes, colonnes les colonnes
    int NMA; // Nombre de mines autour
    int NbMines; // le nombre de mines choisi par le joueur
    int choix; // le choix effectué par le joueur pour découvrir ou placer un drapeau
    int nbCaseVue; // nombre de case dévoilée

    Scanner sc = new Scanner(System.in);

    char [][]t1 = new char [10][10];; // grille de jeu
    char [][]t2 = new char [10][10]; // la grille avec les mines




    /*
    * FONCTION INITIALISATION
    */
    public void Init()
    {
    for(lignes=0;lignes<10;lignes++)
    {
    for(colonnes=0;colonnes<10;colonnes++)
    {
    t1[lignes][colonnes]='-';//' 'implique case cachée
    t2[lignes][colonnes]='0';
    }
    }
    }

    /*
    * FONCTION PLACER LES MINES
    */
    public void PlaceMines()
    {
    int CompteMines;//compteur de mines
    for (CompteMines=0;CompteMines<NbMines;CompteMines++)
    {
    lignes=(int) (Math.random()%10);//on choisit la ligne de manière aléatoire
    colonnes=(int) (Math.random()%10);//on choisit la colonne de manière aléatoire
    if(t2[lignes][colonnes]=='0')//On vérifie que la case est libre
    {
    t2[lignes][colonnes]='M';//on place un M pour indiquer qu'il y a une mine
    }

    else
    {
    NbMines++;//Sinon, il y a déjà un M et il faut faire un tour de plus
    }
    }
    }

    /*
    * FONCTION QUI REGARDE SI IL Y A UNE MINE
    * Fonction qui permet de savoir il y a une mine sur la case donnée en paramètre
    * retourne 1 si il y a une case sinon 0
    */
    int RegarderMine(final int _lignes, final int _colonnes)
    {
    if( _lignes >= 0 && _lignes < 10 && _colonnes >= 0 && _colonnes < 10 && t2[_lignes][_colonnes]=='M')
    return 1;
    return 0;
    }


    /*
    * FONCTION CALCULER LE NB DE MINES AUTOUR
    * fonction équivalente à NbMinesAutour() mais qui prend les paramètres de position de case
    * retourne le nombre de mine qui se trouve autour d'une position
    */
    int NbMinesAutourBis(final int _lignes, final int _colonnes)
    {
    int NbMA = 0;

    NbMA+=RegarderMine(_lignes+1, _colonnes);
    NbMA+=RegarderMine(_lignes+1, _colonnes+1);
    NbMA+=RegarderMine(_lignes, _colonnes+1);

    NbMA+=RegarderMine(_lignes-1, _colonnes);
    NbMA+=RegarderMine(_lignes-1, _colonnes-1);
    NbMA+=RegarderMine(_lignes, _colonnes-1);

    NbMA+=RegarderMine(_lignes+1, _colonnes-1);
    NbMA+=RegarderMine(_lignes-1, _colonnes+1);

    return NbMA;
    }

    /*
    * FONCTION QUI CHERCHE LES CASES PROCHE DES MINES
    * fonction appelé que si le nombre de mine qui se trouve autour d'elle est 0
    * fonction récursive, qui demande a ses voisins de devoilé leur case
    */
    public void DevoileCase(final int _lignes, final int _colonnes)
    {
    if( _lignes >= 0 && _lignes < 10 && _colonnes >= 0 && _colonnes < 10 && t1[_lignes][_colonnes]=='-')
    {
    int NbMA = NbMinesAutourBis(_lignes,_colonnes);
    t1[_lignes][_colonnes]=(char) ('0'+NbMA);
    ++nbCaseVue;

    if( NbMA == 0 ) // partie récursive
    {
    DevoileCase(_lignes+1,_colonnes);
    DevoileCase(_lignes+1,_colonnes+1);
    DevoileCase(_lignes,_colonnes+1);

    DevoileCase(_lignes-1,_colonnes);
    DevoileCase(_lignes-1,_colonnes-1);
    DevoileCase(_lignes,_colonnes-1);

    DevoileCase(_lignes-1,_colonnes+1);
    DevoileCase(_lignes+1,_colonnes-1);
    }
    }
    }

    /*
    * FONCTION AFFICHER LA GRILLE DE JEU
    * affiche le tableau JEU
    */
    public void AfficheJeu()
    {
    System.out.println("\n\n" );
    System.out.println(" | 1 2 3 4 5 6 7 8 9 10\n" );
    System.out.println("___|______________________________\n" );
    for(lignes=0;lignes<10;lignes++)
    {
    if(lignes<9)
    System.out.println(" %d | ",lignes+1);
    else
    System.out.println("%d | ",lignes+1);
    for(colonnes=0;colonnes<10;colonnes++)
    {
    System.out.println("%c ",t1[lignes][colonnes]);
    }
    System.out.println("\n" );
    }
    }

    /*
    * FONCTION CALCULER LE NB DE MINES AUTOUR
    * renvoie le nombre de mine autour d'une position qui se trouve en i j
    * renvoie -1 si on se trouve sur une mine sinon le nombre de mine autour
    */
    int NbMinesAutour()
    {
    NMA=0;
    if(t2[lignes][colonnes]=='M') // on se trouve sur une mine
    {
    NMA = -1;
    }
    else
    {
    NMA+=RegarderMine(lignes+1, colonnes);
    NMA+=RegarderMine(lignes+1, colonnes+1);
    NMA+=RegarderMine(lignes, colonnes+1);
    NMA+=RegarderMine(lignes-1, colonnes);
    NMA+=RegarderMine(lignes-1, colonnes-1);
    NMA+=RegarderMine(lignes, colonnes-1);

    NMA+=RegarderMine(lignes+1, colonnes-1);
    NMA+=RegarderMine(lignes-1, colonnes+1);
    }
    return NMA;
    }

    /*
    * FONCTION JOUER
    * dévoiler une case ou placer un drapeau
    */
    public void Jouer()
    {
    switch (choix)
    {
    case 1 : // On dévoile une case
    if( NbMinesAutour() != -1 ) // Si on est pas sur une mine
    {
    if( NMA == 0 ) // Si on n'a pas de mine comme voisin
    DevoileCase(lignes,colonnes);
    else // Sinon, si on a au moins une mine comme voisin
    {
    t1[lignes][colonnes]=(char) ('0'+NMA);
    ++nbCaseVue;
    }
    }
    break;

    case 2 : // On met un drapeau
    t1[lignes][colonnes]='D';
    break;
    }
    }

    /*
    * FONCTION CHOISIR
    * On demande au joueur de choisir une case
    */
    public void Choisir()
    {
    System.out.println("\n\nVeuillez entrer la case choisie (numero de ligne [espace] numero de colonne):\t" );
    int T = sc.nextInt ();
    Comptes = new double[T];("%d %d",&lignes,&colonnes);
    System.out.println("Vous avez choisi la case (%d,%d).\n Que voulez-vous faire ?\n",lignes,colonnes);
    lignes-=1;
    colonnes-=1;

    System.out.println("i : %d | j : %d\n",lignes,colonnes);

    System.out.println("\t1. Decouvrir une case\n" );
    System.out.println("\t2. Placer un drapeau" );
    do
    {
    System.out.println("\t\tVotre choix : " );
    int T = sc.nextInt ();
    Comptes = new double[T];("%d",&choix);
    }
    while (choix!=1 && choix!=2); // faut pas se compliquer tu as que 2 choix donc que 2 comparaisons
    }

    /*
    * Fonction main
    * lancement du jeu
    */
    int main()
    {
    sRand((time)Null);

    //Afficher le début du jeu
    System.out.println(" ________________________________\n" );
    System.out.println("| |\n" );
    System.out.println("| Démineur |\n" );
    System.out.println("|________________________________|\n\n" );

    Init();

    do // Choisir le nombre de mine dans le demineur
    {
    System.out.println("\nCombien de mines voulez-vous ?(entre 1 et 50)\n\n" );
    int T = sc.nextInt ();
    Comptes = new double[T];("%d",&NbMines);
    }
    while(NbMines<=0 && NbMines>50); // nombre de mines comprise entre 1 et 50 sinon on redemande

    System.out.println("D'accord, vous avez choisi de jouer avec %d mines\n\n",NbMines);
    PlaceMines();

    System.out.println("Voici la grille des mines pour controle:\n" );
    for(lignes=0;lignes<10;lignes++)
    {
    System.out.println("\t\t\t" );
    for(colonnes=0;colonnes<10;colonnes++)
    {
    System.out.println("%c ",t2[lignes][colonnes]);
    }
    System.out.println("\n" );
    }


    System.out.println("\n\nVoici votre grille : A vous de jouer !\n\n" );
    nbCaseVue=0;
    while( nbCaseVue<(100-NbMines) && NMA != -1 ) // On regarde si on a vu toutes les cases sans mines ou qu'on a touché une mine
    {
    AfficheJeu();
    Choisir();
    Jouer();
    }

    if( NMA != -1 ) // On a gagné
    {
    System.out.println("\n\n\t\tBravo vous avez gagné !" );
    AfficheJeu();
    }
    else // On a perdu
    {
    System.out.println("Vous avez perdu !!!\n\n" );

    System.out.println(" | 1 2 3 4 5 6 7 8 9 10\n" );
    System.out.println("___|______________________________\n" );
    for(lignes=0;lignes<10;lignes++)
    {
    if(lignes<9)
    System.out.println(" %d | ",lignes+1);
    else
    System.out.println("%d | ",lignes+1);
    for(colonnes=0;colonnes<10;colonnes++)
    System.out.println("%c ",t2[lignes][colonnes]);
    System.out.println("\n" );
    }
    }

    System.out.println("pause" );
    return 0;
    }
    }

  2. #2
    Membre averti
    Avatar de omar344
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2007
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2007
    Messages : 287
    Points : 301
    Points
    301
    Par défaut
    Bonsoir,
    Tout d'abord penses à utiliser la balise code pour poster des codes,
    en inspectant ton code, j'ai relevé des points:
    * Il faut revoir les paramètres passé à System.out.println dans les méthodes AfficheJeu(), Choisir() et main()
    * Dans la méthode Choisir il y a une variables non définie: Comptes
    * Dans ta méthode main() il y a la ligne: je sais pas d'où vient time et Null??

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Tout d'abord merci de ton aide. J'ai supprimé le srand qui était inutile. J'ai trouvé les erreurs dont tu m'as parlé c'est à cause des %c et %d que j'ai inséré dans le system.out.println, par contre je ne sais pas par quoi les remplacés.. Pourrais-tu m'aider ? Stp

  4. #4
    Membre averti
    Avatar de omar344
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2007
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2007
    Messages : 287
    Points : 301
    Points
    301
    Par défaut
    Bonsoir, j'aimerai savoir que veut dire cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("i : %d | j : %d\n", lignes, colonnes);
    Si ça tu veux dire par ça que le premier d prend la valeur de lignes et le second prend la valeur de colonnes, fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("i :"+lignes+"| j :"+colonnes+" \n");
    L'erreur que tu fais c'est que la méthode println(), accepte un seul paramètre et toi tu lui passe plusieurs

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Effectivement, je viens de vérifier et mon erreur concerne bien ce que tu viens de me signaler. Je vais essayé de voir ce que je peux faire pour corriger mon programme. En tout cas Merci !

Discussions similaires

  1. conseils pour bien programmer en Java
    Par Patrice Henrio dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 01/09/2007, 00h05
  2. Tutorial bonne pratique du programmation avec JAVA
    Par menzlitsh dans le forum Langage
    Réponses: 10
    Dernier message: 02/07/2007, 12h56
  3. Réponses: 11
    Dernier message: 15/02/2007, 18h11
  4. Programmation objet Java
    Par vandamme dans le forum Langage
    Réponses: 4
    Dernier message: 06/06/2006, 20h51
  5. [livre que faire ?]Programmer en Java
    Par paterson dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 11/04/2006, 00h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo