TP 1 (fr)

Un Dé

Implémentez la classe Dice vue en TD 1 dans un fichier nommé 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 :

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

GUI

Copier/coller le code suivant dans un fichier nommé gui_example.py.

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é "button_1" la fonction 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 : http://appjar.info/Install/ Il suffit de decompresser le répertoire appJar.zip dans le répertoire du projet (vous aurez un répertoire 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 GreenCarpet qui possède :
  • 5 dés comme attribut,
  • une méthode 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 (http://appjar.info/pythonWidgets/#checkbox) pour ne lancer que quelques dés (ceux qui sont sélectionnés).