DELPUI Loïc
11 months ago
1 changed files with 0 additions and 173 deletions
@ -1,173 +0,0 @@ |
|||||
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 veut dire 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, a fait le SQL |
|
||||
Loïc, loiciste extrémiste, amateur de NSI, a fait le mécanisme du jeu et l'interface graphique |
|
||||
Marvyn, a soutenu Loïc comme un malade, quel coeur de loiciste ! (à confirmer...)""") |
|
||||
|
|
||||
|
|
||||
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() |
|
Loading…
Reference in new issue