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 :

Projet : la récolte des oeufs de Pâques


Sujet :

avec Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Mai 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Projet : la récolte des oeufs de Pâques
    Bonjour,

    je suis débutant et prends des cours de programmation java. Pour le moment je n'ai vu que les notions de bases en java, c'est à dire les boucles, les conditions, les tableaux uni et bidimensionnel, les méthodes et l'objet String c'est tout. J'ai un projet à rendre dans lequel je ne dois faire appel à aucun objet et qui doit tourner en ne créant qu'une seule classe et à l'intérieur mon main et mes méthodes. J'arrive à afficher une grille, enfin avec les moyens du bords et j'arrive à mettre dans ma grille mes objets. Par contre j'ai vachement du mal à avancer et à savoir comment écrire les instructions de mes méthodes. Voici le sujet :
    Énoncé

    Le lapin de Pâques a distribué un certain nombre d’oeufs et l’objectif de ce projet est de les récupérer, puis de les ramener à la maison. L’aire de jeu est représentée par une matrice (tableau à 2 dimensions), où les oeufs sont répartis et où le joueur peut se déplacer pour récolter ces oeufs. Dans cette matrice, il y a un emplacement particulier, qui représente la maison où le joueur doit rapporter tous les oeufs. Le joueur peut se déplacer en haut, en bas, à gauche, et à droite, mais pas en diagonale. Par ailleurs, l’aire de jeu est bornée dans toutes les directions (c’est-à-dire que le joueur ne peut pas se déplacer à l’infini dans une direction donnée). Lorsque le joueur passe sur un oeuf, il peut choisir de le récupérer ou non. Le joueur peut porter plusieurs oeufs à la fois. Lorsque le joueur passe sur la maison, il peut choisir de déposer tous ses oeufs (ceux qu’il a ramassés) ou non. Le chemin pour récupérer les oeufs est parsemé d’embûches : il y a des emplacements où il y a des rochers, et d’autres où il y a de l’eau. Les rochers empêchent le joueur de passer, tandis que l’eau fait mourir le joueur (la partie s’arrête alors) s’il passe dessus.

    Le jeu se déroulera comme suit. L’aire de jeu initiale (vous pourrez partir d’une configuration donnée) devra être affichée en mode texte (avec des symboles bien identifiés pour représenter le joueur, les oeufs, la maison, les rochers, et l’eau). Puis, il faudra afficher un menu proposant les actions suivantes : se déplacer, prendre un oeuf, déposer tous ses oeufs, et quitter la partie. En outre, il faudra également afficher le nombre d’oeufs actuellement portés par le joueur, le nombre d’oeufs déjà déposés à la maison par le joueur, ainsi que le nombre d’oeufs qu’il reste à déposer avant de gagner la partie.
    voici ce que j'ai déjà écris comme code (PS: nous utilisons une class particulière appelée Terminal pour écrire notre code donc au lieu de system.out.print on utilise Terminal.ecrireString pour afficher ou Terminal.lireString pour afficher ce que nous tapons) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    public class Jeu {
     
             static char[][]tab=new char[10][9];
     
    public static void main(String[]args){
     
             Terminal.ecrireStringln("Projet : la récolte des oeufs de Pâques");
     
             Terminal.sautDeLigne();
     
             Terminal.ecrireStringln("J= joueur\nO= oeufs\nR= rocher\n~= eau\nM= maison");
     
             Terminal.sautDeLigne();
     
             plateau(tab);
     
    }
     
    public static void plateau(char[][]tab){
     
             for(int i=1; i<10;i++){
     
                 for(int j=1;j<9;j++){
     
                      tab[i][j]='.';
     
                      tab[1][1]='J';
     
                      tab[2][2]='O'; tab[4][6]='O'; tab[7][4]='O'; tab[7][1]='O';tab[8][8]='O';
     
                      tab[7][7]='M';
     
                      tab[4][2]='R'; tab[5][5]='R'; tab[8][2]='R'; tab[3][7]='R'; tab[8][6]='R';
     
                      tab[3][4]='~'; tab[6][3]='~'; tab[8][5]='~'; tab[4][7]='~';
     
                     Terminal.ecrireString(" | "+tab[i][j]);
     
               }
     
               Terminal.ecrireStringln(" |");
     
         }
     
      }
     
    }
    Pour la suite je pensais créer :
    - une méthode pour déplacer le joueur,
    - une méthode qui vérifie qu'à l'endroit où le joueur se déplace s'il y a des objets et en fonctions de ces objets une action se réalise (par exemple ramasser oeuf, où s'il y a un rocher renvoi un message etc...),
    - une méthode qui réinitialise le tableau à chaque déplacement
    - une méthode avec les différentes actions : ramasser oeufs, déposer oeufs, message si tombe sur rocher et fin de partie si tombe dans eau
    - une méthode de compteur afin d'indiquer le nombre d'oeufs que le joueur a sur lui et le nombre d'oeufs restant à ramasser

    Quelqu'un pourrait-il me venir en aide afin de taper la suite du code pour que je puisse avancer où déjà me dire si mon début de code est correcte?

    merci par avance.

  2. #2
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 552
    Points : 15 463
    Points
    15 463
    Par défaut
    Bonjour.
    Pour ce qui est de la présentation :
    - Tout d’abord, inutile de mettre des pans entier de en couleur, ça n'aide vraiment pas a la lisibilité.
    - Pour le code plutôt que le mettre en couleur utilise les balise [code ] et [/code ] qui en plus de mettre la coloration syntaxique grade l'indentation.

    Pour ce qui est le l'énoncé, on répondra certainement a une question précise sur un point particulier qui te pose problème, mais on n'écrira certainement pas ton code.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Mai 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    merci pour le retour sur la présentation. N'ayant jamais posté sur un forum pour une question de programmation java je ne savais pas qu'il existait une balise code, comme je l'ai dit suis tout nouveau en java.

    Pour ce qui est de l'aide, je ne cherche pas des gens pour m'écrire le code mais des gens qui puissent m'aider au cheminement pour la réalisation du projet et qui peuvent éventuellement corriger ou soulever mes erreurs.

    Merci quand même pour cette intervention.

  4. #4
    Membre régulier Avatar de zolotaya
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 93
    Points : 78
    Points
    78
    Par défaut
    Hello,

    Quelques remarques vite fait :
    Ton tableau, si tu ne dois créer qu'une classe tu peux le déclarer en private static ...

    Dans ton affichage, pour chaque éléments de ton tableau (9 * 10), tu redéfinis toute ta carte.
    Il me semblerai plus logique de déclarer ton tableau de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    public class Jeu {
    private static char[][]tab=new char[10][9];
     
    private void initTab() {
       tab[1][1]='J';
       tab[2][2]='O'; tab[4][6]='O'; tab[7][4]='O'; tab[7][1]='O';tab[8][8]='O';
       tab[7][7]='M';
       tab[4][2]='R'; tab[5][5]='R'; tab[8][2]='R'; tab[3][7]='R'; tab[8][6]='R';
       tab[3][4]='~'; tab[6][3]='~'; tab[8][5]='~'; tab[4][7]='~';
    }
     
    public static void plateau(char[][]tab){
       for(int i=1; i<10;i++){
          for(int j=1;j<9;j++){
             /* Si ta case est vide (non initialisé ci-dessus) tu mets ton point, sinon ta valeur. Tu pourras également faire évoluer ta méthode en ajoutant les coordonées de ton personnage pour l'afficher */
             if (tab[i] == '\0') {
                Terminal.ecrireString(" | . ");
             } else {
                Terminal.ecrireString(" | "+ tab[i][j]);
             }
          }
          Terminal.ecrireStringln(" |");
       }
    }
     
    public static void main(String[]args){
      initTab();
    /*  (...)  */
    }

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Ton début de code n'est pas terrible.
    - Pourquoi mettre les 'M' et 'R' et tout le toutim à l'intérieur du double 'for' ? Il faut utiliser le double 'for' pour mettre des . partout, et ensuite mettre les éléments spéciaux, une seule fois, en dehors des 'for'.

    - Tu ne devrais pas stocker le 'J' dans le tableau. En effet le joueur peut se retrouver sur la même case que la maison ou la même case qu'un œuf, et il ne doit pas les effacer. Tu devrais utiliser deux int à part, pour te souvenir où est le joueur, et ne pas le mettre dans le tableau. (Cela t'aidera aussi pour savoir où il est, et donc vers où le déplacer. Ce serait stupide de le chercher dans le tableau à chaque fois.)

    Concernant tes idées de méthodes... Elles n'ont aucun sens -_-°. C'est pas du tout comme ça que ça marche. Avant de vouloir faire une méthode, il faut savoir comment on va s'en servir, et donc, aussi, quand on va s'en servir. Là t'a balancé plein de trucs sans te demander ce que tu vas en faire. Bah rien, c'est ça que tu vas en faire. Ça sert à rien les trucs que tu proposes.

    Tu dois d'abord faire les choses dans les grandes lignes. Le but c'est que le joueur tape des commandes et que tu répondes à ces commandes, non ? Alors la première chose à faire, c'est d'écouter les commandes du joueur et balancer des réponses bidons genre "vous avez demandé à aller à gauche" ou "vous avez demandé de prendre un œuf."
    Une fois que tu as fait ça, et seulement après que tu aies fait ça, il sera temps d'essayer de répondre vraiment aux commandes, et de voir si tu pourrais pas faire des méthodes pour t'aider.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Mai 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    @zolotaya : merci pour cette précision mais quand je veux compiler il me dit qu'il y'a des erreurs en ligne 16 et 27:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    public class test {
    	private static char[][]tab=new char[10][9];
     
    	private void initTab() {
    	   tab[1][1]='J';
    	   tab[2][2]='O'; tab[4][6]='O'; tab[7][4]='O'; tab[7][1]='O';tab[8][8]='O';
    	   tab[7][7]='M';
    	   tab[4][2]='R'; tab[5][5]='R'; tab[8][2]='R'; tab[3][7]='R'; tab[8][6]='R';
    	   tab[3][4]='~'; tab[6][3]='~'; tab[8][5]='~'; tab[4][7]='~';
    	}
     
    	public static void plateau(char[][]tab){
    	   for(int i=1; i<10;i++){
    	      for(int j=1;j<9;j++){
    	         /* Si ta case est vide (non initialisé ci-dessus) tu mets ton point, sinon ta valeur. Tu pourras également faire évoluer ta méthode en ajoutant les coordonées de ton personnage pour l'afficher */
    	         if (tab[i] == '\0') { // erreur: Incompatible operand types char[] and char
    	            Terminal.ecrireString(" | . ");
    	         } else {
    	            Terminal.ecrireString(" | "+ tab[i][j]);
    	         }
    	      }
    	      Terminal.ecrireStringln(" |");
    	   }
    	}
     
    	public static void main(String[]args){
    	  initTab(); // erreur : Cannot make a static reference to the non-static method initTab() from the type test
    	/*  (...)  */
    	}
    }
    @thelvin : J'ai mis tous les objets dans la double boucle FOR car il n'y a qu'avec cette solution que j'arrive à représenter mes objets dans le plateau. Suis d'accord avec toi pour dire que mon analyse n'est pas terrible alors j'ai décidé de commencer à écrire les différentes instructions, c'est pas joli car y'a beaucoup de répétition mais je verrais les méthodes après.

    j'arrive dans le code ci-dessous à afficher les objets dans le plateau, à demander et afficher le choix mais mon problème est que à chaque tour mon joueur part toujours des coordonnées initiales et non pas de la dernière position. Je ne sais pas de quelle manière initialiser mon joueur sans le mettre dans la boucle for, je bloque.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    public class Jeu {
    	public static void main(String[]args){
    		char[][]tab=new char[9][9];
    		char continuer=' ';
    		char choix=' ';
    		boolean reponse=false;
    		int k=0;	// déclaration variable compteur de tour de jeu
     
    		Terminal.ecrireStringln("Projet: récolte des oeufs de pâques");
    		Terminal.sautDeLigne();
    		Terminal.ecrireStringln("J : joueur\nO : oeuf\nM : maison\nR : rocher\n~ : eau");
    		Terminal.sautDeLigne();
     
    		// initialisation tableau
     
    		for(int i=1;i<9;i++){
    			for(int j=1;j<9;j++){
    				tab[i][j]='.';
    				tab[1][1]='J';
    				tab[2][2]='O'; tab[4][6]='O'; tab[7][4]='O'; tab[7][1]='O';tab[8][8]='O';
    				tab[7][7]='M';
    				tab[4][2]='R'; tab[5][5]='R'; tab[8][2]='R'; tab[3][7]='R'; tab[8][6]='R';
    				tab[3][4]='~'; tab[6][3]='~'; tab[8][5]='~'; tab[4][7]='~';
    				Terminal.ecrireString(" | "+tab[i][j]);
    			}// for
    			Terminal.ecrireStringln(" | ");
    		}// for
    		Terminal.sautDeLigne();
     
    		// définir les déplacements
     
    		do{
    			do{
    				k++;
    				Terminal.ecrireStringln("Tour "+k+": dans quelle direction souhaitez-vous aller ? ");
    				Terminal.ecrireStringln("1: Haut");
    				Terminal.ecrireStringln("2: Bas");
    				Terminal.ecrireStringln("3: Gauche");
    				Terminal.ecrireStringln("4: Droite");
    				choix=Terminal.lireChar();
     
    				if(choix!='1' && choix!='2' && choix!='3' && choix!='4'){
    					Terminal.ecrireStringln("Choix inconnu! recommencez! ");
    				}// if
    				Terminal.sautDeLigne();
    			}// do
    			while(choix!='1' && choix!='2' && choix!='3' && choix!='4');
     
    			if(choix=='1'){
    				for(int i=1;i<9;i++){
    					for(int j=1;j<9;j++){
    						tab[i][j]='.';
    						tab[1-1][1]='J';
    						tab[2][2]='O'; tab[4][6]='O'; tab[7][4]='O'; tab[7][1]='O';tab[8][8]='O';
    						tab[7][7]='M';
    						tab[4][2]='R'; tab[5][5]='R'; tab[8][2]='R'; tab[3][7]='R'; tab[8][6]='R';
    						tab[3][4]='~'; tab[6][3]='~'; tab[8][5]='~'; tab[4][7]='~';
    						Terminal.ecrireString(" | "+tab[i][j]);
    					}// for
    					Terminal.ecrireStringln(" | ");
    				}// for
    				Terminal.sautDeLigne();
    			}// if
     
    			else if (choix=='2'){
    				for(int i=1;i<9;i++){
    					for(int j=1;j<9;j++){
    						tab[i][j]='.';
    						tab[1+1][1]='J';
    						tab[2][2]='O'; tab[4][6]='O'; tab[7][4]='O'; tab[7][1]='O';tab[8][8]='O';
    						tab[7][7]='M';
    						tab[4][2]='R'; tab[5][5]='R'; tab[8][2]='R'; tab[3][7]='R'; tab[8][6]='R';
    						tab[3][4]='~'; tab[6][3]='~'; tab[8][5]='~'; tab[4][7]='~';
    						Terminal.ecrireString(" | "+tab[i][j]);
    					}// for
    					Terminal.ecrireStringln(" | ");
    				}// for
    				Terminal.sautDeLigne();
    			}// else if
     
    			else if (choix=='3'){
    				for(int i=1;i<9;i++){
    					for(int j=1;j<9;j++){
    						tab[i][j]='.';
    						tab[1][1-1]='J';
    						tab[2][2]='O'; tab[4][6]='O'; tab[7][4]='O'; tab[7][1]='O';tab[8][8]='O';
    						tab[7][7]='M';
    						tab[4][2]='R'; tab[5][5]='R'; tab[8][2]='R'; tab[3][7]='R'; tab[8][6]='R';
    						tab[3][4]='~'; tab[6][3]='~'; tab[8][5]='~'; tab[4][7]='~';
    						Terminal.ecrireString(" | "+tab[i][j]);
    					}// for
    					Terminal.ecrireStringln(" | ");
    				}// for
    				Terminal.sautDeLigne();
    			}// else if
     
    			else{
    				for(int i=1;i<9;i++){
    					for(int j=1;j<9;j++){
    						tab[i][j]='.';
    						tab[1][1+1]='J';
    						tab[2][2]='O'; tab[4][6]='O'; tab[7][4]='O'; tab[7][1]='O';tab[8][8]='O';
    						tab[7][7]='M';
    						tab[4][2]='R'; tab[5][5]='R'; tab[8][2]='R'; tab[3][7]='R'; tab[8][6]='R';
    						tab[3][4]='~'; tab[6][3]='~'; tab[8][5]='~'; tab[4][7]='~';
    						Terminal.ecrireString(" | "+tab[i][j]);
    					}// for
    					Terminal.ecrireStringln(" | ");
    				}// for
    				Terminal.sautDeLigne();
    			}// else
     
    			do{
    				Terminal.ecrireStringln("Souhaitez-vous continuer ? (O/N) ");
    				continuer=Terminal.lireChar();
     
    				if(continuer !='O' && continuer !='N'){
    					Terminal.ecrireStringln("réponse incorrect, merci de saisir O ou N");
    				}// if
    				Terminal.sautDeLigne();
    			}// do
     
    			while(continuer!='O' && continuer!='N');
     
    		}// do
    		while(continuer=='O');
    			Terminal.ecrireStringln("Partie terminée !!!");
    	}// main
    }// Jeu

  7. #7
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Citation Envoyé par keitaro28 Voir le message
    @thelvin : J'ai mis tous les objets dans la double boucle FOR car il n'y a qu'avec cette solution que j'arrive à représenter mes objets dans le plateau.
    C'est précisement parce que tu ne fais pas les choses dans le bon sens. Il faut d'abord initialiser ton tableau puis l'afficher.

    Ca revient à faire (note qu'il faut d'abord tout initialiser puis ensuite mettre les trucs interessants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    private void initTab() {
              for(int i=1; i<10;i++){
    	      for(int j=1;j<9;j++){
    	         tab[i][j] = '.';
    	      }
    	   }
    	   tab[2][2]='O'; tab[4][6]='O'; tab[7][4]='O'; tab[7][1]='O';tab[8][8]='O';
    	   tab[7][7]='M';
    	   tab[4][2]='R'; tab[5][5]='R'; tab[8][2]='R'; tab[3][7]='R'; tab[8][6]='R';
    	   tab[3][4]='~'; tab[6][3]='~'; tab[8][5]='~'; tab[4][7]='~';
    	}
     
    private void afficheTab() {
              for(int i=1; i<10;i++){
    	      for(int j=1;j<9;j++){
    	         Terminal.ecrireString(" |  " + tab[i][j]);
    	      }
                 Terminal.ecrireStringln(" |");
    	   }
    }
    Meme remarque que thelvin. Ca n'a pas de sens de mettre le joueur dans le tableau. Il faut que tu crees 2 int initialisés à la position initiale (ici : [1;1]). Puis, en fonction du choix de l'utilisateur, tu verifies si le deplacement est valide (toujours dans les limites du tableau). Si oui, tu proposes les choix en fonction de la case (si la case a 1 oeuf, proposer de ramasser, ...).

    Par ailleurs, oublie le mot cle static. Ici, il ne sert que pour le main. Il faut creer des variables non static dans ta classe test et utiliser celles-ci. C'est une bonne habitude à prendre.

    Ton code ressemblera à ca (je ne mets que des fragments, c'est juste pour l'idée) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    public class test {
    private char[][]tab=new char[10][9];
    private void initTab() {
              for(int i=1; i<10;i++){
    	      for(int j=1;j<9;j++){
    	         tab[i][j] = '.';
    	      }
    	   }
    	   tab[2][2]='O'; tab[4][6]='O'; tab[7][4]='O'; tab[7][1]='O';tab[8][8]='O';
    	   tab[7][7]='M';
    	   tab[4][2]='R'; tab[5][5]='R'; tab[8][2]='R'; tab[3][7]='R'; tab[8][6]='R';
    	   tab[3][4]='~'; tab[6][3]='~'; tab[8][5]='~'; tab[4][7]='~';
    	}
     
    private void jeu() {
    char continuer=' ';
    		char choix=' ';
    		boolean reponse=false;
    		int k=0;	// déclaration variable compteur de tour de jeu
     
    		Terminal.ecrireStringln("Projet: récolte des oeufs de pâques");
    		Terminal.sautDeLigne();
    		Terminal.ecrireStringln("J : joueur\nO : oeuf\nM : maison\nR : rocher\n~ : eau");
    		Terminal.sautDeLigne();
    ...
    }
     
    public static void main(String[]args){
    test t = new test();
    t.jeu();
    }
    }

  8. #8
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    <pas une réponse>
    <mode vieux ***>
    j'aimerai savoir si celui qui a proposé le sujet initial n'a pas lui même eu à traiter ce sujet .... il y a trente ans ... en langage APL! (ah APL! là les matrices n'avaient qu'à bien se tenir!)
    </mode vieux ***>
    </pas une réponse>
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Mai 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    merci HWOARANG du coup si j'écris une méthode comme ci-dessous pour positionner le joueur, est-ce correcte ou alors ai-je encore fait n'importe quoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    public class Jeu1 {
     
    	private char[][]tab=new char[10][9];
    	char continuer=' ',choix=' ';
    	boolean reponse=false;
    	int k=0;	// déclaration variable compteur de tour de jeu
     
     
    	private void afficheJoueur(int x, int y){	// positionne le joueur dans le tableau
    		tab[x][y]='J';
    	}
     
    	private void initTab() {	// initialise le tableau
     
    	         ...les instructions...
    		}
     
    	private void afficheTab() {		// affiche le tableau
                   ... les instructions...
                }
     
    	private void jeu() {
    			... les instructions...
    	}
     
     
     
    	public static void main(String[]args){
    	Jeu1 t = new Jeu1();
    	t.jeu();
    	t.initTab();
    	t.afficheJoueur(1,1);
    	t.afficheTab();
     
    	}
    	}
    Je rencontre par contre toujours le problème où lorsque je déplace mon joueur au 1er tour il part de sa position (1,1) et quand je passe au 2eme tour le joueur ne part pas de la dernière position mais de sa position initiale. j'ai écris ma méthode déplacement comme suite, où ai-je fais l'erreur? Pourquoi la dernière position n'est-elle pas stockée en mémoire?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    private void deplacer(){	// affichage choix + menu
     
    		do{
     
    			do{
     
    				k++;
    				Terminal.ecrireStringln("Tour "+k+": dans quelle direction souhaitez-vous aller ? ");
    				Terminal.ecrireStringln("1: Haut");
    				Terminal.ecrireStringln("2: Bas");
    				Terminal.ecrireStringln("3: Gauche");
    				Terminal.ecrireStringln("4: Droite");
    				choix=Terminal.lireChar();
     
    				if(choix!='1' && choix!='2' && choix!='3' && choix!='4'){
    					Terminal.ecrireStringln("Choix inconnu! recommencez! ");
    				}// if
    				Terminal.sautDeLigne();
    			}// do
    			while(choix!='1' && choix!='2' && choix!='3' && choix!='4');
     
    			if(choix=='1'){
     
    				initTab();
    				tab[x-1][y]='J';
    				afficheTab();
    			}// if
     
    			else if (choix=='2'){
     
    				initTab();
    				tab[x+1][y]='J';
    				afficheTab();
    			}// else if
     
    			else if (choix=='3'){
     
    				initTab();
    				tab[x][y-1]='J';
    				afficheTab();
    			}// else if
     
    			else{
     
    				initTab();
    				tab[x][y+1]='J';
    				afficheTab();
    			}// else
     
     
    			do{
    				Terminal.ecrireStringln("Souhaitez-vous continuer ? (O/N) ");
    				continuer=Terminal.lireChar();
     
    				if(continuer !='O' && continuer !='N'){
    					Terminal.ecrireStringln("réponse incorrect, merci de saisir O ou N");
    				}// if
    				Terminal.sautDeLigne();
    			}// do
     
    			while(continuer!='O' && continuer!='N');
     
    		}// do
    		while(continuer=='O');
    			Terminal.ecrireStringln("Partie terminée !!!");
    	}

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Mai 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    bon j'ai réussi à écrire ma méthode pour faire déplacer mon joueur dans la grille (enfin pour le moment j'ai dupliquer 4 fois la méthode en changeant les valeurs en fonction du déplacement, je ne les ai pas intégré dans une seul et unique méthode que j'appellerais déplacer). le soucis est que pour mes méthodes deplacerHaut et déplacerGauche, ça fonctionne sans aucun problème mais pour mes méthodes déplacerBas et deplacerDroite il me parcourt tout le tableau au lieu de déplacer mon joueur d'une seule case. Je comprends le pourquoi(parcours les boucles for) mais comment puis-je faire car ça marche bien pourtant pour i-1 mais absolument pas pour i+1?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    private void deplacerHaut(){
    		char tmp;
    		for(int i=1; i<10;i++){
    			for(int j=1;j<9;j++){
    				if(tab[i][j]=='J'){	// on cherche la position du joueur sur le tableau
    					if(i-1<=0){ // on affiche un message d'erreur si le joueur sort du tableau
    						Terminal.ecrireStringln("erreur! le joueur sors du tableau, veuillez recommencer. ");
    					}
    					else{
    							tmp=tab[i][j]; // si le joueur ne sort pas du tableau, on copie le joueur
    							tab[i][j]='.';	// on vide sa position
    							tab[i-1][j]=tmp; // on déplace le joueur
    					}
    				}			
    			}
    		}
    	}
     
    	private void deplacerBas(){
    		char tmp;
    		for(int i=1;i<10;i++){
    			for(int j=1;j<9;j++){
    				if(tab[i][j]=='J'){
    					if(i+1>=10){
    						Terminal.ecrireStringln("erreur! le joueur sors du tableau, veuillez recommencer. ");
    					}
    					else{
    						tmp=tab[i][j];
    						tab[i][j]='-';
    						tab[i+1][j]=tmp;
    					}
    		        }
    			}
    		}
    	}
     
    	private void deplacerGauche(){
    		char tmp;
    		for(int i=1;i<10;i++){
    			for(int j=1;j<9;j++){
    				if(tab[i][j]=='J'){
    					if(j-1<=0){
    						Terminal.ecrireStringln("erreur! le joueur sors du tableau, veuillez recommencer. ");
    					}
    					else{
    						tmp=tab[i][j];
    						tab[i][j]='.';
    						tab[i][j-1]=tmp;
    					}
    		        }
    			}
    		}
    	}
     
    	private void deplacerDroite(){
    		char tmp;
    		for(int i=1;i<10;i++){
    			for(int j=1;j<9;j++){
    				if(tab[i][j]=='J'){
    					if(j+1>=9){
    						Terminal.ecrireStringln("erreur! le joueur sors du tableau, veuillez recommencer. ");
    					}
    					else{
    						tmp=tab[i][j];
    						tab[i][j]='x';
    						tab[i][j+1]=tmp;
    					}
    				}
    			}
    		}
    	}

Discussions similaires

  1. Réponses: 6
    Dernier message: 13/11/2007, 13h06
  2. Idées de Projets en théorie des graphes ou autres.
    Par Iori Yagami dans le forum Sujets
    Réponses: 20
    Dernier message: 22/10/2007, 17h47
  3. Distribuer un .jar pour un projet qui a des image
    Par pigpen dans le forum Interfaces Graphiques en Java
    Réponses: 7
    Dernier message: 16/07/2007, 14h44
  4. Projet Delphi avec des port COM1
    Par Miksou dans le forum Langage
    Réponses: 2
    Dernier message: 23/11/2005, 16h36

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