1)Présentation du problème
1) Présentation du problème
Nous allons nous intéresser au déplacement du Cavalier sur l’échiquier.
L’objectif est de placer le cavalier sur une case aléatoire et d’effectuer des sauts en passant une fois et une seule sur toutes les cases de l’échiquier.

Ce problème du cavalier, appelé également problème du Cavalier d’Euler, du nom du mathématicien Suisse Leonhard Euler (1707-1783), est un célèbre casse-tête de logique dont les premières solutions connues sont présentées par deux Indiens Ratnakara et Rudrata dans un ouvrage écrit en 850. C’est à cette même époque que al-Adli ar-Rumi, très grand joueur d’échecs arabe, en donne également une solution.
Au début du 17ième siècle, Pierre Rémond de Montmort pose les bases d’une réflexion mathématique reprise et développée par Euler. En 1759 il en propose une réelle version scientifique.
On réalisera par la suite une interface graphique avec la librairie pygame
2) Gestion de projet
2) codage du jeu sans interface graphique
Corrigé
import random import pandas as pd from IPython.display import display # Constantes SAUTS = ((2, 1), (1, 2), (-1, 2), (-2, 1), (-2, -1), (-1, -2), (1, -2), (2, -1)) # Initialisation de l'échiquier echiquier = [[0 for _ in range(8)] for _ in range(8)] def afficher_echiquier(): """Affiche l'échiquier sous forme de DataFrame.""" df = pd.DataFrame(echiquier) display(df) def jouer(ligne, colonne, coup): """Joue un coup à la position (ligne, colonne).""" echiquier[ligne][colonne] = coup def est_possible(l0, c0, l1, c1): """Vérifie si le mouvement de (l0, c0) à (l1, c1) est possible.""" return ( 0 <= l1 < 8 and 0 <= c1 < 8 and echiquier[l1][c1] == 0 and (l0 - l1, c0 - c1) in SAUTS ) def compter_chemins(l0, c0): """Compte le nombre de mouvements possibles à partir de (l0, c0).""" return sum(est_possible(l0, c0, l0 + dx, c0 + dy) for dx, dy in SAUTS) def est_game_over(l0, c0): """Vérifie si la partie est terminée.""" return compter_chemins(l0, c0) == 0 # Initialisation aléatoire de la position de départ l0, c0 = random.randint(0, 7), random.randint(0,7) coup = 1 print(f"Coup n° {coup}") jouer(l0, c0, "♞") afficher_echiquier() continuer = True lt, ct = l0, c0 while continuer: if est_game_over(lt, ct): print("Game Over") continuer = False else: lt1 = int(input("Numéro de ligne ? ")) ct1 = int(input("Numéro de colonne ? ")) while not est_possible(lt, ct, lt1, ct1): print("Déplacement invalide. Essayez encore.") lt1 = int(input("Numéro de ligne ? ")) ct1 = int(input("Numéro de colonne ? ")) coup += 1 jouer(lt1, ct1, coup) print(f"Coup n° {coup}") lt, ct = lt1, ct1 afficher_echiquier()
3) initiation à pygame
Vous retrouverez le code complet du jeu sans l’interface graphique dans votre fichier capytale .
Vous trouverez aussi une initiation à pygame qui ne sera jamais évaluée.
Il n’y a pas de connaissance à avoir sur la librairie pandas.