Java / Android : Examen blanc
Condition de l'examen blanc : 2h30, sur papier. Pas de documents ni d'accès à un ordinateur.
Sur 20 points.
Tous les exercices sont indépendants, sauf précision contraire.
Java
1. Valide / pas valide (2 points)
Pour chaque ligne ci dessous, dites si elle est valide ou non. Si elle n'est pas valide dites pourquoi, et si elle est valide, préciser les conditions de cette validité, si besoin.
Chaque ligne est indépendante.
Exemple : int a = b; est valide, à condition que "b" soit aussi de type "int".
- int x = 12.5;
- boolean majeur = (age > 18);
- double y = 50;
- Animal a = new Chien();
- truc.machin();
- int[] liste = {1, 2, a, b}
- machin.chose = true;
- Hero h = Hero("Superman");
2. Appels de méthodes 1 (1 point)
Soit une classe "Personnage" avec une propriété publique de type "int" nommée "life", et une classe "Jeu" déclarée ainsi :
class Jeu { public void attaque1(Personnage p) { Personnage perso = new Personnage(); perso.life = perso.life - 10; } public void attaque2(Personnage perso) { perso.life = perso.life - 10; } public void attaque3(Personnage p) { p.life = p.life - 10; } }
Quel sera le résultat de l'execution de ce code ?
Personnage perso = new Personnage(); perso.life = 100; Jeu jeu = new Jeu(); jeu.attaque1(perso); jeu.attaque2(perso); jeu.attaque3(perso); System.out.println("Il reste : " + perso.life + " points");
3. Appels de méthodes 2 (1 point)
Soit les méthodes :public int attaque(int valeur){ return valeur - 10; } public int soin(int valeur){ return valeur + 5; }
Quel sera le résultat de l'execution de ce code ?
int res = soin( attaque( soin( attaque( attaque(100) ) ) ) ); System.out.println("Il reste : " + res + " points");
4. Héritage (2 points)
Représentez les affirmations suivante avec des déclarations de classes Java valides (sans aucune propriétés ni méthodes).
- Un primate est un mammifère.
- Un humain est un primate.
- Un ouran-outang est un primate.
- Un chat est un félin.
- Un félin est un mammifère.
Android
5. Hello World ! (1,5 point)
Pour un simple projet Android qui va afficher le message "Hello World", quels sont les 3 composants essentiels de cette application, et quel est leur rôle ?
6. Strings (1,5 point)
Complétez les phrases suivantes :
Le fichier Strings.xml se trouve dans le dossier /values/ et sert à les chaines de caractères, essentiellement pour simplifier la de l'application.
Grace à son , on peut faire référence à une chaine de caractère avec depuis une activity Java, ou avec @ depuis un layout XML.
7. Utilisation du framework (3 points)
Soit ce layout pour mon activity :
Quelles sont les étapes importantes à développer (sur le layout et sur l'activity) pour que mon Activity puisse être notifiée de la pression de ce bouton ?
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout>
Projet
8. Poker version light : la bataille (8 points)
Le projet consiste à simuler un jeu de carte très simple : le jeu la de bataille.
Le déroulement d'une partie (passionnante) :
- On rempli une pioche avec toutes les cartes numériques (de 1 à 10, sans les figures) de chaque "enseigne" (pique, coeur, carreau et trèfle.).
- On tire 5 cartes au hasard de cette pioche pour construire la main du joueur 1.
- On tire 5 autres cartes au hasard de cette même pioche pour construire la main du joueur 2.
- On cherche la meilleure carte de chaque main (la valeur la plus élevée), et on les compare entre elle.
- Le joueur ayant la carte avec la valeur la plus haute gagne la partie.
A partir du déroulement ci dessus et du code existant, complétez le projet en ajoutant les classes et les méthodes manquantes, en respectant le code existant.
Quelques conseils / questions à se poser :
- Dans quel classe implémenter la méthode remplirPioche ? A quoi servent chacun de ces parametres ?
- La classe EnsembleDeCarte permet de représenter à la fois la pioche et les mains des joueurs. A quel moment crée-t-on les instances pour les mains des joueurs ?
- La classe EnsembleDeCarte doit stocker une liste de carte. Par quel moyen ? Est-ce que cette liste est fixe ?
- Si la méthode "tire" vous parait complexe, commencez par vous demander comment faire pour tirer 1 seule carte.
- Si vous avez oublié comment faire quelque chose (tirer une valeur au hasard, par exemple), écrivez du pseudo-code, pour éviter de perdre trop de temps la dessus.
package fr.cnam.bataille; public class HomeActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); EnsembleDeCarte pioche = new EnsembleDeCarte(); this.remplirPioche(pioche, 1, 10, "pique"); this.remplirPioche(pioche, 1, 10, "coeur"); this.remplirPioche(pioche, 1, 10, "carreau"); this.remplirPioche(pioche, 1, 10, "trefle"); EnsembleDeCarte main1 = pioche.tire(5); EnsembleDeCarte main2 = pioche.tire(5); Carte bestMain1 = main1.meilleureCarte(); Carte bestMain2 = main2.meilleureCarte(); if (bestMain1.valeur > bestMain2.valeur) { System.out.println("Gagnant joueur 1 avec : "); System.out.println(bestMain1.valeur + " de " + bestMain1.enseigne); } else if (bestMain1.valeur < bestMain2.valeur) { System.out.println("Gagnant joueur 2 avec : "); System.out.println(bestMain2.valeur + " de " + bestMain2.enseigne); } else { System.out.println("Ex-aequo !"); } } }
Exemple de sortie :
Gagnant joueur 2 avec : 10 de trefle