Jeu de Pierre Feuille Ciseaux

Dans ce mini projet réalisable au niveau SNT, on met en oeuvre un jeu de Pierre Feuille Ciseaux sur deux cartes : chaque joueur doit secouer sa carte 3 fois avant que la carte fasse un choix et l'affiche.

MéthodePremière version

Cette première version est assez simple et met en avant les capacités graphiques de la matrice de LEDs.

1
# Olivier Lecluse
2
# 8 mars 2019
3
4
from microbit import *
5
from random import randint
6
7
pierre = Image("00900:"
8
               "09990:"
9
               "99599:"
10
               "09990:"
11
               "00900")
12
feuille = Image("99900:"
13
           "90090:"
14
           "90009:"
15
           "90009:"
16
           "99999")
17
ciseaux = Image("96009:"
18
                "69090:"
19
                "00900:"
20
                "69090:"
21
                "96009")
22
23
nbSecousses = 0
24
while True:
25
    if accelerometer.was_gesture("shake"):
26
        nbSecousses +=1
27
        display.show(str(nbSecousses))
28
    if nbSecousses == 3:
29
        choix = randint(1,3)
30
        if choix == 1:
31
            display.show(pierre)
32
        elif choix == 2:
33
            display.show(feuille)
34
        elif choix == 3:
35
            display.show(ciseaux)
36
        nbSecousses = 0

MéthodeSeconde version

Dans cette seconde version, nous allons tricher ! la carte de la victime enverra silencieusement par radio son choix à la carte tricheur qui sera donc assuré de gagner si celui-ci appuie sur les deux boutons A et B à partir de la seconde secousse. La pauvre victime n'y verra que du feu.

La morale de l'histoire est qu'il est toujours intéressant d'avoir accès au code source et qu'il ne faut pas croire aveuglément les boites noires !

Voici la version victime

1
# Olivier Lecluse
2
# 8 mars 2019
3
# Shifumi version victime
4
5
from microbit import *
6
from random import randint
7
import radio
8
radio.on()
9
radio.config(group=2)
10
11
pierre = Image("00900:"
12
               "09990:"
13
               "99599:"
14
               "09990:"
15
               "00900")
16
feuille = Image("99900:"
17
           "90090:"
18
           "90009:"
19
           "90009:"
20
           "99999")
21
ciseaux = Image("96009:"
22
                "69090:"
23
                "00900:"
24
                "69090:"
25
                "96009")
26
27
nbSecousses = 0
28
triche = 1
29
while True:
30
    if accelerometer.was_gesture("shake"):
31
        nbSecousses +=1
32
        if nbSecousses == 1:
33
            choix = randint(1,3)
34
            radio.send(str(choix))
35
        display.show(str(nbSecousses))
36
    if nbSecousses == 3:
37
        if choix == 1:
38
            display.show(pierre)
39
        elif choix == 2:
40
            display.show(feuille)
41
        elif choix == 3:
42
            display.show(ciseaux)
43
        nbSecousses = 0

Et voici la version à flasher sur la carte du tricheur !

1
# Olivier Lecluse
2
# 8 mars 2019
3
# shifumi version tricheur 
4
5
from microbit import *
6
from random import randint
7
import radio
8
radio.on()
9
radio.config(group=2)
10
11
pierre = Image("00900:"
12
               "09990:"
13
               "99599:"
14
               "09990:"
15
               "00900")
16
feuille = Image("99900:"
17
           "90090:"
18
           "90009:"
19
           "90009:"
20
           "99999")
21
ciseaux = Image("96009:"
22
                "69090:"
23
                "00900:"
24
                "69090:"
25
                "96009")
26
27
nbSecousses = 0
28
triche = 1
29
while True:
30
    incoming = radio.receive()
31
    if incoming:
32
        triche = int(incoming)
33
    if button_a.was_pressed() and button_b.was_pressed():
34
        choix = triche%3 + 1
35
    if accelerometer.was_gesture("shake"):
36
        nbSecousses +=1
37
        if nbSecousses == 1:
38
            choix = randint(1,3)
39
        display.show(str(nbSecousses))
40
    if nbSecousses == 3:
41
        if choix == 1:
42
            display.show(pierre)
43
        elif choix == 2:
44
            display.show(feuille)
45
        elif choix == 3:
46
            display.show(ciseaux)
47
        nbSecousses = 0