diff --git a/projet bataille.py b/projet bataille.py new file mode 100644 index 0000000..75e48cd --- /dev/null +++ b/projet bataille.py @@ -0,0 +1,172 @@ +from tkinter import * +from File import * +from random import shuffle +from tkinter import messagebox +import sqlite3 + +class Carte: + def __init__(self, valeur, couleur): + self.valeur = valeur + self.couleur = couleur + def compare(self, other): + #Les valeurs revoyées ne respectent pas les consignes pour des raisons d'optimisation et d'allègement du programme (ils sont directement utilisées en tant qu'indice des listes) + if self.valeur > other.valeur: + return 1 + elif self.valeur < other.valeur: + return 0 + return 2 + +class Jeux: + def __init__ (self, nbr_cartes): + self.nb = nbr_cartes + self.paquet = [] + for i in couleurs: + if self.nb == 52: + for j in numeros: + self.paquet.append(Carte(j, i)) + else: + for j in numeros[5:]: + self.paquet.append(Carte(j, i)) + shuffle(self.paquet) + + def distribue(self): + while len(self.paquet) > 0: + for player in players: + player.enfiler(self.paquet.pop(0)) + +def click(event): + global status, cartes_tour + + def afficher(): + for i in range(2): + canvas.itemconfig(player_cartecolor[i], fill = "#fff") + canvas.itemconfig(player_carte[i], text = cartes_tour[-i-1].valeur + cartes_tour[-i-1].couleur) + canvas.itemconfig(player_left[i], text = "Left : " + str(players[i].taille())) + if cartes_tour[-i-1].couleur in ["♥", "♦"]: + canvas.itemconfig(player_carte[i], fill = "#f00") + else: + canvas.itemconfig(player_carte[i], fill = "#000") + + def retourne_carte(): + for i in range(2): + canvas.itemconfig(player_cartecolor[i], fill = "#f77") + canvas.itemconfig(player_carte[i], text = "") + canvas.itemconfig(player_left[i], text = "Left : " + str(players[i].taille())) + + if players[0].taille() == 0: + messagebox.showinfo("Le joueur 2 a gagné", "LE JOUEUR 2 A GAGNÉ !") + exit() + if players[1].taille() == 0: + messagebox.showinfo("Le joueur 1 a gagné", "LE JOUEUR 1 A GAGNÉ !") + exit() + + x, y = event.x, event.y + if x > 50 and x < 150 and y > 100 and y < 250: + if status == 1: + cartes_tour = [] + cartes_tour.extend([players[0].defiler(), players[1].defiler()]) + winner = cartes_tour[-2].compare(cartes_tour[-1]) + if winner == 2: + status = 2 + else: + for carte in cartes_tour: + players[winner].enfiler(carte) + afficher() + elif status == 2: + cartes_tour.extend([players[0].defiler(), players[1].defiler()]) + retourne_carte() + status = 3 + else: + cartes_tour.extend([players[0].defiler(), players[1].defiler()]) + winner = cartes_tour[-2].compare(cartes_tour[-1]) + if winner == 2: + status = 2 + else: + status = 1 + for carte in cartes_tour: + players[winner].enfiler(carte) + afficher() + Per1 = ("Joueur 1", str(players[0].taille()), cartes_tour[-2].valeur,) + c.execute("INSERT INTO Cartes VALUES (?, ?, ?)", Per1) + Per2 = ("Joueur 2", str(players[1].taille()), cartes_tour[-1].valeur,) + c.execute("INSERT INTO Cartes VALUES (?, ?, ?)", Per2) + c.execute("SELECT * FROM Cartes") + conn.commit() + +def info(): + messagebox.showinfo("Achtung : Informations Importantes", """Salut les quoicoubébous, +Notre mission que nous n'avons pas accepté (mais que l'on nous a fait accomplir de force) est de réaliser un jeu de bataille en utilisant une structure de donnée adaptée, et avec une interface graphique. Nous avions pour cela 6 heures de NSI + les nuits + les week-end + les divers activités quoicoubizarres. +Nous avons fait le minimum requis, c'est à dire une classe Carte, plus une classe Jeux... Puis nous avons fait le maxinmum possible, c'est à dire une jolie interface graphique loiciste extrémiste... +Voici les règles du jeu le plus baisé de tous les temps : +Je cite : +'À chaque tour de jeu, chaque joueur joue la carte supérieure de son paquet. Le joueur ayant la carte de plus +grande valeur récupère les deux cartes et les remets sous son paquet. +En cas d’égalité, chaque joueur ajoute une carte à l’envers, puis une autre carte à l’endroit, et on compare à +nouveau les valeurs. En cas de nouvelle égalité, on réitère le processus. Le gagnant remporte l’ensemble des +cartes jouées. +Si un joueur ne peut plus jouer car il n’a plus de carte, il a perdu la partie.' +Concernant l'interface graphique, elle a été réalisée avec Tkinter, elle permet de faire un partie contre l'ordinateur... Comme ce n'est pas interdit, nous avons affiché les cartes à un format graphique, car nous sommes en Terminale NSI et nous ne sommes pas bêtes, la preuve : regardez ma beauté :) +Au cas où s'il y a des quoicoubozos, D comme DIX (10, pas 509 (si vous avez compris ça, je vous donne 10 centimes)), J comme Jack, Q comme Queen, R comme Roi, et S comme aS... +Voici l'équipe : +Alexi, chef d'équipe, amateur de NSI, ptit fan de loli +Loïc, loiciste extrémiste, amateur de NSI, grand amateur de quoicoubébous +Marvyn, grand amateur de NSI, a soutenu Loïc comme un malade (ce qui est vital), quel coeur de loiciste ! """) + +couleurs = ["♥", "♦", "♣", "♠"] +numeros = ["2", "3", "4", "5", "6", "7", "8", "9", "D", "J", "Q", "R", "S"] +#D=Dix +#J=Jack +#Q=Queen +#R=Roi +#S=aS + +def starting(nb_cartes): + global jeu + jeu = Jeux(nb_cartes) + start.destroy() + +start = Tk() +start_title = Label(start, text = "La Bataille", font = ("Courrier New", 30, "bold")) +start_title.pack() +button_32 = Button(start, text = "Jeu de 32 cartes", font = ("Courrier New", 20, "bold"), command = lambda: starting(32)) +button_32.pack() +button_52 = Button(start, text = "Jeu de 52 cartes", font = ("Courrier New", 20, "bold"), command = lambda: starting(52)) +button_52.pack() +start.mainloop() + +players = [File_chaine(), File_chaine()] + +conn = sqlite3.connect("Bataille.db") +c = conn.cursor() +c.execute('''CREATE TABLE if not exists Cartes(Joueur VARCHAR(255), NombreCartes INT, CarteJouée TEXT)''') +Per1 = ("Joueur 1", str(players[0].taille()), None) +c.execute("INSERT INTO Cartes VALUES (?, ?, ?)", Per1) +Per2 = ("Joueur 2", str(players[1].taille()), None) +c.execute("INSERT INTO Cartes VALUES (?, ?, ?)", Per2) +c.execute("SELECT * FROM Cartes") +c.fetchall() +conn.commit() + +jeu.distribue() + +window = Tk() +window.title("Bataille") +window.geometry(f"700x400+300+200") + +canvas = Canvas(window, width = 650, height = 300, background = "#070") +canvas.place(x = 25, y = 50) + +canvas.create_rectangle(50, 100, 150, 250, fill = "#f77") +canvas.create_rectangle(500, 100, 600, 250, fill = "#f77") +player_cartecolor = [canvas.create_rectangle(200, 75, 300, 225, fill = "#fff"), canvas.create_rectangle(350, 75, 450, 225, fill = "#fff")] +player_left = [canvas.create_text(100, 175, text = "Left : " + str(players[0].taille())), canvas.create_text(550, 175, text = "Left : " + str(players[1].taille()))] +player_carte = [canvas.create_text(250, 150, text = "", font = ("Courrier New", 30, "bold")), canvas.create_text(400, 150, text = "", font = ("Courrier New", 30, "bold"))] + +info_button = Button(window, text = "Achtung ! Information importante", command = info) +info_button.place(x = 260, y = 370) + +status = 1 + +canvas.bind("