top of page
PROJET FINAL : CREATION DUN JEU DE PUISSANCE 4 SUR PYTHON
Intro :
Pour commencer pourquoi avoir choisis un puissance 4 ?
Car c'est un jeu que j'aime beaucoup et que je connais très bien , puis je me suis dit que sa serait plus a ma porter de créer un jeu de ce type et de réussir à avoir une interface graphique permettant de faire jouer 2 joueurs manuellement . De plus , un ami à moi a déjà pu faire un projet de ce type ce qui ma un peu aider.

NB : les programmes ci-dessous ne sont
pas des programmes totalement
créer par l'éleve Joseph GREGORI

SOMMAIRE DES SEANCES :
Séance 1 : J'ai rechercher pendant 1h une idée de projet , la 2eme heure j'ai regarder des tuto de puissance 4 et je regarder si cela me convenez bien
Séance 2 : J'ai commencer à copier coller différents programmes de puissance 4 malgrès que je ne les comprenez pas forcement
Séance 3 : ABSENT
Séance 4 : ABSENT
Séance 7 : ABSENT
Séance 5 : Avec l'aide de mon ami et d'un tuto que j'ai trouver sur google d'un étudiant , j'ai pu accéder a un programme plus facile
Séance 6 : J'ai laisser python de cote car sa faisais que bug et j'ai essaier sur processing avec des exemples du programme de fantine qui était au tableau
Séance 8 : En vu de l'oral qui arriver ,, je me suis concentrer sur des petits details d'estetique de mon jeu
Effectivement ces programmes ci dessous paraissent assez complexe et long ( et incomprehensible pour moi )donc je vais extraire seulement des lignes de codes qui me paraissent essentielle pour la création de mon jeu puissance 4 et je citerais aussi les sources des autres sites qui ont pu m'aider à comprendre et faire mon programme personnelle
def draw_board(board):
print(" 1 2 3 4 5 6 7")
print("+--|--|--|--|--|--|--+")
for row in range(6):
print(f"| {board[row][0]} | {board[row][1]} | {board[row][2]} | {board[row][3]} | {board[row][4]} | {board[row][5]} | {board[row][6]} |")
print("+--|--|--|--|--|--|--+")
def drop_piece(board, row, col, piece):
board[row][col] = piece
def is_valid_location(board, col):
return board[5][col] == " "
def get_next_open_row(board, col):
for r in range(5, -1, -1):
if board[r][col] == " ":
return r
def print_winner(winner):
if winner == "R":
print("Player 1 (R) has won the game!")
elif winner == "Y":
print("Player 2 (Y) has won the game!")
else:
print("It's a tie!")
def win_move(board, piece):
for c in range(4):
for r in range(6):
if board[r][c] == piece and board[r][c + 1] == piece and board[r][c + 2] == piece and board[r][c + 3] == piece:
return True
for c in range(7):
for r in range(3):
if board[r][c] == piece and board[r + 1][c] == piece and board[r + 2][c] == piece and board[r + 3][c] == piece:
return True
for c in range(4):
for r in range(3):
if board[r][c] == piece and board[r + 1][c + 1] == piece and board[r + 2][c + 2] == piece and board[r + 3][c + 3] == piece:
return True
for c in range(4):
for r in range(3, 6):
if board[r][c] == piece and board[r - 1][c + 1] == piece and board[r - 2][c + 2] == piece and board[r - 3][c + 3] == piece:
return True
return False
def main():
board = [[" " for x in range(7)] for y in range(6)]
game_over = False
turn = "R"
while not game_over:
draw_board(board)
print(f"Player {turn} ({turn}) turn.")
while True:
move = int(input("Choose a column between 1 and 7: ")) - 1
if is_valid_location(board, move):
row = get_next_open_row(board, move)
drop_piece(board)
programme que j'ai pu faire grace a une video tuto youtube
Actuellement le programme s'execute mais n'affiche rien
UPDATE
# Créé par joseph.gregori ( mélange avec un programme internet , le 02/02/2023 en Python 3.7
ROWS = 6
COLUMNS = 7
def create_board():
board = []
for row in range(ROWS):
board.append([0] * COLUMNS)
return board
def print_board(board):
for row in board:
print(row)
def drop_piece(board, row, col, piece):
board[row][col] = piece
def is_valid_location(board, col):
return board[ROWS - 1][col] == 0
def get_next_open_row(board, col):
for r in range(ROWS):
if board[r][col] == 0:
return r
def winning_move(board, piece):
# check horizontal locations for win
for c in range(COLUMNS - 3):
for r in range(ROWS):
if board[r][c] == piece and board[r][c + 1] == piece and board[r][c + 2] == piece and board[r][c + 3] == piece:
return True
# check vertical locations for win
for c in range(COLUMNS):
for r in range(ROWS - 3):
if board[r][c] == piece and board[r + 1][c] == piece and board[r + 2][c] == piece and board[r + 3][c] == piece:
return True
# check for positive diagonal wins
for c in range(COLUMNS - 3):
for r in range(ROWS - 3):
if board[r][c] == piece and board[r + 1][c + 1] == piece and board[r + 2][c + 2] == piece and board[r + 3][c + 3] == piece:
return True
# check for negative diagonal wins
for c in range(COLUMNS - 3):
for r in range(3, ROWS):
if board[r][c] == piece and board[r - 1][c + 1] == piece and board[r - 2][c + 2] == piece and board[r - 3][c + 3] == piece:
return True
board = create_board()
print_board(board)
game_over = False
turn = 0
while not game_over:
# Ask for Player 1 Input
if turn == 0:
col = int(input("Player 1 Make Your Selection (0-6):"))
if is_valid_location(board, col):
row = get_next_open_row(board, col)
drop_piece(board, row, col, 1)
if winning_move(board, 1):
print("Player 1 Wins!\n")
game_over = True
# Ask for Player 2 Input
else:
col = int(input("Player 2 Make Your Selection (0-6):"))
if is_valid_location(board, col):
row = get_next_open_row(board, col)
drop_piece(board, row, col, 2)
if winning_move(board, 2):
print("Player2")
A savoir : les commandes en orange sont celles modifié par moi ou celle conseiller par le prof et en bleu les commande tirés de tuto youtube ou de site internet

quand j'execute le programme crash...


après avoir trouver le probleme et modifier le programme , j'ai obtenu le resultat ci-dessous . Le Programme fonctionne belle et bien et on peut y jouer à 2 joueurs
def afficher_grille(grille):
print(" 0) 1) 2)")
print(" -------------")
print("0)", end='')
for i in range(3):
print(" | "+str(grille[i]), end='')
print(" |")
print(" -------------")
print("1)", end='')
for i in range(3):
print(" | "+str(grille[i+3]), end='')
print(" |")
print(" -------------")
print("2)", end='')
for i in range(3):
print(" | "+str(grille[i+6]), end='')
print(" |")
print(" -------------")
voila comment on va
faire pour afficher
notre jeu sur la
console python
( sa n'affiche que des
questions ou l'on répond
et c'est un programme
pris de youtube aussi
Passons sur processing 4
grid = [[[] for j in range(6)] for i in range(7)]
dir = [(-1, -1), (-1, 1), (0, -1), (1, 0)]
coef = 100
player = "Red"
def setup(): # 7*6
size(coef*7, coef*6)
def draw():
background(50)
for i in range(7):
for j in range(6):
fill(200)
rect(i*(width/7), j*(height/6), width/7, height/6)
if grid[i][j] != []:
fill(grid[i][j][0], grid[i][j][1], grid[i][j][2])
ellipse(i*(width/7) + width/14, j*(height/6) + height/12, width/8, height/7)
def recur(i, j, apply, search, depth):
if depth == 4:
return True
ib = i + apply[0]
jb = j + apply[1]
if 0 <= ib < 7 and 0 <= jb < 6:
if grid[ib][jb] == search:
return recur(ib, jb, apply, search, depth+1)
return False
def verify():
winner = 0
for i in range(7):
for j in range(6):
search = grid[i][j]
if search != []:
for apply in dir:
test = recur(i, j, apply, search, 1)
if test == True:
winner = search
if winner != 0:
noLoop()
#background(0)
if winner == [200, 50, 50]:
winner = "Rouge"
else:
winner = "Jaune"
fill(0)
textSize(50)
text("{} a gagne".format(winner), 100, height/2)
def mousePressed():
global player, grid
if player == "red":
pos = mouseX//(width/7)
for j in range(len(grid[pos])-1, -1, -1):
if grid[pos][j] == []:
grid[pos][j] = [200, 50, 50]
verify()
player = "yellow"
return 0
else:
pos = mouseX//(width/7)
for j in range(len(grid[pos])-1, -1, -1):
if grid[pos][j] == []:
grid[pos][j] = [200, 200, 50]
verify()
player = "red"
return 0
c'était un programme déjà fait
que j'ai trouve sur youtube
mais que j'ai modifie
, effectivement grâce
au programme de fantine
que l'on a pu voir au tableau j
'ai pu changer des commandes
que je ne comprenais pas .
J'ai surligner en orange
les commandes que j'ai
pu modifier moi même
ou grâce à l'aide du prof
, et en bleu le programme
pris du tuto youtube
A savoir

Petit probleme comme
on peut le constater
le jeu s'affiche
mais le dernier
pion pour la victoire
ne s'affiche
malheureusement pas
je vais donc chercher
une solution en
cherchant
d'ou vient le problème
ou de faire une
nouvelle
commande pour cela
from turtle import *
# Initialisation des paramètres et du jeu
sc=getscreen()
ht()
def initJeu():# crée la liste sur laquelle le jeu se déroule
global jeu
global joueur
global nbrCoups
joueur=1
jeu = [[0,0,0,0,0,0,0], # on fait une liste pour remplir le tableau
[0,0,0,0,0,0,0],
[0,0,0,0,0,0,0],
[0,0,0,0,0,0,0],
[0,0,0,0,0,0,0],
[0,0,0,0,0,0,0]]
nbrCoups=0
sc.clear()#remet le quad a 0 pour qu'il soit toujours vide
quadrillage()
def quadrillage():#crée le quadrillage
tracer(False)
for i in range(0,7):
up()
goto(-350,-300+100*i)
down()
fd(700)
left(90)
for i in range(0,8):
up()
goto(-350+100*i,-300)
down()
fd(600)
update()#met à jour
up()
home()
goto(0,-340)
down()
write("Appuyez sur Espace pour rejouer.",False,'center',("Arial", 16, "bold"))
update()
def determineCase(x,y):
#initialise les valeurs de I et J pour remettre a 0 à chaque utilisations
global i
global j
i=0
j=0
j=int((x+350)//100)
i=int((y+300)//100)
print(i,j)#les deux print sont pour debuguer, afficher les coord de i et j dans la console
print(x,y)
return i,j
def pionJoueur1(i,j):#crée les pions
up()
home()
goto(-300+100*j,-300+100*i+10)
begin_fill()
circle(40)
end_fill()
def pionJoueur2(i,j):
up()
home()
goto(-300+100*j,-300+100*i+10)
begin_fill()
circle(40,None,4)
end_fill()
def continuer(): # défini si il y a un gagnant
global jeu
global nbrCoups
global joueur
onContinue=True
#compris entre 1 et 16 car 1*1*1*1=1 et 2*2*2*2=16 (numéro du joueur )
for i in range(0,5): #On teste si une ligne est gagnante
if jeu[i][0]*jeu[i][1]*jeu[i][2]*jeu[i][3] in [1,16] or jeu[i][1]*jeu[i][2]*jeu[i][3]*jeu[i][4] in [1,16]\
or jeu[i][2]*jeu[i][3]*jeu[i][4]*jeu[i][5] in [1,16] or jeu[i][3]*jeu[i][4]*jeu[i][5]*jeu[i][6] in [1,16]:
onContinue=False
for j in range(0,6): #On teste si une colonne est gagnante
if jeu[0][j]*jeu[1][j]*jeu[2][j]*jeu[3][j] in [1,16] or (jeu[1][j]*jeu[2][j]*jeu[3][j]*jeu[4][j] in [1,16])\
or jeu[2][j]*jeu[3][j]*jeu[4][j]*jeu[5][j] in [1,16]:
onContinue=False
#on test les diagonales "montantes" ## le BackSlash sert a revenir a la ligne au sein d'une meme ligne
if jeu[0][0]*jeu[1][1]*jeu[2][2]*jeu[3][3] in [1,16] or jeu[0][1]*jeu[1][2]*jeu[2][3]*jeu[3][4] in [1,16] \
or jeu[0][2]*jeu[1][3]*jeu[2][4]*jeu[3][5] in [1,16] or jeu[0][3]*jeu[1][4]*jeu[2][5]*jeu[3][6] in [1,16]\
or jeu[1][0]*jeu[2][1]*jeu[3][2]*jeu[4][3] in [1,16] or jeu[1][1]*jeu[2][2]*jeu[3][3]*jeu[4][4] in [1,16]\
or jeu[1][2]*jeu[2][3]*jeu[3][4]*jeu[4][5] in [1,16] or jeu[1][3]*jeu[2][4]*jeu[3][5]*jeu[4][6] in [1,16]\
or jeu[2][0]*jeu[3][1]*jeu[4][2]*jeu[5][3] in [1,16] or jeu[2][1]*jeu[3][2]*jeu[4][3]*jeu[5][4] in [1,16]\
or jeu[2][2]*jeu[3][3]*jeu[4][4]*jeu[5][5] in [1,16] or jeu[2][3]*jeu[3][4]*jeu[4][5]*jeu[5][6] in [1,16]:
onContinue=False
#on test les diagonales descendantes
if jeu[0][6]*jeu[1][5]*jeu[2][4]*jeu[3][3] in [1,16] or jeu[0][5]*jeu[1][4]*jeu[2][3]*jeu[3][2] in [1,16] \
or jeu[0][4]*jeu[1][3]*jeu[2][2]*jeu[3][1] in [1,16] or jeu[0][3]*jeu[1][2]*jeu[2][1]*jeu[3][0] in [1,16]\
or jeu[1][6]*jeu[2][5]*jeu[3][4]*jeu[4][3] in [1,16] or jeu[1][5]*jeu[2][4]*jeu[3][3]*jeu[4][2] in [1,16]\
or jeu[1][4]*jeu[2][3]*jeu[3][2]*jeu[4][1] in [1,16] or jeu[1][3]*jeu[2][2]*jeu[3][1]*jeu[4][0] in [1,16]\
or jeu[2][6]*jeu[3][5]*jeu[4][4]*jeu[5][3] in [1,16] or jeu[2][5]*jeu[3][4]*jeu[4][3]*jeu[5][2] in [1,16]\
or jeu[2][4]*jeu[3][3]*jeu[4][2]*jeu[5][1] in [1,16] or jeu[2][3]*jeu[3][2]*jeu[4][1]*jeu[5][0] in [1,16]:
onContinue=False
return onContinue
def gagnant(numeroJoueur): #affiche le gagnant
up()
home()
goto(0,350)
down()
if numeroJoueur==0:
write("Match NUL",False,'center',("Arial", 16, "bold"))
else:
write("Le joueur " + str(numeroJoueur) + " est GAGNANT",False,'center',("Arial", 16, "bold"))
def play(x,y):#partie qui fait apparaitre les pion et qui rempli la liste
global joueur
global jeu
global nbrCoups
case=determineCase(x,y)
#### partie a optimisé
###### les print servent à afficher dans la console la liste, ca me sert principalement a débuguer dans les cas ou les pions réécrivait sur les précédents
if (i not in [0,1,2,3,4,5]) or (j not in [0,1,2,3,4,5,6]):
up()
home()
goto(0,320)
down()
write("mauvaise case",False,'center',("Arial", 16, "bold"))
return
if jeu[0][j] not in [1,2]:
if joueur == 1:
jeu[0][j] = 1
print(jeu)
pionJoueur1(0,j)
else:
jeu[0][j]=2
print(jeu)
pionJoueur2(0,j)
nbrCoups=nbrCoups+1
if continuer()==False: # Si la fonction continuer, alors on affiche le gagnant
if joueur==1:
gagnant(1)
elif joueur==-1:
gagnant(2)
else:
gagnant(0)
sc.onclick(None) # On arrete d'écouter l'evenement onclick
else:
joueur=joueur*(-1) # On change le joueur
elif jeu[1][j] not in [1,2]:
if joueur == 1:
jeu[1][j] = 1
print(jeu)
pionJoueur1(1,j)
else:
jeu[1][j]=2
print(jeu)
pionJoueur2(1,j)
nbrCoups=nbrCoups+1
if continuer()==False: # Si la fonction continuer, alors on affiche le gagnant
if joueur==1:
gagnant(1)
elif joueur==-1:
gagnant(2)
else:
gagnant(0)
sc.onclick(None) # On arrete d'écouter l'evenement onclick
else:
joueur=joueur*(-1) # On change le joueur
elif jeu[2][j] not in [1,2]:
if joueur == 1:
jeu[2][j] = 1
print(jeu)
pionJoueur1(2,j)
else:
jeu[2][j]=2
print(jeu)
pionJoueur2(2,j)
nbrCoups=nbrCoups+1
if continuer()==False: # Si la fonction continuer, alors on affiche le gagnant
if joueur==1:
gagnant(1)
elif joueur==-1:
gagnant(2)
else:
gagnant(0)
sc.onclick(None) # On arrete d'écouter l'evenement onclick
else:
joueur=joueur*(-1) # On change le joueur
elif jeu[3][j] not in [1,2]:
if joueur == 1:
jeu[3][j] = 1
print(jeu)
pionJoueur1(3,j)
else:
jeu[3][j]=2
print(jeu)
pionJoueur2(3,j)
nbrCoups=nbrCoups+1
if continuer()==False: # Si la fonction continuer, alors on affiche le gagnant
if joueur==1:
gagnant(1)
elif joueur==-1:
gagnant(2)
else:
gagnant(0)
sc.onclick(None) # On arrete d'écouter l'evenement onclick
else:
joueur=joueur*(-1) # On change le joueur
elif jeu[3][j] not in [1,2]:
if joueur == 1:
jeu[3][j] = 1
print(jeu)
pionJoueur1(3,j)
else:
jeu[3][j]=2
print(jeu)
pionJoueur2(3,j)
nbrCoups=nbrCoups+1
if continuer()==False: # Si la fonction continuer, alors on affiche le gagnant
if joueur==1:
gagnant(1)
elif joueur==-1:
gagnant(2)
else:
gagnant(0)
sc.onclick(None) # On arrete d'écouter l'evenement onclick
else:
joueur=joueur*(-1) # On change le joueur++-
elif jeu[4][j] not in [1,2]:
if joueur == 1:
jeu[4][j] = 1
print(jeu)
pionJoueur1(4,j)
else:
jeu[4][j]=2
print(jeu)
pionJoueur2(4,j)
nbrCoups=nbrCoups+1
if continuer()==False: # Si la fonction continuer, alors on affiche le gagnant
if joueur==1:
gagnant(1)
elif joueur==-1:
gagnant(2)
else:
gagnant(0)
sc.onclick(None) # On arrete d'écouter l'evenement onclick
else:
joueur=joueur*(-1) # On change le joueur
elif jeu[5][j] not in [1,2]:
if joueur == 1:
jeu[5][j] = 1
print(jeu)
pionJoueur1(5,j)
else:
jeu[5][j]=2
print(jeu)
pionJoueur2(5,j)
nbrCoups=nbrCoups+1
if continuer()==False: # Si la fonction continuer, alors on affiche le gagnant
if joueur==1:
gagnant(1)
elif joueur==-1:
gagnant(2)
else:
gagnant(0)
sc.onclick(None) # On arrete d'écouter l'evenement onclick
else:
joueur=joueur*(-1) # On change le joueur
# Programme principal
def main():
initJeu()
sc.onclick(play)
sc.onkeypress(main,'space')
sc.listen()
if __name__=='__main__':
print(main())
mainloop()
PROGRAMME FONCTIONNEL QUI AFFICHE
UN RESULTATS SUR PYTHON VENANT D'INTERNET
CAR LE MIEN VEUT PAS AFFICHE IL CRASH

# Créé par josephgregori, le 28/02/2023 en Python 3.7
from turtle import *
#import matplotlib.pyplot as plt
# Initialisation des paramètres et du jeu
sc=getscreen()
hideturtle()
def initJeu():# crée la liste sur laquelle le jeu se déroule
global jeu
global joueur
global nbrCoups
joueur=1
jeu = [[0,0,0,0,0,0,0], # on fait une liste pour remplir le tableau
[0,0,0,0,0,0,0],
[0,0,0,0,0,0,0],
[0,0,0,0,0,0,0],
[0,0,0,0,0,0,0],
[0,0,0,0,0,0,0]]
nbrCoups=0
sc.clear()#remet le quad a 0 pour qu'il soit toujours vide
quadrillage()
def quadrillage():#crée le quadrillage avec fond bleu blanc rouge
bgcolor("green") # remplace le fond actuel par un fond rouge clair
tracer(0,0)
for i in range(0,7):
up()
goto(-350,-300+100*i)
down()
fd(700)
left(90)
for i in range(0,8):
up()
goto(-350+100*i,-300)
down()
fd(600)
update()#met à jour
up()
home()
goto(0,-340)
down()
write("Appuyez sur Espace pour rejouer.",False,'center',("Arial", 16, "bold"))
update()
def determineCase(x,y):
#initialise les valeurs de I et J pour remettre a 0 à chaque utilisations
global i
global j
i=0
j=0
j=int((x+350)//100)
i=int((y+300)//100)
print(i,j)#les deux print sont pour debuguer, afficher les coord de i et j dans la console
print(x,y)
return i,j
def pionJoueur1(i,j):#crée les pions du joueur 1
up()
home()
goto(-300+100*j,-300+100*i+10)
begin_fill()
circle(40)
fillcolor("yellow")
end_fill()
up()
goto(-300+100*j,-300+100*i+45)
down() #au couleurs du nouveau drapeau de la Guadeloupe ( vert ,rouge , jaune )
write("1",False,'center',("Arial", 20, "bold"))
# + numero 1,2 dans les pions
def pionJoueur2(i,j):#crée les pions du joueur 2
up()
home()
goto(-300+100*j,-300+100*i+10)
begin_fill()
circle(40)
fillcolor("red")
end_fill()
up()
goto(-300+100*j,-300+100*i+45)
down()
write("2",False,'center',("Arial", 20, "bold"))
print ( pionJoueur1,pionJoueur2)
def continuer(): # défini si il y a un gagnant
global jeu
global nbrCoups
global joueur
onContinue=True
#compris entre 1 et 16 car 1*1*1*1=1 et 2*2*2*2=16 (numéro du joueur )
for i in range(0,5): #On teste si une ligne est gagnante
if jeu[i][0]*jeu[i][1]*jeu[i][2]*jeu[i][3] in [1,16] or jeu[i][1]*jeu[i][2]*jeu[i][3]*jeu[i][4] in [1,16]\
or jeu[i][2]*jeu[i][3]*jeu[i][4]*jeu[i][5] in [1,16] or jeu[i][3]*jeu[i][4]*jeu[i][5]*jeu[i][6] in [1,16]:
onContinue=False
for j in range(0,6): #On teste si une colonne est gagnante
if jeu[0][j]*jeu[1][j]*jeu[2][j]*jeu[3][j] in [1,16] or (jeu[1][j]*jeu[2][j]*jeu[3][j]*jeu[4][j] in [1,16])\
or jeu[2][j]*jeu[3][j]*jeu[4][j]*jeu[5][j] in [1,16]:
onContinue=False
#on test les diagonales "montantes" ## le BackSlash sert a revenir a la ligne au sein d'une meme ligne
if jeu[0][0]*jeu[1][1]*jeu[2][2]*jeu[3][3] in [1,16] or jeu[0][1]*jeu[1][2]*jeu[2][3]*jeu[3][4] in [1,16] \
or jeu[0][2]*jeu[1][3]*jeu[2][4]*jeu[3][5] in [1,16] or jeu[0][3]*jeu[1][4]*jeu[2][5]*jeu[3][6] in [1,16]\
or jeu[1][0]*jeu[2][1]*jeu[3][2]*jeu[4][3] in [1,16] or jeu[1][1]*jeu[2][2]*jeu[3][3]*jeu[4][4] in [1,16]\
or jeu[1][2]*jeu[2][3]*jeu[3][4]*jeu[4][5] in [1,16] or jeu[1][3]*jeu[2][4]*jeu[3][5]*jeu[4][6] in [1,16]\
or jeu[2][0]*jeu[3][1]*jeu[4][2]*jeu[5][3] in [1,16] or jeu[2][1]*jeu[3][2]*jeu[4][3]*jeu[5][4] in [1,16]\
or jeu[2][2]*jeu[3][3]*jeu[4][4]*jeu[5][5] in [1,16] or jeu[2][3]*jeu[3][4]*jeu[4][5]*jeu[5][6] in [1,16]:
onContinue=False
#on test les diagonales descendantes
if jeu[0][6]*jeu[1][5]*jeu[2][4]*jeu[3][3] in [1,16] or jeu[0][5]*jeu[1][4]*jeu[2][3]*jeu[3][2] in [1,16] \
or jeu[0][4]*jeu[1][3]*jeu[2][2]*jeu[3][1] in [1,16] or jeu[0][3]*jeu[1][2]*jeu[2][1]*jeu[3][0] in [1,16]\
or jeu[1][6]*jeu[2][5]*jeu[3][4]*jeu[4][3] in [1,16] or jeu[1][5]*jeu[2][4]*jeu[3][3]*jeu[4][2] in [1,16]\
or jeu[1][4]*jeu[2][3]*jeu[3][2]*jeu[4][1] in [1,16] or jeu[1][3]*jeu[2][2]*jeu[3][1]*jeu[4][0] in [1,16]\
or jeu[2][6]*jeu[3][5]*jeu[4][4]*jeu[5][3] in [1,16] or jeu[2][5]*jeu[3][4]*jeu[4][3]*jeu[5][2] in [1,16]\
or jeu[2][4]*jeu[3][3]*jeu[4][2]*jeu[5][1] in [1,16] or jeu[2][3]*jeu[3][2]*jeu[4][1]*jeu[5][0] in [1,16]:
onContinue=False
return onContinue
def gagnant(numeroJoueur): #affiche le gagnant
up()
home()
goto(0,350)
down()
if numeroJoueur==0:
write("Match NUL",False,'center',("Arial", 16, "bold"))
else:
write("Le joueur " + str(numeroJoueur) + " est juste meilleur que toi , améliore toi ",False,'center',("Arial", 16, "bold"))
update()
def play(x,y):#partie qui fait apparaitre les pion et qui rempli la liste
global joueur
global jeu
global nbrCoups
case=determineCase(x,y)
#### partie a optimisé
###### les print servent à afficher dans la console la liste, ca me sert principalement a débuguer dans les cas ou les pions réécrivait sur les précédents
if (i not in [0,1,2,3,4,5]) or (j not in [0,1,2,3,4,5,6]):
up()
home()
goto(0,320)
down()
write("mauvaise case",False,'center',("Arial", 16, "bold"))
return
if jeu[0][j] not in [1,2]:
if joueur == 1:
jeu[0][j] = 1
print(jeu)
pionJoueur1(0,j)
else:
jeu[0][j]=2
print(jeu)
pionJoueur2(0,j)
nbrCoups=nbrCoups+1
if continuer()==False: # Si la fonction continuer, alors on affiche le gagnant
if joueur==1:
gagnant(1)
elif joueur==-1:
gagnant(2)
else:
gagnant(0)
sc.onclick(None) # On arrete d'écouter l'evenement onclick
else:
joueur=joueur*(-1) # On change le joueur
elif jeu[1][j] not in [1,2]:
if joueur == 1:
jeu[1][j] = 1
print(jeu)
pionJoueur1(1,j)
else:
jeu[1][j]=2
print(jeu)
pionJoueur2(1,j)
nbrCoups=nbrCoups+1
if continuer()==False: # Si la fonction continuer, alors on affiche le gagnant
if joueur==1:
gagnant(1)
elif joueur==-1:
gagnant(2)
else:
gagnant(0)
sc.onclick(None) # On arrete d'écouter l'evenement onclick
else:
joueur=joueur*(-1) # On change le joueur
elif jeu[2][j] not in [1,2]:
if joueur == 1:
jeu[2][j] = 1
print(jeu)
pionJoueur1(2,j)
else:
jeu[2][j]=2
print(jeu)
pionJoueur2(2,j)
nbrCoups=nbrCoups+1
if continuer()==False: # Si la fonction continuer, alors on affiche le gagnant
if joueur==1:
gagnant(1)
elif joueur==-1:
gagnant(2)
else:
gagnant(0)
sc.onclick(None) # On arrete d'écouter l'evenement onclick
else:
joueur=joueur*(-1) # On change le joueur
elif jeu[3][j] not in [1,2]:
if joueur == 1:
jeu[3][j] = 1
print(jeu)
pionJoueur1(3,j)
else:
jeu[3][j]=2
print(jeu)
pionJoueur2(3,j)
nbrCoups=nbrCoups+1
if continuer()==False: # Si la fonction continuer, alors on affiche le gagnant
if joueur==1:
gagnant(1)
elif joueur==-1:
gagnant(2)
else:
gagnant(0)
sc.onclick(None) # On arrete d'écouter l'evenement onclick
else:
joueur=joueur*(-1) # On change le joueur
elif jeu[3][j] not in [1,2]:
if joueur == 1:
jeu[3][j] = 1
print(jeu)
pionJoueur1(3,j)
else:
jeu[3][j]=2
print(jeu)
pionJoueur2(3,j)
nbrCoups=nbrCoups+1
if continuer()==False: # Si la fonction continuer, alors on affiche le gagnant
if joueur==1:
gagnant(1)
elif joueur==-1:
gagnant(2)
else:
gagnant(0)
sc.onclick(None) # On arrete d'écouter l'evenement onclick
else:
joueur=joueur*(-1) # On change le joueur++-
elif jeu[4][j] not in [1,2]:
if joueur == 1:
jeu[4][j] = 1
print(jeu)
pionJoueur1(4,j)
else:
jeu[4][j]=2
print(jeu)
pionJoueur2(4,j)
nbrCoups=nbrCoups+1
if continuer()==False: # Si la fonction continuer, alors on affiche le gagnant
if joueur==1:
gagnant(1)
elif joueur==-1:
gagnant(2)
else:
gagnant(0)
sc.onclick(None) # On arrete d'écouter l'evenement onclick
else:
joueur=joueur*(-1) # On change le joueur
elif jeu[5][j] not in [1,2]:
if joueur == 1:
jeu[5][j] = 1
print(jeu)
pionJoueur1(5,j)
else:
jeu[5][j]=2
print(jeu)
pionJoueur2(5,j)
nbrCoups=nbrCoups+1
if continuer()==False: # Si la fonction continuer, alors on affiche le gagnant
if joueur==1:
gagnant(1)
elif joueur==-1:
gagnant(2)
else:
gagnant(0)
sc.onclick(None) # On arrete d'écouter l'evenement onclick
else:
joueur=joueur*(-1) # On change le joueur
# Programme principal
def main():
initJeu()
sc.onclick(play)
sc.onkeypress(main,'space')
sc.listen()
if __name__=='__main__':
print(main())
mainloop()
programme issus de plusieurs tests
, plusieurs échecs et plantages
puis plusieurs modifications
personnels sur des lignes de
codes complique par des plus
facile ( pour moi ) et
modification de l'estetique
bottom of page