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.

66872.png

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

puissance4c-big.jpg

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
    f
or 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

SCRE444444444444444444.PNG

quand j'execute le programme crash...

sticker-smiley-pas-content.jpg
CAPTURE PUISSSS 4.PNG

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

screen puissc 4 marche proccessing 4.PNG

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

SCREEEEEEEEEEEEEEEEEEEEEEEEEN.PNG

# 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

Lecon 1 : LES BASEs 2 , 10 et 16

IMG_2415.jfif

Lecon 2 : Representation des nombres

Représentation des nombres langage Python Testez chacune des instructions suivantes dans le shell d’un éditeur Python et expliquez leurs rôles Écriture d’un entier positif :

>>> 0b1001 9
>>> 0x5d 93
Conversions : Python 3.6.9
>>> bin(11) '0b1011'
>>> int('0b1011',2) +1 12
>>> hex(195) '0xc3' Représentation approximative des nombres réels : >>> 0.1+0.2 0.30000000000000004
>>> 0.1+0.2==0.3 
False
>>> from math import*
>>> isclose(7.000000001,7) 
True
>>> abs(0.1+0.2-0.3)
True
>> round(1.235649,3)
1.236

LECON N°3 Encodage des caractères



Le code ASCII, crée en 1966, permet de coder les caractères typographiques américains et quelques caractères techniques (retour à la ligne, ect). Il n'utilise que 7 bits, il y a 2 puissances 7 possibilités soit 127. Pour mettre ces caractères sur un logiciel de traitement de texte, il faut appuyer sur ALT et rentrer le code en même temps.

Le code ASCII a été étendu en 1986 par le code Latin-1 sur 8 bits (avec les caractères accentuées, cédille, ect). A partir de 1988, l'Unicode permet de coder tous les caractères utilisées dans le monde.

En Unicode UTF-8, les caractères les plus courants sont coder sur moins de bits que les caractères rares, cela permet d'optimiser la taille des textes. UTF-8 est utilisée par plus de 95% des sites internets, des caractères étranges apparaissent si le codage des caractères n’est pas celui attendu par le navigateur.

bottom of page