Chess Games
robinmoon
-
Phil_1857 Posted messages 1883 Registration date Status Member Last intervention -
Phil_1857 Posted messages 1883 Registration date Status Member Last intervention -
Hello, I am learning pygame and I have started making a chess game in pygame but I have been stuck for 3 days on how to detect the pieces and then make moves, even though I think I will use coordinate calculations. Thank you in advance for your help!
Configuration: Windows / Chrome 88.0.4324.190
import pygame
from pygame.locals import *
import time
square = 84
A = 60
B = 60 + square
C = 60 + square * 2
D = 60 + square * 3
E = 60 + square * 4
F = 60 + square * 5
G = 60 + square * 6
H = 60 + square * 7
Eight = 60
Seven = 60 + square
Six = 60 + square * 2
Five = 60 + square * 3
Four = 60 + square * 4
Three = 60 + square * 5
Two = 60 + square * 6
One = 60 + square * 7
SIZE = 100
WIDTH = 8
HEIGHT = 8
pygame.init()
window = pygame.display.set_mode((800,800))
chessboard = pygame.image.load("board.png").convert_alpha()
window.blit(chessboard,(0,0))
#Queen placements
Qb= pygame.image.load("Queen_White.png").convert_alpha()
window.blit(Qb,(D,One))
pygame.display.flip()
Qw= pygame.image.load("Queen_Black.png").convert_alpha()
window.blit(Qw,(D,Eight))
pygame.display.flip()
#King placements
Kb= pygame.image.load("King_Black.png").convert_alpha()
window.blit(Kb,(E,Eight))
pygame.display.flip()
Kw= pygame.image.load("King_White.png").convert_alpha()
window.blit(Kw,(E,One))
pygame.display.flip()
#Bishop placements
Bb= pygame.image.load("Bishop_Black.png").convert_alpha()
window.blit(Bb,(F,Eight))
pygame.display.flip()
Bw= pygame.image.load("Bishop_White.png").convert_alpha()
window.blit(Bw,(F,One))
pygame.display.flip()
Bb= pygame.image.load("Bishop_Black.png").convert_alpha()
window.blit(Bb,(C,Eight))
pygame.display.flip()
Bw= pygame.image.load("Bishop_White.png").convert_alpha()
window.blit(Bw,(C,One))
pygame.display.flip()
#Knight placements
Kb= pygame.image.load("Knight_Black.png").convert_alpha()
window.blit(Kb,(B,Eight))
pygame.display.flip()
Kw= pygame.image.load("Knight_White.png").convert_alpha()
window.blit(Kw,(B,One))
pygame.display.flip()
Kb= pygame.image.load("Knight_Black.png").convert_alpha()
window.blit(Kb,(G,Eight))
pygame.display.flip()
Kw= pygame.image.load("Knight_White.png").convert_alpha()
window.blit(Kw,(G,One))
pygame.display.flip()
#Rook placements
Rb= pygame.image.load("Rook_Black.png").convert_alpha()
window.blit(Rb,(A,Eight))
pygame.display.flip()
Rw= pygame.image.load("Rook_White.png").convert_alpha()
window.blit(Rw,(A,One))
pygame.display.flip()
Rb= pygame.image.load("Rook_Black.png").convert_alpha()
window.blit(Rb,(H,Eight))
pygame.display.flip()
Rw= pygame.image.load("Rook_White.png").convert_alpha()
window.blit(Rw,(H,One))
pygame.display.flip()
#Black pawn placements
Pb= pygame.image.load("Pawn_Black.png").convert_alpha()
window.blit(Pb,(A,Seven))
pygame.display.flip()
Pb= pygame.image.load("Pawn_Black.png").convert_alpha()
window.blit(Pb,(B,Seven))
pygame.display.flip()
Pb= pygame.image.load("Pawn_Black.png").convert_alpha()
window.blit(Pb,(C,Seven))
pygame.display.flip()
Pb= pygame.image.load("Pawn_Black.png").convert_alpha()
window.blit(Pb,(D,Seven))
pygame.display.flip()
Pb= pygame.image.load("Pawn_Black.png").convert_alpha()
window.blit(Pb,(E,Seven))
pygame.display.flip()
Pb= pygame.image.load("Pawn_Black.png").convert_alpha()
window.blit(Pb,(F,Seven))
pygame.display.flip()
Pb= pygame.image.load("Pawn_Black.png").convert_alpha()
window.blit(Pb,(G,Seven))
pygame.display.flip()
Pb= pygame.image.load("Pawn_Black.png").convert_alpha()
window.blit(Pb,(H,Seven))
pygame.display.flip()
#White pawn placements
Pw= pygame.image.load("Pawn_White.png").convert_alpha()
window.blit(Pw,(A,Two))
pygame.display.flip()
Pw= pygame.image.load("Pawn_White.png").convert_alpha()
window.blit(Pw,(B,Two))
pygame.display.flip()
Pw= pygame.image.load("Pawn_White.png").convert_alpha()
window.blit(Pw,(C,Two))
pygame.display.flip()
Pw= pygame.image.load("Pawn_White.png").convert_alpha()
window.blit(Pw,(D,Two))
pygame.display.flip()
Pw= pygame.image.load("Pawn_White.png").convert_alpha()
window.blit(Pw,(E,Two))
pygame.display.flip()
Pw= pygame.image.load("Pawn_White.png").convert_alpha()
window.blit(Pw,(F,Two))
pygame.display.flip()
Pw= pygame.image.load("Pawn_White.png").convert_alpha()
window.blit(Pw,(G,Two))
pygame.display.flip()
Pw= pygame.image.load("Pawn_White.png").convert_alpha()
window.blit(Pw,(H,Two))
pygame.display.flip()
pieces = [Rb,Kb,Bb,Qb,Kb,Pb,Pw,Rw,Kw,Bw,Qw,Kw]
Board = [['Rb','Kb','Bb','Qb','Kb','Bb','Kb','Rb'],
['Pb','Pb','Pb','Pb','Pb','Pb','Pb','Pb'],
[' ',' ',' ',' ',' ',' ',' ',' '],
[' ',' ',' ',' ',' ',' ',' ',' '],
[' ',' ',' ',' ',' ',' ',' ',' '],
[' ',' ',' ',' ',' ',' ',' ',' '],
['Pw','Pw','Pw','Pw','Pw','Pw','Pw','Pw'],
['Rw','Kw','Bw','Qw','Kw','Bw','Kw','Rw'] ]
while True:
for event in pygame.event.get():
if event.type == MOUSEBUTTONDOWN :
mouse_x = event.pos[0]
mouse_y = event.pos[1]
print(mouse_x, mouse_y)
column = (mouse_y-60) //square
row = (mouse_x-60) //square
print(row,column)
Configuration: Windows / Chrome 88.0.4324.190
7 answers
-
yg_be Posted messages 23437 Registration date Status Contributor Last intervention Ambassadeur 1 588
Hello,
"how to detect the pieces": by examining the content of the chessboard.
have you ever played simpler games? -
base
Not yet, but I'm learning with the help of someone who is taking first-year classes, so I'm doing it at the same time, and this is the first game I'm making. -
Hello,
Indentation being important in Python, please copy/paste your complete code here with the code tags
Instructions:
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Visually, it should look like this (with syntax highlighting):
def test(): print('test') test()
That being said, I would initialize a two-dimensional array variable (rows, columns) that would contain the names of the pieces
Then, we can query a given cell: Board [row][column], or loop through the array with two nested loops:
for k in range(0,nb_lignes): for j in range(0,nb_colonnes):
Then, after moving pieces in the array, we update the graphical display accordingly.-
-
-
-
-
[lane] and [column], I think I understand, but so that corresponds to the position in my list, so for example for RB I have Echiquier[O][O] or Echiquier[0][7], if I've understood correctly? And then how do I detect on the screen which cell corresponds to which position in my table?
-
-
ok here is the 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() window = pygame.display.set_mode((800,800)) chessboard = pygame.image.load("board.png").convert_alpha() window.blit(chessboard,(0,0)) #Placing queens QeB= pygame.image.load("Queen_White.png").convert_alpha() window.blit(QeB,(D,Un)) pygame.display.flip() QeW= pygame.image.load("Queen_Black.png").convert_alpha() window.blit(QeW,(D,Eight)) pygame.display.flip() #Placing kings KiB= pygame.image.load("King_Black.png").convert_alpha() window.blit(KiB,(E,Eight)) pygame.display.flip() KiW= pygame.image.load("King_White.png").convert_alpha() window.blit(KiW,(E,Un)) pygame.display.flip() #Placing bishops BB= pygame.image.load("Bishop_Black.png").convert_alpha() window.blit(BB,(F,Eight)) pygame.display.flip() BW= pygame.image.load("Bishop_White.png").convert_alpha() window.blit(BW,(F,Un)) pygame.display.flip() BB= pygame.image.load("Bishop_Black.png").convert_alpha() window.blit(BB,(C,Eight)) pygame.display.flip() BW= pygame.image.load("Bishop_White.png").convert_alpha() window.blit(BW,(C,Un)) pygame.display.flip() #Placing knights KB= pygame.image.load("Knight_Black.png").convert_alpha() window.blit(KB,(B,Eight)) pygame.display.flip() KW= pygame.image.load("Knight_White.png").convert_alpha() window.blit(KW,(B,Un)) pygame.display.flip() KB= pygame.image.load("Knight_Black.png").convert_alpha() window.blit(KB,(G,Eight)) pygame.display.flip() KW= pygame.image.load("Knight_White.png").convert_alpha() window.blit(KW,(G,Un)) pygame.display.flip() #Placing rooks RB= pygame.image.load("Rook_Black.png").convert_alpha() window.blit(RB,(A,Eight)) pygame.display.flip() RW= pygame.image.load("Rook_White.png").convert_alpha() window.blit(RW,(A,Un)) pygame.display.flip() RB= pygame.image.load("Rook_Black.png").convert_alpha() window.blit(RB,(H,Eight)) pygame.display.flip() RW= pygame.image.load("Rook_White.png").convert_alpha() window.blit(RW,(H,Un)) pygame.display.flip() #Placing black pawns PB= pygame.image.load("Pawn_Black.png").convert_alpha() window.blit(PB,(A,Seven)) pygame.display.flip() PB= pygame.image.load("Pawn_Black.png").convert_alpha() window.blit(PB,(B,Seven)) pygame.display.flip() PB= pygame.image.load("Pawn_Black.png").convert_alpha() window.blit(PB,(C,Seven)) pygame.display.flip() PB= pygame.image.load("Pawn_Black.png").convert_alpha() window.blit(PB,(D,Seven)) pygame.display.flip() PB= pygame.image.load("Pawn_Black.png").convert_alpha() window.blit(PB,(E,Seven)) pygame.display.flip() PB= pygame.image.load("Pawn_Black.png").convert_alpha() window.blit(PB,(F,Seven)) pygame.display.flip() PB= pygame.image.load("Pawn_Black.png").convert_alpha() window.blit(PB,(G,Seven)) pygame.display.flip() PB= pygame.image.load("Pawn_Black.png").convert_alpha() window.blit(PB,(H,Seven)) pygame.display.flip() #Placing white pawns PW= pygame.image.load("Pawn_White.png").convert_alpha() window.blit(PW,(A,Two)) pygame.display.flip() PW= pygame.image.load("Pawn_White.png").convert_alpha() window.blit(PW,(B,Two)) pygame.display.flip() PW= pygame.image.load("Pawn_White.png").convert_alpha() window.blit(PW,(C,Two)) pygame.display.flip() PW= pygame.image.load("Pawn_White.png").convert_alpha() window.blit(PW,(D,Two)) pygame.display.flip() PW= pygame.image.load("Pawn_White.png").convert_alpha() window.blit(PW,(E,Two)) pygame.display.flip() PW= pygame.image.load("Pawn_White.png").convert_alpha() window.blit(PW,(F,Two)) pygame.display.flip() PW= pygame.image.load("Pawn_White.png").convert_alpha() window.blit(PW,(G,Two)) pygame.display.flip() PW= pygame.image.load("Pawn_White.png").convert_alpha() window.blit(PW,(H,Two)) pygame.display.flip() pieces =[RB,KB,BB,QeB,KiB,PB,PW,RW,KW,BW,QeW,KiW] Chessboard = [ ['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) column = (y_mouse-60) //case row = ( x_mouse-60) //case print(row,column)
Thanks in advance if you find something! -
Hello,
What is it for? -
-
I don't use Pygame, but tkinter
I've already made a game, not chess, but checkers
Basically, I move a black piece like this:
click piece on board -> left mouse click event function: initialize a variable left_button to True move the piece with the mouse while button held down -> mouse movement event function: if left_button: get x,y coordinates at time t move piece object to x,y and so on, as long as we move the mouse release left mouse button -> mouse button release event function: left_button = False call update_board function update_board: convert x,y starting square to row/column: l1,c1 same for destination square: l2,c2 board[l1][c1] = '' board[l2][c2] = BLACK check if we've hovered over a piece to capture, if yes: board[row][column] = '' capture the taken piece to the side check if we've reached the edge of the board: king!, if yes: clear an opponent's taken piece and redraw it on the destination square (slightly offset to show both pieces) board[l2][c2] = BLACK_K
knowing that:
WHITE = 0
BLACK = 1
WHITE_K = 2
BLACK_K = 3
(this allows you to manipulate names instead of numbers)