#================================================================PROJET TERMINAL NSI====================================================# # Membres du groupe: ENZO VYNCE SEBASTIEN # ------------------------------------------------# # Version finale: Joueur contre IA # ------------------------------------------------# # Thème: Pierre-Feuille-Ciseaux # ------------------------------------------------# # Date : 08 Mai 2025 # ------------------------------------------------# # Travail fourni par chacun: # VYNCE : - S'est occupé de tout le côté intelligence artificielle avec l'enregistrement de l'historique des coups, etc. # --------------------------------------------- # ENZO : - S'est occupé de la sauvegarde des parties. # - S'est occupé de la création de l'interface. # - S'est occupé du fonctionnement du jeu et de la gestion des parties. # - S'est occupé de tout l'aspect interaction (souris, clavier) # --------------------------------------------- # SEBASTIEN : - A été d'une très grande utilité (c'est faux il a strictement rien fait) #================================================================PROJET TERMINAL NSI====================================================# import turtle import random import sqlite3 # Sauvegarde de l'historique connexion = sqlite3.connect('chifoumi.db') cursor = connexion.cursor() # Création de la table historique cursor.execute(''' CREATE TABLE IF NOT EXISTS historique ( id INTEGER PRIMARY KEY AUTOINCREMENT, coup INTEGER NOT NULL ) ''') connexion.commit() # Chargement de l'historique historique = [] for (coup,) in cursor.execute('SELECT coup FROM historique ORDER BY id'): historique.append(coup) # Interface de la tortue fenetre = turtle.Screen() fenetre.title("Pierre-Feuille-Ciseaux") fenetre.setup(600, 400) dessin = turtle.Turtle() dessin.hideturtle() dessin.penup() dessin.speed(1000) texte = turtle.Turtle() texte.hideturtle() texte.penup() texte.speed(1000) options = ["Pierre", "Feuille", "Ciseau"] positions = [-150, 0, 150] # Afficher les cases def dessiner_case(x, nom): dessin.penup() dessin.goto(x - 50, 50) dessin.pendown() for _ in range(4): dessin.forward(100) dessin.right(90) dessin.penup() dessin.goto(x, 0) dessin.write(nom, align="center", font=("Arial", 16, "bold")) def dessiner_interface(): dessin.clear() texte.clear() for x, nom in zip(positions, options): dessiner_case(x, nom) # Reglage du jeu def determiner_gagnant(joueur, ordi): if joueur == ordi: return "Égalité" elif (joueur - ordi) % 3 == 1: return "Tu gagnes !" else: return "Tu perds..." # Configuartion IA def choix_ia(): if not historique: return random.randint(0, 2) if len(historique) >= 3 and historique[-1] == historique[-2] == historique[-3]: pred = historique[-1] else: compte = [0, 0, 0] for coup in historique: compte[coup] += 1 pred = 0 if compte[1] > compte[pred]: pred = 1 if compte[2] > compte[pred]: pred = 2 return (pred + 1) % 3 # Gestion d'une partie def jouer(coup): historique.append(coup) ordi = choix_ia() resultat = determiner_gagnant(coup, ordi) # sauvegarde du coup dans la base de donnée cursor.execute('INSERT INTO historique (coup) VALUES (?)', (coup,)) connexion.commit() # afficher le résultat texte.clear() texte.goto(0, -80) texte.write( "Toi : {} Ordi : {}".format(options[coup], options[ordi]), align="center", font=("Arial", 14, "normal") ) texte.goto(0, -110) texte.write( resultat, align="center", font=("Arial", 14, "normal") ) # Interaction utilisateur def gestion_clic(x, y): for i, pos in enumerate(positions): if pos - 50 < x < pos + 50 and -50 < y < 50: jouer(i) return fenetre.listen() fenetre.onclick(gestion_clic) fenetre.onkey(lambda: jouer(0), '1') fenetre.onkey(lambda: jouer(1), '2') fenetre.onkey(lambda: jouer(2), '3') dessiner_interface() turtle.done() connexion.close()