CORRIGE

publicité
L2 année 2015-2016
L2 - POO et langage JAVA
Les interfaces graphiques, IHM, Programmation événementielle
CORRIGE
Exercice 1 : Le jeu du Pendu
Consigne: Le jeu consiste pour le joueur A à trouver un mot en devinant les lettres qui le composent.
Initialement le joueur B lui indique la longueur du mot à trouver. Ensuite pour chaque lettre proposée
par le joueur A le programme lui indique les différentes places de celle-ci dans le mot. Si la lettre
n'appartient pas au mot cela est considéré comme une erreur et le coup est comptabilisé. Si le
nombre d'erreurs dépasse 10 le joueur A est pendu... Si le joueur A a trouve le mot en moins de 10
essais le joueur A a gagné la partie
Le programme demande la saisie d'un mot qu'on appellera "secret".
Le programme crée (et affiche) alors un mot "masque" c'est à dire une chaîne de caractère qui ne
contient que des "-" et autant qu'il y a de lettres dans le mot secret.
Exemple, si le mot secret est "toto", le mot masque est "----".
1 Le programme demande la saisie d'une lettre...
2 va vérifier si cette lettre est présente dans le mot secret
3 modifie en conséquence le mot masque,
4 affiche le mot masqué.
Exemple (suite), si l'utilisateur saisie la lettre "t" le mot masque doit devenir "t-t-".
Le programme regarde si toutes les lettres ont été devinées, dans ce cas il arrête le jeux par victoire
et affiche le mot secret.
Le programme regarde le nombre de tentatives ratées et arrête le jeu s'il atteint 10.
Le programme reprend à l'étape de saisie d'une lettre, si le nombre de tentatives ratées est inférieur
à 10.
Ecrire l’algorithme correspondant en pseudo-code puis le transcrire en JAVA
Dans un premier temps toutes ces étapes peuvent être d'abord toutes réalisées dans le main.
Dans un deuxième temps découpez le code en des fonctions statiques de la classe principale, pour
mieux organiser le code.
1/8
Corrigé Pendu Question 1
package pendu;
import java.util.*;
public static void main(String[] args) {
int nbcoups=0;
Scanner in = new Scanner(System.in);
System.out.println("Hello Jeu du Pendu ");
System.out.print("Donnez le mot secret ?");
String secret = in.nextLine();
//
saisir au clavier le mot secret
String masque="";
for(int i=0;i<secret.length();i++){
//
initialiser le mot masqué à
-------
masque=masque+"-";
}
char tabMasque[]=masque.toCharArray(); //
convertir la chaine mot masqué en tableau de
char
System.out.println("VOICI LE MOT MASQUE INIT
while ((nbcoups<=10)&&(!masque.equals(secret))){
: "+masque);
// tant que le nb de coups <=10 et mot
secret!=mot masqué
System.out.print("Donnez une lettre : ");
Scanner sc = new Scanner(System.in);
String str = sc.nextLine(); // saisir une
lettre au clavier sous forme de chaine
char lettre = str.charAt(0); // convertir la chaine en un seul caractère
nbcoups++;
for(int i=0;i<secret.length();i++)
{
if (lettre==secret.charAt(i)) {
// chercher la lettre lue dans le mot secret
tabMasque[i]= lettre; // si la lettre est trouvée la mettre dans le mot masqué
}
}
masque=String.valueOf(tabMasque);
//
convertir le tableau masqué en chaine
System.out.println("voici le mot masqué " +masque+" :") ; // afficher le mot masqué
}
//
fin du while
if (nbcoups>=10){
System.out.println("PENDU le mot secret est
"+secret ) ;
}
else {
System.out.println("Bravo jeu gagné
en
"+nbcoups+"
coups" ) ;
}
}
}
2/8
Corrigé Pendu Question 2
import java.util.*;
/** Le programme demande la saisie d'un mot qu'on appellera "secret".
Le programme crée (et affiche) alors un mot "masque" c'est à dire "----".
1 Le programme demande la saisie d'une lettre...
2 va vérifier si cette lettre est présente dans le mot secret
3 modifie en conséquence le mot masque,
4 affiche le mot masqué.
Le programme regarde si toutes les lettres ont été devinées, dans ce cas il arrête le
jeux par victoire et affiche le mot secret.
Le programme regarde le nombre de tentatives ratées et arrête le jeu s'il atteint 10.
Le programme reprend à l'étape de saisie d'une lettre, si le nombre de tentatives
ratées est inférieur à 10.
**/
public class Pendu2 {
static String masque="";
static String secret="";
static char tabMasque[];
static int nbcoups=0;
static char lettre;
public static void Demarage() {
Scanner in = new Scanner(System.in);
System.out.println("Hello Jeu du Pendu Version 2");
System.out.print("Donnez le mot secret ?");
secret = in.nextLine();
// saisir au clavier le mot secret
for(int i=0;i<secret.length();i++){//initialiser le mot masqué à
masque=masque+"-";
}
tabMasque=masque.toCharArray(); //convertir la chaine mot masqué
//en tableau de char
}
public static void AfficheResultat() {
if (nbcoups>=10){
System.out.println("PENDU le mot secret est "+secret ) ;
}
else {
System.out.println("Bravo jeu gagné en "+nbcoups+"
}
}
public static void CorrigeMotMasque() {
for(int i=0;i<secret.length();i++)
-------
coups" ) ;
{
if (lettre==secret.charAt(i)) {// chercher la lettre lue dans le mot secret
tabMasque[i]= lettre;
//si la lettre trouvée la mettre dans mot masqué
}
}
masque=String.valueOf(tabMasque);
//
convertir le tableau masqué en chaine
System.out.println("voici le mot masqué " +masque+" :") ;
// afficher le mot masqué
}
3/8
static void DemanderLettre(){
System.out.print("Donnez une lettre : ");
Scanner sc = new Scanner(System.in);
String str = sc.nextLine(); // saisir une
lettre = str.charAt(0);
lettre au clavier sous forme de chaine
// convertir la chaine en un seul caractère
}
public static void main(String[] args) {
Demarage() ;
while ((nbcoups<=10)&&(!masque.equals(secret))){
// tant que le nb de coups <=10 et mot secret!=mot masqué
nbcoups++;
DemanderLettre();
CorrigeMotMasque() ;
}
//
fin du while
AfficheResultat();
}
}
4/8
Exercice 2 : Les interfaces graphiques
A - Comprendre la notion de programmation événementielle en réalisant l’exemple du timer vu en cours. Ici
c'est l'objet t de type Timer qui générera un évènement toutes les secondes. Après avoir démarré le timer, et
quelque soit la suite du programme, il affichera la date toutes les secondes.
import java.awt.event.*;
import java.util.*;
import javax.swing.Timer;
public class Timer {
static public void main(String args[]) {
TimerTask listener = new TimerTask();
Timer t = new Timer(1000,listener);
t.start();
// t generera un événement toutes les 1000 milisec
while(true);
// boucle d'attente des événements
}
}
class TimerTask implements ActionListener {
public void actionPerformed(ActionEvent event) {
System.out.println(new Date());
}
}
Résultat :
Sat Mar 08 12:17:13 CET 2014
Sat Mar 08 12:17:14 CET 2014
Sat Mar 08 12:17:15 CET 2014
B- a) Créer une fenêtre appelée « Coucou»
import java.awt.*;
import java.util.*;
import javax.swing.*;
public class Coucou {
JFrame fenetre;
public Cocou() {
// constructeur
fenetre = new JFrame("Coucou");
// conteneur
fenetre.setLayout(new BorderLayout());
// placement
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// fermeture fenêtre
}
public static void main(String[] args) {
new Coucou().fenetre.show();
}
}
b) puis y insérer un bouton appelé « Hello »
5/8
import java.awt.*;
import java.util.*;
import javax.swing.*;
public class BoutonHello {
JFrame fenetre;
Button bout;
public BoutonHello() {
// constructeur
fenetre = new JFrame("Coucou");
// conteneur
fenetre.setLayout(new BorderLayout());
// placement
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // fermeture fenêtre
bout = new Button("Hello ");
// composant
fenetre.add(bout);
// inclusion du bouton dans la fenêtre
}
public static void main(String[] args) {
new BoutonHello().fenetre.show();
}
}
C- Associer une action au bouton « Hello » qui affiche le message «Hello, je suis un bouton » à la suite du
clic sur le bouton « Hello»
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Coucou implements ActionListener {
JFrame fenetre; Button bout;
// attributs
public Coucou() {
// constructeur
fenetre = new JFrame("Coucou");
// conteneur
fenetre.setLayout(new BorderLayout());
// placement
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
bout = new Button("Hello");
// composant
fenetre.add(bout);
// inclusion...
bout.addActionListener(this);
// gestion évènement
}
public void actionPerformed(ActionEvent e) {
// évènement
System.out.println("Hello, je suis un bouton ");
}
static public void main(String[] args) {
// test
new Coucou().fenetre.show();
}
}
shell> java Coucou
"Hello, je suis un bouton "
"Hello, je suis un bouton "
"Hello, je suis un bouton "
D - Créer une deuxième fenêtre appelée « Deux boutons» et y mettre 2 boutons « Rouge » et « Blanc »
6/8
import java.awt.*;
import javax.swing.*;
public class DeuxBoutons
{
public JFrame fenetre;
// attributs : une fenêtre et son contenu
protected Button rouge, blanc;
public DeuxBoutons() {
// un constructeur
fenetre = new JFrame("Deux boutons...");
fenetre.setLayout(new FlowLayout());
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// fermeture fenêtre
rouge = new Button("Rouge");
blanc = new Button("Blanc");
fenetre .add(rouge);
fenetre .add(blanc);
}
public static void main(String[] args) {
new DeuxBoutons().fenetre.show();
}
}
E- Associer une action au bouton qui change la couleur des 2 boutons à la suite du clic sur l’un des deux
boutons comme suit :
Fenêtre initiale
Après avoir pressé Blanc
Après avoir pressé Rouge
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class DeuxBoutons implements ActionListener
{
public JFrame fenetre;
// attributs : une fenêtre et son contenu
protected Button rouge, blanc;
public DeuxBoutons() {
// un constructeur
fenetre = new JFrame("Deux boutons...");
fenetre.setLayout(new FlowLayout());
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// fermeture fenêtre
rouge = new Button("Rouge");
blanc = new Button("Blanc");
fenetre .add(rouge);
fenetre .add(blanc);
rouge.addActionListener(this);
blanc.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
// évènement
Object src = e.getSource();
if(src==rouge) {
rouge.setBackground(Color.RED);
blanc.setBackground(Color.RED);
}
else {
rouge.setBackground(Color.WHITE);
blanc.setBackground(Color.WHITE);
}
}
public static void main(String[] args) {
new DeuxBoutons().fenetre.show();
}
}
7/8
F- Créer une troisième fenêtre appelée « Voici un Label » et y mettre un message « je suis un label AWT ! »
import java.awt.*;
import javax.swing.*;
public class VoiciLabel {
public static void main(String[] args) {
JFrame fenetre = new JFrame("Voici un Label");
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// fermeture fenêtre
Label l = new Label("je suis un Label AWT !", Label.CENTER);
fenetre.add(l);
fenetre.show();
// ou bien fenetre.setVisible(true);
}
}
G - Créer une quatrième fenêtre appelée « Voici un TextField » et y mettre une zone de texte initialisée à
« zone de texte»
import java.awt.*;
import javax.swing.*;
public class VoiciZoneTexte {
public static void main(String[] args) {
JFrame f = new JFrame("voici un TextField");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// fermeture fenêtre
TextField t = new TextField("zone de texte", 30);
f.add(t);
f.show();
// ou bien fenetre.setVisible(true);
}
}
8/8
Téléchargement