********* TP 1 (fr) ********* Un Dé ===== Implémentez la classe :code:`Dice` vue en TD 1 dans un fichier nommé :file:`dice.py`. Elle doit être capable de : * Créer un Dé sans paramètre, * Créer un Dé avec sa position initiale, * connaitre et changer la valeur du Dé, * lancer un dé, * connaitre le nombre maximum de faces (identique pour tous les dés, constant), * l'écrire comme une chaine de caractère. D'un point de vue python, les contraintes ci-dessus ont été mises sous forme de tests que doit passer votre classe : .. code-block:: python def test_dice_creation_no_argument(): un_de = Dice() assert un_de.get_position() == 1 def test_dice_creation_initial_creation(): un_de = Dice(initial_position=3) assert un_de.get_position() == 3 def test_str(): un_de = Dice(2) assert str(un_de) == "Dice(2)" un_de.set_position(3) assert str(un_de) == "Dice(3)" def test_dice_change_position(): un_de = Dice() un_de.set_position(6) assert un_de.get_position() == 6 def test_roll(): un_de = Dice() un_de.roll() assert 1 <= un_de.get_position() <= un_de.NUMBER_FACES .. note:: Mettre en place les tests : ``_ GUI === Copier/coller le code suivant dans un fichier nommé :file:`gui_example.py`. .. code-block:: python from appJar import gui app = gui() # the GUI # a label at row = 0 and column = 0 label_id = "dice_value" app.addLabel(label_id, "0", 0, 0) app.setLabelBg(label_id, "#BBAADD") # https://color.adobe.com/ # callback function def callback_on_click(button): current_text = app.getLabel(label_id) app.setLabel(label_id, str(int(current_text) + 1)) # a button at row = 0 and column = 1 button_id = "button_1" app.addNamedButton("next integer", button_id, callback_on_click, 0, 1) # launch GUI app.go() Dans le code ci-dessus, en cliquant sur le bouton nommé :code:`"button_1"` la fonction :code:`callback_on_click` est exécutée. C'est un concept classique pour les interfaces utilisateurs (UI): les fonctions sont exécutées en réation aux actions de l'utilisateurs (ici, un clique). .. note:: On utilise la bibliothèque *appJar*. Pour l'installer chez vous : ``_ Il suffit de decompresser le répertoire :file:`appJar.zip` dans le répertoire du projet (vous aurez un répertoire :file:`appJar` en plus) Un Dé ===== Modifiez le code de l'UI pour que le label corresponde à la position d'un dé donné, celui-ci étant lancé lorsque l'on clique sur le bouton. Des Dés ======= Modélisez une classe :code:`GreenCarpet` qui possède : * 5 dés comme attribut, * une méthode :code:`roll` qui lance les 5 dés, * un moyen de connaitre les position d'un dé donné. Utilisez cette classe pour que l'UI puisse lancer 5 dés en même temps en cliquant sur un bouton. Quelques Dés ============ Utilisez les widgets checkbox (``_) pour ne lancer que quelques dés (ceux qui sont sélectionnés).