Juegos de ajedrez

robinmoon -  
Phil_1857 Mensajes publicados 1883 Fecha de registro   Estado Miembro Última intervención   -
Bonjour, je suis en apprentissage de pygame et je commence à faire un jeu d'échecs en pygame et je suis bloqué dessus depuis 3 jours sur comment détecter les pièces et par la suite faire des déplacements, même si je pense que j'utiliserai 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 respuestas

  1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   Ambassadeur 1 588
     
    Hola,
    "¿cómo detectar las piezas?": examinando el contenido del tablero de ajedrez.
    ¿Has hecho juegos más simples?
    0
  2. robinmoon
     
    base
    no, aún no, pero estoy aprendiendo con la ayuda de alguien que está tomando clases en primero y así lo hago al mismo tiempo, por lo que es el primer juego que estoy haciendo.
    0
  3. Phil_1857 Mensajes publicados 1883 Fecha de registro   Estado Miembro Última intervención   169
     
    Bonjour,

    La indentación es importante en Python, gracias de copiar/pegar aquí tu código completo con las etiquetas de código
    modo de empleo:
    https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

    Visualmente, debería parecerse a esto (con la coloración de sintaxis):

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


    Dicho esto, yo inicializaría una variable tabla de 2 dimensiones (filas, columnas) que contendría los nombres de las piezas
    Luego, se puede interrogar una celda dada: Tablero [fila][columna], o recorrer la tabla con dos bucles
    anidados:

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


    Luego, después de un desplazamiento de piezas en la tabla, actualizamos la visualización gráfica en función de esto.
    0
    1. robinmoon
       
      ¿Ok, pero cómo pongo la tabla, con una lista, un diccionario? ¿O hago 2 listas separadas
      ?
      0
    2. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588 > robinmoon
       
      ¿Ya tienes la tabla en tu código, ¿no la ves?
      0
    3. robinmoon > yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención  
       
      Sí, entonces tengo mi lista con el nombre de mis piezas, pero solo tengo un elemento para retomar en el Tablero. ¿Cómo podría integrar el segundo?
      0
    4. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588 > robinmoon
       
      Je ne peux pas fournir de réponse à cela.
      0
    5. robinmoon > yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención  
       
      [linha] e [coluna], eu acho que entendi, mas isso corresponde à localização na minha lista, então, por exemplo, para RB eu tenho Tabuleiro [O] [O] ou Tabuleiro [0] [7], se eu entendi bem? E depois, como eu o detecto na tela para saber qual casa corresponde a qual localização na minha tabela?
      0
  4. robinmoon
     
    ok aquí el código :
     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() ventana = pygame.display.set_mode((800,800)) tablero = pygame.image.load("plateau.png").convert_alpha() ventana.blit(tablero,(0,0)) #Colocación reinas QeB= pygame.image.load("Reine_Blanc.png").convert_alpha() ventana.blit(QeB,(D,Un)) pygame.display.flip() QeW= pygame.image.load("Reine_Noir.png").convert_alpha() ventana.blit(QeW,(D,Huit)) pygame.display.flip() #Colocación reyes KiB= pygame.image.load("Roi_Noir.png").convert_alpha() ventana.blit(KiB,(E,Huit)) pygame.display.flip() KiW= pygame.image.load("Roi_Blanc.png").convert_alpha() ventana.blit(KiW,(E,Un)) pygame.display.flip() #Colocación alfiles BB= pygame.image.load("Fou_Noir.png").convert_alpha() ventana.blit(BB,(F,Huit)) pygame.display.flip() BW= pygame.image.load("Fou_Blanc.png").convert_alpha() ventana.blit(BW,(F,Un)) pygame.display.flip() BB= pygame.image.load("Fou_Noir.png").convert_alpha() ventana.blit(BB,(C,Huit)) pygame.display.flip() BW= pygame.image.load("Fou_Blanc.png").convert_alpha() ventana.blit(BW,(C,Un)) pygame.display.flip() #Colocación caballos KB= pygame.image.load("Cavalier_Noir.png").convert_alpha() ventana.blit(KB,(B,Huit)) pygame.display.flip() KW= pygame.image.load("Cavalier_Blanc.png").convert_alpha() ventana.blit(KW,(B,Un)) pygame.display.flip() KB= pygame.image.load("Cavalier_Noir.png").convert_alpha() ventana.blit(KB,(G,Huit)) pygame.display.flip() KW= pygame.image.load("Cavalier_Blanc.png").convert_alpha() ventana.blit(KW,(G,Un)) pygame.display.flip() #Colocación torres RB= pygame.image.load("Tour_Noir.png").convert_alpha() ventana.blit(RB,(A,Huit)) pygame.display.flip() RW= pygame.image.load("Tour_Blanc.png").convert_alpha() ventana.blit(RW,(A,Un)) pygame.display.flip() RB= pygame.image.load("Tour_Noir.png").convert_alpha() ventana.blit(RB,(H,Huit)) pygame.display.flip() RW= pygame.image.load("Tour_Blanc.png").convert_alpha() ventana.blit(RW,(H,Un)) pygame.display.flip() #Colocación peones negros PB= pygame.image.load("Pion_Noir.png").convert_alpha() ventana.blit(PB,(A,Sept)) pygame.display.flip() PB= pygame.image.load("Pion_Noir.png").convert_alpha() ventana.blit(PB,(B,Sept)) pygame.display.flip() PB= pygame.image.load("Pion_Noir.png").convert_alpha() ventana.blit(PB,(C,Sept)) pygame.display.flip() PB= pygame.image.load("Pion_Noir.png").convert_alpha() ventana.blit(PB,(D,Sept)) pygame.display.flip() PB= pygame.image.load("Pion_Noir.png").convert_alpha() ventana.blit(PB,(E,Sept)) pygame.display.flip() PB= pygame.image.load("Pion_Noir.png").convert_alpha() ventana.blit(PB,(F,Sept)) pygame.display.flip() PB= pygame.image.load("Pion_Noir.png").convert_alpha() ventana.blit(PB,(G,Sept)) pygame.display.flip() PB= pygame.image.load("Pion_Noir.png").convert_alpha() ventana.blit(PB,(H,Sept)) pygame.display.flip() #Colocación peones blancos PW= pygame.image.load("Pion_Blanc.png").convert_alpha() ventana.blit(PW,(A,Deux)) pygame.display.flip() PW= pygame.image.load("Pion_Blanc.png").convert_alpha() ventana.blit(PW,(B,Deux)) pygame.display.flip() PW= pygame.image.load("Pion_Blanc.png").convert_alpha() ventana.blit(PW,(C,Deux)) pygame.display.flip() PW= pygame.image.load("Pion_Blanc.png").convert_alpha() ventana.blit(PW,(D,Deux)) pygame.display.flip() PW= pygame.image.load("Pion_Blanc.png").convert_alpha() ventana.blit(PW,(E,Deux)) pygame.display.flip() PW= pygame.image.load("Pion_Blanc.png").convert_alpha() ventana.blit(PW,(F,Deux)) pygame.display.flip() PW= pygame.image.load("Pion_Blanc.png").convert_alpha() ventana.blit(PW,(G,Deux)) pygame.display.flip() PW= pygame.image.load("Pion_Blanc.png").convert_alpha() ventana.blit(PW,(H,Deux)) pygame.display.flip() piezas =[RB,KB,BB,QeB,KiB,PB,PW,RW,KW,BW,QeW,KiW] Tablero = [ ['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_mouse = event.pos[0] y_mouse = event.pos[1] print(x_mouse, y_mouse) columna = (y_mouse-60) //case fila = ( x_mouse-60) //case print(fila,columna) 


    ¡Gracias de antemano si encuentras algo!
    0
  5. Phil_1857 Mensajes publicados 1883 Fecha de registro   Estado Miembro Última intervención   169
     
    Hola,

    ¿Un truco para hacer qué?
    0
  6. robinmoon
     
    baa si tienes una solución para que pueda mover las piezas o seleccionar las que sea.
    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       
      ¿Cómo vas a progresar si hacemos el trabajo por ti?
      0
      1. robinmoon > yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención  
         
        Hombre, llevo dos semanas con esto cada noche. No puedo hacerlo, o al menos si alguien tiene una pista.
        0
      2. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588 > robinmoon
         
        Haz primero ejercicios más simples.
        0
  7. Phil_1857 Mensajes publicados 1883 Fecha de registro   Estado Miembro Última intervención   169
     
    Yo, no uso Pygame, sino tkinter
    Ya he hecho un juego, no de ajedrez, sino de damas
    En resumen, muevo un peón negro así:

    clic en peón sobre el tablero -> función evento clic izquierdo del ratón: inicializo una variable boton_izquierdo en True mover el peón con el ratón botón siempre presionado -> función evento movimiento del ratón: si boton_izquierdo: obtengo coordenadas x,y en el instante t mover objeto peón a x,y y así sucesivamente, mientras muevo el ratón soltar botón izquierdo del ratón -> función evento soltar botón del ratón: boton_izquierdo = False llamar función actualizar_tablero función actualizar_tablero: conversión x,y de casilla de salida a fila/columna: l1,c1 idem casilla de llegada: l2,c2 tablero[l1][c1] = '' tablero[l2][c2] = BLACK probar si hemos pasado por encima de un peón a comer, si es así: tablero[filas][columnas] = '' movimiento del peón comido al lado probar si hemos llegado al borde del tablero: dama !, si es así: borramos un peón comido por el adversario y lo redibujamos en la casilla de llegada (un poco desplazado para mostrar los 2 peones) tablero [l2][c2] = BLACK_K 

    sabiendo que:
    WHITE = 0
    BLACK = 1
    WHITE_K = 2
    BLACK_K = 3
    (esto permite manipular nombres en lugar de números)
    0