From 2aafae90cb11dfe0272f8efd4dfdc7abeabae538 Mon Sep 17 00:00:00 2001 From: Sh0ookshed Date: Mon, 22 Sep 2025 10:30:40 +0100 Subject: [PATCH 1/6] created chess piece classes + files (initial) --- chess_pieces/_chess_piece.py | 8 ++++++++ chess_pieces/bishop.py | 11 +++++++++++ chess_pieces/king.py | 11 +++++++++++ chess_pieces/knight.py | 11 +++++++++++ chess_pieces/pawn.py | 11 +++++++++++ chess_pieces/queen.py | 11 +++++++++++ chess_pieces/rook.py | 11 +++++++++++ 7 files changed, 74 insertions(+) create mode 100644 chess_pieces/_chess_piece.py create mode 100644 chess_pieces/bishop.py create mode 100644 chess_pieces/king.py create mode 100644 chess_pieces/knight.py create mode 100644 chess_pieces/pawn.py create mode 100644 chess_pieces/queen.py create mode 100644 chess_pieces/rook.py diff --git a/chess_pieces/_chess_piece.py b/chess_pieces/_chess_piece.py new file mode 100644 index 0000000..e0c7c24 --- /dev/null +++ b/chess_pieces/_chess_piece.py @@ -0,0 +1,8 @@ +#file containing the parent class for all chess pieces + +#libraries +import pygame + +#chess piece parent class containing the skeleton for all the child classes +class chess_piece: + pass \ No newline at end of file diff --git a/chess_pieces/bishop.py b/chess_pieces/bishop.py new file mode 100644 index 0000000..eb7888a --- /dev/null +++ b/chess_pieces/bishop.py @@ -0,0 +1,11 @@ +#file containing the child class for the bishop chess piece + +#libraries +import pygame + +#file imports +from _chess_piece import chess_piece + +#bishop chess piece class containing all animations and validation + frontend for bishop +class bishop_p(chess_piece): + pass \ No newline at end of file diff --git a/chess_pieces/king.py b/chess_pieces/king.py new file mode 100644 index 0000000..38264dd --- /dev/null +++ b/chess_pieces/king.py @@ -0,0 +1,11 @@ +#file containing the child class for the king chess piece + +#libraries +import pygame + +#file imports +from _chess_piece import chess_piece + +#king chess piece class containing all animations and validation + frontend for king +class bishop_p(chess_piece): + pass \ No newline at end of file diff --git a/chess_pieces/knight.py b/chess_pieces/knight.py new file mode 100644 index 0000000..96aea60 --- /dev/null +++ b/chess_pieces/knight.py @@ -0,0 +1,11 @@ +#file containing the child class for the knight chess piece + +#libraries +import pygame + +#file imports +from _chess_piece import chess_piece + +#knight chess piece class containing all animations and validation + frontend for knight +class bishop_p(chess_piece): + pass \ No newline at end of file diff --git a/chess_pieces/pawn.py b/chess_pieces/pawn.py new file mode 100644 index 0000000..a47a1fc --- /dev/null +++ b/chess_pieces/pawn.py @@ -0,0 +1,11 @@ +#file containing the child class for the pawn chess piece + +#libraries +import pygame + +#file imports +from _chess_piece import chess_piece + +#pawn chess piece class containing all animations and validation + frontend for pawn +class pawn_p(chess_piece): + pass \ No newline at end of file diff --git a/chess_pieces/queen.py b/chess_pieces/queen.py new file mode 100644 index 0000000..90c108c --- /dev/null +++ b/chess_pieces/queen.py @@ -0,0 +1,11 @@ +#file containing the child class for the queen chess piece + +#libraries +import pygame + +#file imports +from _chess_piece import chess_piece + +#queen chess piece class containing all animations and validation + frontend for queen +class queen_p(chess_piece): + pass \ No newline at end of file diff --git a/chess_pieces/rook.py b/chess_pieces/rook.py new file mode 100644 index 0000000..125bcba --- /dev/null +++ b/chess_pieces/rook.py @@ -0,0 +1,11 @@ +#file containing the child class for the rook chess piece + +#libraries +import pygame + +#file imports +from _chess_piece import chess_piece + +#rook chess piece class containing all animations and validation + frontend for rook +class rook_p(chess_piece): + pass \ No newline at end of file From 50e7b0536c6b8a253b308756e0dba8d96ae4b89f Mon Sep 17 00:00:00 2001 From: Sh0ookshed Date: Mon, 22 Sep 2025 11:17:42 +0100 Subject: [PATCH 2/6] created folder for chess piece assets +logo + pfps --- assets/{placeholder4.txt => chess_piece_pictures/placeholdr5.txt} | 0 assets/general pictures/bot_and_player_pfp_here.txt | 0 assets/general pictures/main_logo_here.txt | 0 assets/placeholder6.txt | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename assets/{placeholder4.txt => chess_piece_pictures/placeholdr5.txt} (100%) create mode 100644 assets/general pictures/bot_and_player_pfp_here.txt create mode 100644 assets/general pictures/main_logo_here.txt create mode 100644 assets/placeholder6.txt diff --git a/assets/placeholder4.txt b/assets/chess_piece_pictures/placeholdr5.txt similarity index 100% rename from assets/placeholder4.txt rename to assets/chess_piece_pictures/placeholdr5.txt diff --git a/assets/general pictures/bot_and_player_pfp_here.txt b/assets/general pictures/bot_and_player_pfp_here.txt new file mode 100644 index 0000000..e69de29 diff --git a/assets/general pictures/main_logo_here.txt b/assets/general pictures/main_logo_here.txt new file mode 100644 index 0000000..e69de29 diff --git a/assets/placeholder6.txt b/assets/placeholder6.txt new file mode 100644 index 0000000..e69de29 From 78ec55c1fabbca1f3cf85b0801c695cd3d528d41 Mon Sep 17 00:00:00 2001 From: Sh0ookshed Date: Mon, 22 Sep 2025 22:55:06 +0100 Subject: [PATCH 3/6] added placeholder image --- assets/general pictures/placeholder.png | Bin 0 -> 45976 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/general pictures/placeholder.png diff --git a/assets/general pictures/placeholder.png b/assets/general pictures/placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..d813b89367347519a75fe8ac617f1bfc037e0cfe GIT binary patch literal 45976 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

Yz*!mU9e>xWjre3K#)MEo0U*P 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 literal 0 HcmV?d00001 From 5646f21c8153c4c2f33fd97deb8100da8fb005e9 Mon Sep 17 00:00:00 2001 From: Sh0ookshed <185430047+Sh0ookshed@users.noreply.github.com> Date: Tue, 18 Nov 2025 11:34:24 +0000 Subject: [PATCH 4/6] completed setup for chess piece parent class --- chess_pieces/_chess_piece.py | 46 ++++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/chess_pieces/_chess_piece.py b/chess_pieces/_chess_piece.py index e0c7c24..e905b73 100644 --- a/chess_pieces/_chess_piece.py +++ b/chess_pieces/_chess_piece.py @@ -1,8 +1,46 @@ -#file containing the parent class for all chess pieces +#------------------------------------------------------------------------------ +#CHESS PIECE +#------------------------------------------------------------------------------ +#file containing the parent class for all chess pieces. this creates all of the attributes that can be individualised for each child chess piece + +#------------------------------------------------------------------------------ #libraries -import pygame +#------------------------------------------------------------------------------ +import pygame #GUI + +#------------------------------------------------------------------------------ +#initialisation +#------------------------------------------------------------------------------ +pygame.init() -#chess piece parent class containing the skeleton for all the child classes +#------------------------------------------------------------------------------ +#Chess piece class +#------------------------------------------------------------------------------ class chess_piece: - pass \ No newline at end of file + + #attributes + def __init__(self, colour, p_ID, square): + + #variable attributes + self.width, self.height = square.size #gets the size of the chess square so the piece can scale to fit it + self.colour = colour + self.p_ID = p_ID #p_ID is the piece ID. its used to identify different pieces for the algorithm to understand. + + #attributes + self.image = pygame.image.load("assets/general pictures/placeholder.png").convert() #placeholder just to define in main class and give base image + self.image = pygame.transform.scale(self.image, (self.width*0.9, self.height*0.9)) #make the chess pieces a tiny bit smaller than the square + self.p_value = 0 #how much the chess piece is worth (for weighting). base value is 0 but will be different for all the child pieces + + #list attributes for the chess piece + self.position = [] #coordinates for the chess piece + self.position_history = [] #history of where the piece has moved + self.legal_moves = [] #list of legal moves that the piece can make + self.defending = [] #list of pieces the piece is defending + self.attacking = [] #list of pieces the piece is attacking + self.defended_by = [] #list of pieces the piece is being defended by + self.attacked_by = [] #list of pieces the piece is being attacked by + + #boolean states + captured = False + pinned = False \ No newline at end of file From 5fd0b74733cdbae009e3f20f95137361aac3b784 Mon Sep 17 00:00:00 2001 From: Sh0ookshed <185430047+Sh0ookshed@users.noreply.github.com> Date: Tue, 18 Nov 2025 11:52:40 +0000 Subject: [PATCH 5/6] completed setup for bishop class (need image) --- chess_pieces/bishop.py | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/chess_pieces/bishop.py b/chess_pieces/bishop.py index eb7888a..6059990 100644 --- a/chess_pieces/bishop.py +++ b/chess_pieces/bishop.py @@ -1,11 +1,35 @@ -#file containing the child class for the bishop chess piece +#------------------------------------------------------------------------------ +#BISHOP +#------------------------------------------------------------------------------ +#bishop chess piece class containing all animations and validation + frontend for bishop + +#------------------------------------------------------------------------------ #libraries -import pygame +#------------------------------------------------------------------------------ +import pygame #GUI + +#------------------------------------------------------------------------------ +#initialisation +#------------------------------------------------------------------------------ +pygame.init() +#------------------------------------------------------------------------------ +#Chess piece class +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ #file imports +#------------------------------------------------------------------------------ from _chess_piece import chess_piece -#bishop chess piece class containing all animations and validation + frontend for bishop +#------------------------------------------------------------------------------ +#bishop class +#------------------------------------------------------------------------------ class bishop_p(chess_piece): - pass \ No newline at end of file + def __init__(self, colour, p_ID, square): + super().__init__(colour, p_ID, square) + + # + self.image = pygame.image.load("assets/general pictures/placeholder.png").convert() #change image to bishop image once created + self.p_value = 3 #how many points the bishop is worth \ No newline at end of file From 440270e7054e310f29c2374521b47af0f6381c3c Mon Sep 17 00:00:00 2001 From: Sh0ookshed <185430047+Sh0ookshed@users.noreply.github.com> Date: Tue, 18 Nov 2025 12:16:07 +0000 Subject: [PATCH 6/6] setup all child chess pieces (whithout images) --- chess_pieces/bishop.py | 8 ++------ chess_pieces/king.py | 30 +++++++++++++++++++++++++----- chess_pieces/knight.py | 30 +++++++++++++++++++++++++----- chess_pieces/pawn.py | 28 ++++++++++++++++++++++++---- chess_pieces/queen.py | 28 ++++++++++++++++++++++++---- chess_pieces/rook.py | 28 ++++++++++++++++++++++++---- 6 files changed, 124 insertions(+), 28 deletions(-) diff --git a/chess_pieces/bishop.py b/chess_pieces/bishop.py index 6059990..c6bda67 100644 --- a/chess_pieces/bishop.py +++ b/chess_pieces/bishop.py @@ -14,10 +14,6 @@ #------------------------------------------------------------------------------ pygame.init() -#------------------------------------------------------------------------------ -#Chess piece class -#------------------------------------------------------------------------------ - #------------------------------------------------------------------------------ #file imports #------------------------------------------------------------------------------ @@ -28,8 +24,8 @@ #------------------------------------------------------------------------------ class bishop_p(chess_piece): def __init__(self, colour, p_ID, square): - super().__init__(colour, p_ID, square) + super().__init__(colour, p_ID, square) #stores paramaters the same as the parent class - # + #attributes self.image = pygame.image.load("assets/general pictures/placeholder.png").convert() #change image to bishop image once created self.p_value = 3 #how many points the bishop is worth \ No newline at end of file diff --git a/chess_pieces/king.py b/chess_pieces/king.py index 38264dd..b5d175e 100644 --- a/chess_pieces/king.py +++ b/chess_pieces/king.py @@ -1,11 +1,31 @@ -#file containing the child class for the king chess piece +#------------------------------------------------------------------------------ +#KING +#------------------------------------------------------------------------------ +#king chess piece class containing all animations and validation + frontend for the king + +#------------------------------------------------------------------------------ #libraries -import pygame +#------------------------------------------------------------------------------ +import pygame #GUI + +#------------------------------------------------------------------------------ +#initialisation +#------------------------------------------------------------------------------ +pygame.init() +#------------------------------------------------------------------------------ #file imports +#------------------------------------------------------------------------------ from _chess_piece import chess_piece -#king chess piece class containing all animations and validation + frontend for king -class bishop_p(chess_piece): - pass \ No newline at end of file +#------------------------------------------------------------------------------ +#king class +#------------------------------------------------------------------------------ +class king_p(chess_piece): + def __init__(self, colour, p_ID, square): + super().__init__(colour, p_ID, square) #stores paramaters the same as the parent class + + #attributes + self.image = pygame.image.load("assets/general pictures/placeholder.png").convert() #change image to king image once created + self.p_value = 10000 #how many points the king is worth. technically invaluable so a very big number is needed to value it \ No newline at end of file diff --git a/chess_pieces/knight.py b/chess_pieces/knight.py index 96aea60..897930b 100644 --- a/chess_pieces/knight.py +++ b/chess_pieces/knight.py @@ -1,11 +1,31 @@ -#file containing the child class for the knight chess piece +#------------------------------------------------------------------------------ +#KNIGHT +#------------------------------------------------------------------------------ +#knight chess piece class containing all animations and validation + frontend for the knight + +#------------------------------------------------------------------------------ #libraries -import pygame +#------------------------------------------------------------------------------ +import pygame #GUI + +#------------------------------------------------------------------------------ +#initialisation +#------------------------------------------------------------------------------ +pygame.init() +#------------------------------------------------------------------------------ #file imports +#------------------------------------------------------------------------------ from _chess_piece import chess_piece -#knight chess piece class containing all animations and validation + frontend for knight -class bishop_p(chess_piece): - pass \ No newline at end of file +#------------------------------------------------------------------------------ +#knight class +#------------------------------------------------------------------------------ +class knight_p(chess_piece): + def __init__(self, colour, p_ID, square): + super().__init__(colour, p_ID, square) #stores paramaters the same as the parent class + + #attributes + self.image = pygame.image.load("assets/general pictures/placeholder.png").convert() #change image to knight image once created + self.p_value = 3 #how many points the knight is worth \ No newline at end of file diff --git a/chess_pieces/pawn.py b/chess_pieces/pawn.py index a47a1fc..99a8c1c 100644 --- a/chess_pieces/pawn.py +++ b/chess_pieces/pawn.py @@ -1,11 +1,31 @@ -#file containing the child class for the pawn chess piece +#------------------------------------------------------------------------------ +#PAWN +#------------------------------------------------------------------------------ +#pawn chess piece class containing all animations and validation + frontend for the pawn + +#------------------------------------------------------------------------------ #libraries -import pygame +#------------------------------------------------------------------------------ +import pygame #GUI + +#------------------------------------------------------------------------------ +#initialisation +#------------------------------------------------------------------------------ +pygame.init() +#------------------------------------------------------------------------------ #file imports +#------------------------------------------------------------------------------ from _chess_piece import chess_piece -#pawn chess piece class containing all animations and validation + frontend for pawn +#------------------------------------------------------------------------------ +#pawn class +#------------------------------------------------------------------------------ class pawn_p(chess_piece): - pass \ No newline at end of file + def __init__(self, colour, p_ID, square): + super().__init__(colour, p_ID, square) + + #attributes + self.image = pygame.image.load("assets/general pictures/placeholder.png").convert() #change image to pawn image once created + self.p_value = 1 #how many points the pawn is worth \ No newline at end of file diff --git a/chess_pieces/queen.py b/chess_pieces/queen.py index 90c108c..a88bb37 100644 --- a/chess_pieces/queen.py +++ b/chess_pieces/queen.py @@ -1,11 +1,31 @@ -#file containing the child class for the queen chess piece +#------------------------------------------------------------------------------ +#QUEEN +#------------------------------------------------------------------------------ +#queen chess piece class containing all animations and validation + frontend for the queen + +#------------------------------------------------------------------------------ #libraries -import pygame +#------------------------------------------------------------------------------ +import pygame #GUI + +#------------------------------------------------------------------------------ +#initialisation +#------------------------------------------------------------------------------ +pygame.init() +#------------------------------------------------------------------------------ #file imports +#------------------------------------------------------------------------------ from _chess_piece import chess_piece -#queen chess piece class containing all animations and validation + frontend for queen +#------------------------------------------------------------------------------ +#queen class +#------------------------------------------------------------------------------ class queen_p(chess_piece): - pass \ No newline at end of file + def __init__(self, colour, p_ID, square): + super().__init__(colour, p_ID, square) + + #attributes + self.image = pygame.image.load("assets/general pictures/placeholder.png").convert() #change image to queen image once created + self.p_value = 9 #how many points the queen is worth \ No newline at end of file diff --git a/chess_pieces/rook.py b/chess_pieces/rook.py index 125bcba..e82bf4b 100644 --- a/chess_pieces/rook.py +++ b/chess_pieces/rook.py @@ -1,11 +1,31 @@ -#file containing the child class for the rook chess piece +#------------------------------------------------------------------------------ +#ROOK +#------------------------------------------------------------------------------ +#rook chess piece class containing all animations and validation + frontend for the rook + +#------------------------------------------------------------------------------ #libraries -import pygame +#------------------------------------------------------------------------------ +import pygame #GUI + +#------------------------------------------------------------------------------ +#initialisation +#------------------------------------------------------------------------------ +pygame.init() +#------------------------------------------------------------------------------ #file imports +#------------------------------------------------------------------------------ from _chess_piece import chess_piece -#rook chess piece class containing all animations and validation + frontend for rook +#------------------------------------------------------------------------------ +#rook class +#------------------------------------------------------------------------------ class rook_p(chess_piece): - pass \ No newline at end of file + def __init__(self, colour, p_ID, square): + super().__init__(colour, p_ID, square) + + #attributes + self.image = pygame.image.load("assets/general pictures/placeholder.png").convert() #change image to rook image once created + self.p_value = 5 #how many points the rook is worth \ No newline at end of file