- Joue au jeu de solo. Chaque clic sur une case appelle la fonction seme, qui provoque un premier semis, suivi éventuellement d'une récolte et d'un nouveau semis... Le sens de jeu est défini par le bouton radio. Avant de commencer à jouer et après chaque modification du programme, exécute-le avec le bouton go
- Etudie le programme pour comprendre l'utilité de chaque fonction.
- Modifie le programme pour intégrer la règle de récolte dans la ligne extérieure du camp adverse, quand toute sa ligne intérieure est vide : Règle 3 des règles du jeu.
def affiche (N,S):
"""
Le jeu Nord est numéroté de 0 à 11 depuis en haut à droite dans le sens indirect
Le jeu Sud est numéroté de 0 à 11 depuis en bas à droite dans le sens direct
0 1 2 3 4 5 Nord
11 10 9 8 7 6
11 10 9 8 7 6
0 1 2 3 4 5 Sud
"""
for i in range(6):
print (N[i], end = " ")
print()
for i in range(11, 5, -1):
print (N[i], end = " ")
print()
for i in range(11, 5, -1):
print (S[i], end = " ")
print()
for i in range(6):
print (S[i], end = " ")
print('\n- - - - - -')
def seme(N, S, joueur, case, sens):
"""
joueur vaut 'N' ou 'S'
case est l'indice de la case à jouer
sens vaut +1 (indices croissants) ou -1 (indices décroissants)
prend toutes les graines de la case puis appelle la fonction seme_graines
pour les semer une à une
"""
if joueur == "S":
graines = S[case]
S[case] = 0
else :
graines = N[case]
N[case] = 0
affiche(N,S)
if graines == 0 :
return "Pas de semis depuis case vide"
seme_graines(N, S, joueur, case, sens, graines)
def seme_graines(N, S, joueur, case, sens, graines):
"""
joueur vaut 'N' ou 'S'
case est l'indice de la case qui vient d'être prise ou semée
sens vaut +1 (indices croissants) ou -1 (indices décroissants)
graines vaut le nombre de graines restant à semer
"""
case = (case + sens) % 12
graines -= 1
if joueur == "S":
S[case] += 1
else :
N[case] += 1
affiche(N,S)
if graines > 0:
seme_graines(N, S, joueur, case, sens, graines)
else:
if condition_iteration (N, S, joueur, case) :
if case >= 6:
recolte(N, S, joueur, case, sens)
else:
seme(N, S, joueur, case, sens)
def condition_iteration (N,S,joueur, case):
"""
On continue si la case contient plus d'une graine après semis.
"""
if joueur == "S":
return (S[case] > 1)
else :
return (N[case] > 1)
def recolte (N, S, joueur, case, sens):
"""
On récolte chez l'adversaire dans la case interne de même indice
ou si sa ligne intérieure est vide dans la case exterieure située en face,
puis on sème à nouveau
"""
if joueur == "S":
S[case] += N[case]
N[case] = 0
else:
N[case] += S[case]
S[case] = 0
affiche(N,S)
seme(N, S, joueur, case, sens)
IREMI - LIM - INSPE de l'académie de la Réunion - 2023