Jeux échec

robinmoon -  
Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour, je suis en apprentissage de pygame et je commence a faire un jeu d'échec en pygame et je suis bloqué dessus depuis 3 jour sur comment détecter les pièces et par la suite faire des déplacements même si je pense que j'utiliserais des calculs de coordonnées. Merci d'avance pour l'aide !

import pygame
from pygame.locals import *
import time

case = 84

A = 60
B = 60 + case
C = 60 + case * 2
D = 60 + case * 3
E = 60 + case * 4
F = 60 + case * 5
G = 60 + case * 6
H = 60 + case * 7

Huit = 60
Sept = 60 + case
Six = 60 + case * 2
Cinq = 60 + case * 3
Quatre = 60 + case * 4
Trois = 60 + case * 5
Deux = 60 + case * 6
Un = 60 + case * 7

SIZE = 100
WIDTH = 8
HEIGHT = 8

pygame.init()
fenetre = pygame.display.set_mode((800,800))
echiquier = pygame.image.load("plateau.png").convert_alpha()
fenetre.blit(echiquier,(0,0))

#Placement reines
QeB= pygame.image.load("Reine_Blanc.png").convert_alpha()
fenetre.blit(QeB,(D,Un))
pygame.display.flip()

QeW= pygame.image.load("Reine_Noir.png").convert_alpha()
fenetre.blit(QeW,(D,Huit))
pygame.display.flip()

#Placement rois
KiB= pygame.image.load("Roi_Noir.png").convert_alpha()
fenetre.blit(KiB,(E,Huit))
pygame.display.flip()

KiW= pygame.image.load("Roi_Blanc.png").convert_alpha()
fenetre.blit(KiW,(E,Un))
pygame.display.flip()

#Placement fous
BB= pygame.image.load("Fou_Noir.png").convert_alpha()
fenetre.blit(BB,(F,Huit))
pygame.display.flip()

BW= pygame.image.load("Fou_Blanc.png").convert_alpha()
fenetre.blit(BW,(F,Un))
pygame.display.flip()

BB= pygame.image.load("Fou_Noir.png").convert_alpha()
fenetre.blit(BB,(C,Huit))
pygame.display.flip()

BW= pygame.image.load("Fou_Blanc.png").convert_alpha()
fenetre.blit(BW,(C,Un))
pygame.display.flip()

#Placement cavaliers
KB= pygame.image.load("Cavalier_Noir.png").convert_alpha()
fenetre.blit(KB,(B,Huit))
pygame.display.flip()

KW= pygame.image.load("Cavalier_Blanc.png").convert_alpha()
fenetre.blit(KW,(B,Un))
pygame.display.flip()

KB= pygame.image.load("Cavalier_Noir.png").convert_alpha()
fenetre.blit(KB,(G,Huit))
pygame.display.flip()

KW= pygame.image.load("Cavalier_Blanc.png").convert_alpha()
fenetre.blit(KW,(G,Un))
pygame.display.flip()

#Placement tours
RB= pygame.image.load("Tour_Noir.png").convert_alpha()
fenetre.blit(RB,(A,Huit))
pygame.display.flip()

RW= pygame.image.load("Tour_Blanc.png").convert_alpha()
fenetre.blit(RW,(A,Un))
pygame.display.flip()

RB= pygame.image.load("Tour_Noir.png").convert_alpha()
fenetre.blit(RB,(H,Huit))
pygame.display.flip()

RW= pygame.image.load("Tour_Blanc.png").convert_alpha()
fenetre.blit(RW,(H,Un))
pygame.display.flip()

#Placement pions noirs
PB= pygame.image.load("Pion_Noir.png").convert_alpha()
fenetre.blit(PB,(A,Sept))
pygame.display.flip()

PB= pygame.image.load("Pion_Noir.png").convert_alpha()
fenetre.blit(PB,(B,Sept))
pygame.display.flip()

PB= pygame.image.load("Pion_Noir.png").convert_alpha()
fenetre.blit(PB,(C,Sept))
pygame.display.flip()

PB= pygame.image.load("Pion_Noir.png").convert_alpha()
fenetre.blit(PB,(D,Sept))
pygame.display.flip()

PB= pygame.image.load("Pion_Noir.png").convert_alpha()
fenetre.blit(PB,(E,Sept))
pygame.display.flip()

PB= pygame.image.load("Pion_Noir.png").convert_alpha()
fenetre.blit(PB,(F,Sept))
pygame.display.flip()

PB= pygame.image.load("Pion_Noir.png").convert_alpha()
fenetre.blit(PB,(G,Sept))
pygame.display.flip()

PB= pygame.image.load("Pion_Noir.png").convert_alpha()
fenetre.blit(PB,(H,Sept))
pygame.display.flip()

#Placement pions blancs
PW= pygame.image.load("Pion_Blanc.png").convert_alpha()
fenetre.blit(PW,(A,Deux))
pygame.display.flip()

PW= pygame.image.load("Pion_Blanc.png").convert_alpha()
fenetre.blit(PW,(B,Deux))
pygame.display.flip()

PW= pygame.image.load("Pion_Blanc.png").convert_alpha()
fenetre.blit(PW,(C,Deux))
pygame.display.flip()

PW= pygame.image.load("Pion_Blanc.png").convert_alpha()
fenetre.blit(PW,(D,Deux))
pygame.display.flip()

PW= pygame.image.load("Pion_Blanc.png").convert_alpha()
fenetre.blit(PW,(E,Deux))
pygame.display.flip()

PW= pygame.image.load("Pion_Blanc.png").convert_alpha()
fenetre.blit(PW,(F,Deux))
pygame.display.flip()

PW= pygame.image.load("Pion_Blanc.png").convert_alpha()
fenetre.blit(PW,(G,Deux))
pygame.display.flip()

PW= pygame.image.load("Pion_Blanc.png").convert_alpha()
fenetre.blit(PW,(H,Deux))
pygame.display.flip()

pièces =[RB,KB,BB,QeB,KiB,PB,PW,RW,KW,BW,QeW,KiW]

Echiquier = [ ['RB','KB','BB','QeB','KiB','BB','KB','RB'],
['PB','PB','PB','PB','PB','PB','PB','PB'],
[' ',' ',' ',' ',' ',' ',' ',' '],
[' ',' ',' ',' ',' ',' ',' ',' '],
[' ',' ',' ',' ',' ',' ',' ',' '],
[' ',' ',' ',' ',' ',' ',' ',' '],
['PW','Pw','PW','PW','PW','PW','PW','PW'],
['RW','KW','BW','QeW','KiW','BW','KW','RW'] ]

while True:
for event in pygame.event.get():
if event.type == MOUSEBUTTONDOWN :
x_souris = event.pos[0]
y_souris = event.pos[1]
print(x_souris, y_souris)
colonne = (y_souris-60) //case
ligne = ( x_souris-60) //case
print(ligne,colonne)


Configuration: Windows / Chrome 88.0.4324.190

7 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    "comment détecter les pièces": en examinant le contenu de Echiquier.
    as-tu déjà fait des jeux plus simples?
    0
  2. robinmoon
     
    base
    nn pas encore mais j'apprends avec l'aide de qlq qui prends des cour de en première et ducoup je le fais en même temps et donc c'est le premier jeu que je fais
    0
  3. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    Bonjour,

    L'indentation étant importante en Python, merci de copier/coller ici ton code complet avec les balises de code
    mode d'emploi:
    https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

    Visuellement, ça doit ressembler à ceci (avec la coloration syntaxique) :

    def test():
        print('test')
    
    test()
    


    Ceci dit, moi j'initialiserai une variable tableau à 2 dimensions (lignes, colonnes) qui contiendrait les noms des pièces
    Ensuite, on peut interroger une case donnée: Echiquier [ligne][colonne], ou bien parcourir le tableau avec deux boucles
    imbriquées:

    for k in range(0,nb_lignes):
        for j in range(0,nb_colonnes):


    Ensuite, après un déplacement de pièces dans le tableau, on met à jour l'affichage graphique en fonction de celui-ci
    0
    1. robinmoon
       
      ok mais comment je met le tableau ,avec une liste, un dictionnaire ? ou je fais 2 listes séparées
      ?
      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > robinmoon
       
      tu as déjà le tableau dans ton code, ne le vois-tu pas?
      0
    3. robinmoon > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      ouais ducoup j'ai ma liste avec le nom de mes pièces mais ducoup je n'ai qu'un seul élément a reprendre dans Echiquier ou comment je pourrais intégrer le deuxième ?
      0
    4. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > robinmoon
       
      quels sont ces deux éléments?
      0
    5. robinmoon > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      [ligne] et [colonne], je pense avoir compris, mais donc ça correspond a l'emplacement dans ma liste, donc par exemple pour RB j'ai Echiquier[O] [O]ou bien Echiquier [0] [ 7], si j'ai bien compris ? et après comment je le détecte sur l'écran que tel case correspond a tel emplacement dans mon tableau ?
      0
  4. robinmoon
     
    ok voila le code :
    import pygame
    from pygame.locals import *
    import time
    
    
    
    
    coord=[
     'a8','b8','c8','d8','e8','f8','g8','h8',
     'a7','b7','c7','d7','e7','f7','g7','h7',
     'a6','b6','c6','d6','e6','f6','g6','h6',
     'a5','b5','c5','d5','e5','f5','g5','h5',
     'a4','b4','c4','d4','e4','f4','g4','h4',
     'a3','b3','c3','d3','e3','f3','g3','h3',
     'a2','b2','c2','d2','e2','f2','g2','h2',
     'a1','b1','c1','d1','e1','f1','g1','h1'
     ]
    
    pygame.init()
    fenetre = pygame.display.set_mode((800,800))
    echiquier = pygame.image.load("plateau.png").convert_alpha()
    fenetre.blit(echiquier,(0,0))
    
    #Placement reines
    QeB= pygame.image.load("Reine_Blanc.png").convert_alpha()
    fenetre.blit(QeB,(D,Un))
    pygame.display.flip()
    
    QeW= pygame.image.load("Reine_Noir.png").convert_alpha()
    fenetre.blit(QeW,(D,Huit))
    pygame.display.flip()
    
    #Placement rois
    KiB= pygame.image.load("Roi_Noir.png").convert_alpha()
    fenetre.blit(KiB,(E,Huit))
    pygame.display.flip()
    
    KiW= pygame.image.load("Roi_Blanc.png").convert_alpha()
    fenetre.blit(KiW,(E,Un))
    pygame.display.flip()
    
    #Placement fous
    BB= pygame.image.load("Fou_Noir.png").convert_alpha()
    fenetre.blit(BB,(F,Huit))
    pygame.display.flip()
    
    BW= pygame.image.load("Fou_Blanc.png").convert_alpha()
    fenetre.blit(BW,(F,Un))
    pygame.display.flip()
    
    BB= pygame.image.load("Fou_Noir.png").convert_alpha()
    fenetre.blit(BB,(C,Huit))
    pygame.display.flip()
    
    BW= pygame.image.load("Fou_Blanc.png").convert_alpha()
    fenetre.blit(BW,(C,Un))
    pygame.display.flip()
    
    #Placement cavaliers
    KB= pygame.image.load("Cavalier_Noir.png").convert_alpha()
    fenetre.blit(KB,(B,Huit))
    pygame.display.flip()
    
    KW= pygame.image.load("Cavalier_Blanc.png").convert_alpha()
    fenetre.blit(KW,(B,Un))
    pygame.display.flip()
    
    KB= pygame.image.load("Cavalier_Noir.png").convert_alpha()
    fenetre.blit(KB,(G,Huit))
    pygame.display.flip()
    
    KW= pygame.image.load("Cavalier_Blanc.png").convert_alpha()
    fenetre.blit(KW,(G,Un))
    pygame.display.flip()
    
    #Placement tours
    RB= pygame.image.load("Tour_Noir.png").convert_alpha()
    fenetre.blit(RB,(A,Huit))
    pygame.display.flip()
    
    RW= pygame.image.load("Tour_Blanc.png").convert_alpha()
    fenetre.blit(RW,(A,Un))
    pygame.display.flip()
    
    RB= pygame.image.load("Tour_Noir.png").convert_alpha()
    fenetre.blit(RB,(H,Huit))
    pygame.display.flip()
    
    RW= pygame.image.load("Tour_Blanc.png").convert_alpha()
    fenetre.blit(RW,(H,Un))
    pygame.display.flip()
    
    #Placement pions noirs
    PB= pygame.image.load("Pion_Noir.png").convert_alpha()
    fenetre.blit(PB,(A,Sept))
    pygame.display.flip()
    
    PB= pygame.image.load("Pion_Noir.png").convert_alpha()
    fenetre.blit(PB,(B,Sept))
    pygame.display.flip()
    
    PB= pygame.image.load("Pion_Noir.png").convert_alpha()
    fenetre.blit(PB,(C,Sept))
    pygame.display.flip()
    
    PB= pygame.image.load("Pion_Noir.png").convert_alpha()
    fenetre.blit(PB,(D,Sept))
    pygame.display.flip()
    
    PB= pygame.image.load("Pion_Noir.png").convert_alpha()
    fenetre.blit(PB,(E,Sept))
    pygame.display.flip()
    
    PB= pygame.image.load("Pion_Noir.png").convert_alpha()
    fenetre.blit(PB,(F,Sept))
    pygame.display.flip()
    
    PB= pygame.image.load("Pion_Noir.png").convert_alpha()
    fenetre.blit(PB,(G,Sept))
    pygame.display.flip()
    
    PB= pygame.image.load("Pion_Noir.png").convert_alpha()
    fenetre.blit(PB,(H,Sept))
    pygame.display.flip()
    
    #Placement pions blancs
    PW= pygame.image.load("Pion_Blanc.png").convert_alpha()
    fenetre.blit(PW,(A,Deux))
    pygame.display.flip()
    
    PW= pygame.image.load("Pion_Blanc.png").convert_alpha()
    fenetre.blit(PW,(B,Deux))
    pygame.display.flip()
    
    PW= pygame.image.load("Pion_Blanc.png").convert_alpha()
    fenetre.blit(PW,(C,Deux))
    pygame.display.flip()
    
    PW= pygame.image.load("Pion_Blanc.png").convert_alpha()
    fenetre.blit(PW,(D,Deux))
    pygame.display.flip()
    
    PW= pygame.image.load("Pion_Blanc.png").convert_alpha()
    fenetre.blit(PW,(E,Deux))
    pygame.display.flip()
    
    PW= pygame.image.load("Pion_Blanc.png").convert_alpha()
    fenetre.blit(PW,(F,Deux))
    pygame.display.flip()
    
    PW= pygame.image.load("Pion_Blanc.png").convert_alpha()
    fenetre.blit(PW,(G,Deux))
    pygame.display.flip()
    
    PW= pygame.image.load("Pion_Blanc.png").convert_alpha()
    fenetre.blit(PW,(H,Deux))
    pygame.display.flip()
    
    pièces =[RB,KB,BB,QeB,KiB,PB,PW,RW,KW,BW,QeW,KiW]
    
    Echiquier = [   ['RB','KB','BB','QeB','KiB','BB','KB','RB'],
                    ['PB','PB','PB','PB','PB','PB','PB','PB'],
                    [' ',' ',' ',' ',' ',' ',' ',' '],
                    [' ',' ',' ',' ',' ',' ',' ',' '],
                    [' ',' ',' ',' ',' ',' ',' ',' '],
                    [' ',' ',' ',' ',' ',' ',' ',' '],
                    ['PW','Pw','PW','PW','PW','PW','PW','PW'],
                    ['RW','KW','BW','QeW','KiW','BW','KW','RW'] ]
    
    while True:
        for event in pygame.event.get():
            if event.type == MOUSEBUTTONDOWN :
                x_souris = event.pos[0]
                y_souris = event.pos[1]
                print(x_souris, y_souris)
                colonne = (y_souris-60) //case
                ligne = ( x_souris-60) //case
                print(ligne,colonne) 
    


    Merci d'avance si tu trouves un truc !
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    Bonjour,

    Un truc pour faire quoi ?
    0
  7. robinmoon
     
    baa si t'as une solution pour que je puisse déplacer les pièces ou bien les séléctionnées quoi
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      comment vas-tu progresser si nous faisons le travail à ta place?
      0
      1. robinmoon > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        mec ça fais 2 semaines je suis dessus toute les nuits ! j'y arrive pas ou au moins si quelqu'un a une piste ?
        0
      2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > robinmoon
         
        fais d'abord des exercices plus simples.
        0
  8. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    Moi, je n'utilise pas Pygame, mais tkinter
    J'ai déjà fait un jeu, non pas d'échecs, mais de dames
    En gros, je déplace un pion noir comme ceci:

    cliquer pion sur damier -> fonction évènement clic gauche souris :
        on initialise une variable bouton_gauche à True
    
    déplacer le pion avec la souris bouton toujours appuyé -> fonction évènement mouvement souris : 
        si bouton_gauche :
            récup' coordonnées x,y à l'instant t
            déplacer objet pion à x,y
            et ainsi de suite, tant qu'on déplace la souris
    
    relâcher bouton gauche souris -> fonction évènement relachement bouton souris :
        bouton_gauche = False
        appel fonction mise_a_jour_tableau
        
    fonction mise_a_jour_tableau:
        conversion x,y case de départ en ligne/colonne : l1,c1
        idem case arrivée : l2,c2
        damier[l1][c1] = ''
        damier[l2][c2] = BLACK
        test si on a survolé un pion à prendre, si oui:
            damier[ligne][colonne] = ''
            déplacement du pion pris sur le coté
        test si on est arrivé en bordure de damier : dame !, si oui:
            on efface un pion pris par l'adversaire et on le redessine sur la case d'arrivée (un peu 
            décalé pour montrer les 2 pions)
            damier [l2][c2] = BLACK_K
    

    sachant que:
    WHITE = 0
    BLACK = 1
    WHITE_K = 2
    BLACK_K = 3
    (ca permet de manipuler des noms au lieu de chiffres)
    0