You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
172 lines
7.6 KiB
172 lines
7.6 KiB
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("<Button 1>", click)
|
|
|
|
window.mainloop()
|