Hello, it is me again and this is the second article about the chess game project which I have created earlier with python. In this article, I have updated the previous python program which will now be able to relocate the chess piece on the chessboard to a new location after I have clicked on any square on the chessboard. This is the first step to move the chess piece on the chessboard because after this, I will make the piece moves slowly by sliding it along the path to its destination as well as making sure the piece can move to that square, for example, a pawn can only move in the up or down direction and can only move sideways if it consumes another piece. All these will take another level of planning but for now, let us just concentrate on the relocation of the piece.
The pawn will originally be situated on one of the squares just like what you have seen in the previous article but after I have clicked on a new square it will relocate to that new square disregarding whether it can moves there or not!
The entire plan to achieve this is to get the dictionary key of that square and then plug in the key to the chess_dict dictionary to get the coordinates needed to draw the new position of the sprite.
# print the square name which you have clicked on
for key, value in chess_dict.items():
if (x * width, y * width) == (value[0],value[1]):
print(key)
previous_square_list.append(key) #insert the next square
if len(previous_square_list) > 1:
previous_square_list.remove(previous_square_list[0])
The above snippet will save the new key whenever a user clicked on one of the squares on the chessboard.
This will draw the chess piece on the new location…
#draw the position of the pawn sprite
if len(previous_square_list) == 0:
screen.blit(pawn0, (0, 64)) # just testing...
else:
screen.blit(pawn0,(chess_dict[previous_square_list[0]])) # this will draw the pawn on new position
At first, when there is no click the piece will appear in the original location, after someone has clicked on it once the chess piece will get drawn to the new location.
Here is the entire code…
import sys, pygame
import math
pygame.init()
size = width, height = 512, 512
white = 255, 178, 102
black = 126, 126, 126
hightlight = 192, 192, 192
title = "IslandT Chess"
width = 64 # width of the square
original_color = ''
#empty chess dictionary
chess_dict = {}
#chess square list
chess_square_list = [
"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"
]
# chess square position
chess_square_position = []
#pawn image
pawn0 = pygame.image.load("pawn.png")
# create a list to map name of column and row
for i in range(0, 8) : # control row
for j in range(0, 8): # control column
chess_square_position.append((j * width, i * width))
# create a dictionary to map name of column and row
for n in range(0, len(chess_square_position)):
chess_dict[chess_square_list[n]] = chess_square_position[n]
screen = pygame.display.set_mode(size)
pygame.display.set_caption(title)
rect_list = list() # this is the list of brown rectangle
#the previously touched square
previous_square_list = []
# used this loop to create a list of brown rectangles
for i in range(0, 8): # control the row
for j in range(0, 8): # control the column
if i % 2 == 0: # which means it is an even row
if j % 2 != 0: # which means it is an odd column
rect_list.append(pygame.Rect(j * width, i * width, width, width))
else:
if j % 2 == 0: # which means it is an even column
rect_list.append(pygame.Rect(j * width, i * width, width, width))
# create main surface and fill the base color with light brown color
chess_board_surface = pygame.Surface(size)
chess_board_surface.fill(white)
# next draws the dark brown rectangles on the chess board surface
for chess_rect in rect_list:
pygame.draw.rect(chess_board_surface, black, chess_rect)
while True:
# displayed the chess surface
#screen.blit(chess_board_surface, (0, 0))
# displayed the chess surface
screen.blit(chess_board_surface, (0, 0))
#draw the position of the pawn sprite
if len(previous_square_list) == 0:
screen.blit(pawn0, (0, 64)) # just testing...
else:
screen.blit(pawn0,(chess_dict[previous_square_list[0]])) # this will draw the pawn on new position
for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
pos = event.pos
x = math.floor(pos[0] / width)
y = math.floor(pos[1] / width)
# print the square name which you have clicked on
for key, value in chess_dict.items():
if (x * width, y * width) == (value[0],value[1]):
print(key)
previous_square_list.append(key) #insert the next square
if len(previous_square_list) > 1:
previous_square_list.remove(previous_square_list[0])
original_color = chess_board_surface.get_at((x * width, y * width ))
pygame.draw.rect(chess_board_surface, hightlight, pygame.Rect((x) * width, (y) * width, 64, 64))
elif event.type == pygame.MOUSEBUTTONUP:
pos = event.pos
x = math.floor(pos[0] / width)
y = math.floor(pos[1] / width)
pygame.draw.rect(chess_board_surface, original_color, pygame.Rect((x) * width, (y) * width, 64, 64))
pygame.display.update()
Here is the outcome…
I hope you like it, the next step is to make the piece slide along the board as well as to allow it to move in the direction it is supposed to move to!