Ce questionnaire est à remplir avant le 25 mai 2012 à 23h50, heure de Paris (heure enregistrée automatiquement par Google).
Attention, pour le questionnaire ci-dessous, les réponses ne sont enregistrées que quand vous cliquez sur le bouton "Envoyer" tout en bas. Au cas, recopiez-les sur un brouillon pour éviter de tout perdre en cas de problème de connexion ou de clic malheureux.
Rappel : On va au cours de ce semestre programmer un jeu de Monopoly avec ces exercices à trous. ATTENTION, ce travail doit être réalisé INDIVIDUELLEMENT.
Vous pouvez télécharger le code entier de Monopoly6.java sur
http://www.lirmm.fr/~gambette/ENSIUT/Monopoly6.java si vous voulez essayer de le compiler après avoir rempli les trous.
Regardez l'heure qu'il est car je vous demanderai tout à la fin du questionnaire combien de temps vous avez pris pour faire cet exercice (ça ne sera pas pris en compte pour la note).
Aujourd'hui, on s'occupe de la décision d'achat des terrains par les joueurs, qui est gérée par une nouvelle fonction resultatAchat. Il y a 2 trous à compléter cette semaine. Le premier est simplement le type de sortie de la fonction resultatAchat. Le second demande plusieurs lignes d'instructions, puisqu'il faut écrire complètement la fonction resultatAchat. Cette fonction doit :
- dire à quelle joueur elle s'adresse (1 point)
- rappeler au joueur combien d'argent il a (1 point)
- lui demander s'il veut procéder à l'achat (par exemple en utilisant la fonction reponseALaQuestion) (1 points)
- n'accepter que les réponses oui et non. S'il y a une autre réponse, la fonction doit reposer la question en précisant au joueur qu'il doit répondre par oui ou non (3 points)
- renvoyer le résultat attendu (1 point)
Les variables en entrée seront notées sur 2 points. L'orthographe et la présence de commentaires seront globalement notés sur deux points.
Comme il manque certaines fonctionnalités, vous ne devez pas vous étonner du fait que le code pourrait vous sembler incomplet à certains endroits.
Code Java à trous pour la fonction main (les trous sont indiqués par {-1-} et {-2-}).
----------------------------
public static void main(String[]arg){
String reponse;
boolean entreEnPrisonParTroisDoubles;
int nombreDoubles;
int[] argent, position, prison;
int nbJoueurs, joueur;
int tour,de1,de2;
int[] maisons={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int[] proprietaire={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
String[] nomCase={"Case depart","Boulevard Belleville","Caisse de communaute 1",
"Rue Lecourbe","Impot sur le revenu","Gare Montparnasse","Rue de Vaugirard",
"Chance 1","Rue de Courcelles", "Avenue de la Republique", "Prison",
"Boulevard de la Villette", "Compagnie d'electricite", "Avenue de Neuilly",
"Rue de Paradis", "Gare de Lyon", "Avenue Mozart", "Caisse de communaute 2",
"Boulevard Saint-Michel", "Place Pigalle", "Parc Gratuit", "Avenue Matignon",
"Chance 2","Boulevard Malesherbes", "Avenue Henri Martin", "Gare du Nord",
"Faubourg Saint-Honore", "Place de la Bourse", "Compagnie des Eaux",
"Rue La Fayette","Allez en prison","Avenue de Breteuil","Avenue Foch",
"Caisse de communaute 3","Boulevard de Capucines","Gare Saint-Lazare","Chance 3",
"Champs-Elysees","Taxe de luxe","Rue de la Paix"};
int[] prix={0,6000,0,6000,0,2000,1000,0,1000,1200,0,1400,1500,1400,1600,2000,1800,0,1800,2000,0,2200,0,2200,2400,2000,2600,2600,1500,2800,0,3000,3000,0,3200,2000,0,3500,0,4000};
int[] loyerTerrain={0,20,0,40,0,0,60,0,60,80,0,100,0,100,120,0,140,0,140,160,0,180,0,180,200,0,220,220,0,240,0,260,260,0,280,0,0,350,0,500};
int[] loyer1m={0,100,0,200,0,0,300,0,300,400,0,500,0,500,600,0,700,0,700,800,0,900,0,900,1000,0,1100,1100,0,1200,0,1300,1300,0,1500,0,0,1750,0,2000};
int[] loyer2m={0,300,0,600,0,0,900,0,900,1000,0,1500,0,1500,1800,0,2000,0,2000,2200,0,2500,0,2500,3000,0,3300,3300,0,3600,0,3900,3900,0,4500,0,0,5000,0,6000};
int[] loyer3m={0,900,0,1800,0,0,2700,0,2700,3000,0,4500,0,4500,5000,0,5500,0,5500,6000,0,7000,0,7000,7500,0,8000,8000,0,8500,0,9000,9000,0,10000,0,0,11000,0,14000};
int[] loyer4m={0,1600,0,3200,0,0,4000,0,4000,4500,0,6250,0,6250,7000,0,7500,0,7500,8000,0,8750,0,8750,9250,0,9750,9750,0,10250,0,11000,11000,0,12000,0,0,13000,0,17000};
int[] loyerH={0,2500,0,4500,0,0,5500,0,5500,6000,0,7500,0,7500,9000,0,9500,0,9500,10000,0,10500,0,10500,11000,0,11500,11500,0,12000,0,12750,12750,0,14000,0,0,15000,0,20000};
boolean[] achetable={false,true,false,
true,false,true,true,
false,true,true,false,
true,true,true,
true,true,true,false,
true,true,false,true,
false,true,true,true,
true,true,true,
true,false,true,true,
false,true,true,false,
true,false,true};
//Choix du nombre de joueurs :
reponse=reponseALaQuestion("Nombre de joueurs (entre 2 et 10 inclus) : ");
nbJoueurs=convertitChaineEnEntier(reponse);
position=new int[nbJoueurs];
//Correction si le nombre ne convient pas :
if ((nbJoueurs<2) || (nbJoueurs>10)){
if (nbJoueurs<2){
Affiche("Pas assez de joueurs.");
}
if (nbJoueurs>10){
Affiche("Trop de joueurs.");
}
reponse=reponseALaQuestion("Nombre de joueurs (entre 2 et 10 inclus) : ");
nbJoueurs=convertitChaineEnEntier(reponse);
}
if ((nbJoueurs>1) && (nbJoueurs<11)){
//Création des tableaux de l'argent et de la position de chaque joueur :
argent = new int[nbJoueurs];
position = new int[nbJoueurs];
prison = new int[nbJoueurs];
//Remplissage du tableau de l'argent et de la position de chaque joueur :
joueur=0;
while (joueur<nbJoueurs) {
argent[joueur]=15000;
position[joueur]=0;
prison[joueur]=0;
Affiche("Le joueur "+joueur+" est sur la case "+position[joueur]+" et a "+argent[joueur]+" euros.");
joueur++;
}
tour=1;
joueur=0;
nombreDoubles=0;
System.out.println(" ");
System.out.println("Tour 1 :");
while (tour<=50){
//Initialisation du tour :
entreEnPrisonParTroisDoubles=false;
//Lancer des deux des
de1=NombreAleatoire(1,6);
de2=NombreAleatoire(1,6);
System.out.println("Le joueur "+joueur+" obtient un "+de1+" avec le premier de et un "+de2+" avec le deuxieme.");
//Gestion des doubles
if (de1==de2){
nombreDoubles=nombreDoubles+1;
if (nombreDoubles>2){
System.out.println("Il a fait un troisieme double, il va en prison !");
entreEnPrisonParTroisDoubles=true;
nombreDoubles=0;
position[joueur]=10;
prison[joueur]=1;
} else {
if (nombreDoubles>1){
System.out.println("Il a fait un deuxieme double.");
} else {
System.out.println("Il a fait un premier double.");
}
}
} else {
nombreDoubles=0;
}
//Calcul de la nouvelle position
if (prison[joueur]>0){
//Joueur en prison :
if (nombreDoubles==1){
System.out.println("Il sort donc de prison !");
prison[joueur]=0;
} else {
//Paiement des 500 euros
if (prison[joueur]>3){
System.out.println("Ca fait trois tours qu'il est en prison, il doit donc payer 500 euros.");
} else {
System.out.println("Il peut choisir de payer ou non 500 euros pour sortir de prison.");
}
}
}
if(prison[joueur]==0){
//Joueur pas (ou plus) en prison :
position[joueur]=position[joueur]+de1+de2;
if(position[joueur]>=40){
position[joueur]=position[joueur]-40;
}
System.out.println("Il arrive sur la case "+nomCase[position[joueur]]+".");
if (achetable[position[joueur]]==true){
//Il est possible d'acheter cette propriété
System.out.println("Achat de la propriete "+nomCase[position[joueur]]+" a "+prix[position[joueur]]+" euros.");
boolean decisionAchat=resultatAchat(joueur,argent,position,prix);
if (decisionAchat==true){
argent[joueur]=argent[joueur]-prix[position[joueur]];
proprietaire[position[joueur]]=joueur;
achetable[position[joueur]]=false;
}
} else {
if (proprietaire[position[joueur]]>-1){
//Quelqu'un possède cette propriété, il va peut-être falloir lui payer un loyer.
if (proprietaire[position[joueur]]==joueur){
System.out.println("Le joueur "+joueur+" est chez lui.");
} else {
// Un autre joueur possède cette propriété
System.out.println("Le joueur "+proprietaire[position[joueur]]+" possede cette prorpiete.");
if(maisons[position[joueur]]==0){
System.out.println("Le joueur "+joueur+" lui doit "+loyerTerrain[position[joueur]]+"euros.");
}
if(maisons[position[joueur]]==1){
System.out.println("Le joueur "+joueur+" lui doit "+loyer1m[position[joueur]]+"euros.");
}
if(maisons[position[joueur]]==2){
System.out.println("Le joueur "+joueur+" lui doit "+loyer2m[position[joueur]]+"euros.");
}
if(maisons[position[joueur]]==3){
System.out.println("Le joueur "+joueur+" lui doit "+loyer3m[position[joueur]]+"euros.");
}
if(maisons[position[joueur]]==4){
System.out.println("Le joueur "+joueur+" lui doit "+loyer4m[position[joueur]]+"euros.");
}
if(maisons[position[joueur]]==5){
System.out.println("Le joueur "+joueur+" lui doit "+loyerH[position[joueur]]+"euros.");
}
}
}
}
}
//Case allez en prison
if (position[joueur]==30){
position[joueur]=10;
prison[joueur]=1;
System.out.println("Il va donc en prison sans passer par la case depart.");
}
//Joueur suivant :
if (nombreDoubles==0){
joueur++;
if (joueur==nbJoueurs){
joueur=0;
}
System.out.println(" ");
System.out.println("Tour "+tour+" :");
tour++;
}
}
}
}
public static {-1-} resultatAchat ( {-2-}
}