Cette page fait partie du cours de polytech PeiP1 et 2 Bio

8. Mise en pratique : N-reines et graphisme

8.1. Introduction

On veut résoudre le problème des N-Reines en utilisant une interface graphique afin de montrer comment évolue les placement des reines.

8.2. Interface graphique

Mettre au point une interface graphique avec PyGame comme celle du jeu de Pong. La boucle principale affichera à intervalle régulier l'échiquier.

interface graphiques N_Reines
Résolution avec affichage des conflits

On créera une fonction dessine(...) qui affiche l'échiquier sachant que l'échiquier contient une valeur non nulle si une reine se trouve en ligne $y$ colonne $x$.

8.3. Résolution des N-Reines

Nous allons réutiliser la méthode 2 de la résolution des N-Reines qui consiste à vérifier qu'une reine à placer dans la ligne $y$ n'est pas en prise avec une autre reine placée en $y-i$.

Il est nécessaire de modifier :

8.4. Thread de Résolution

L'affichage et la résolution ne peuvent pas se faire en même temps. On doit utiliser deux threads d'exécution :

En informatique un programme qui s'exécute s'appelle un processus, on parle également de processus lourd car un processus demande des ressources au système d'exploitation.

"Notamment, le système d'exploitation maintient un certain nombre de structures de données qui sont nécessaires au bon fonctionnement du processus. Ces structures de données sont créées au démarrage du processus, mises à jour durant la vie du processus et supprimées lorsque le processus se termine." (cf UC Louvain).

Pour simplifier, on peut dire que le processus possède un thread d'exécution, c'est à dire, un dispositif d'exécution du code du processus. Le thread est qualifié de processus léger car il hérite de tout ce que possède le processus lourd.

Créer un deuxième thread d'exécution est très rapide et permet d'exécuter du code en parallèle.

Pour créer un thread d'exécution en Python il suffit de faire appel au paquet threading :

import threading
...
resolution = threading.Thread(target=n_reines.resoudre, args=(1,) )
resolution.start()

On créera le thread de résolution avant de lancer la boucle principale d'affichage.