[+] A2 Starter files
This commit is contained in:
@@ -0,0 +1,208 @@
|
||||
"""
|
||||
Ahira Justice, ADEFOKUN
|
||||
justiceahira@gmail.com
|
||||
"""
|
||||
|
||||
|
||||
import os
|
||||
import pygame
|
||||
|
||||
from . import pieces
|
||||
from . import fenparser
|
||||
|
||||
|
||||
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
IMAGE_DIR = os.path.join(BASE_DIR, 'images')
|
||||
|
||||
|
||||
class Board:
|
||||
|
||||
btile = pygame.image.load(os.path.join(IMAGE_DIR, 'btile.png'))
|
||||
wtile = pygame.image.load(os.path.join(IMAGE_DIR, 'wtile.png'))
|
||||
|
||||
def __init__(self, colors, BGCOLOR, DISPLAYSURF, size=8):
|
||||
self.colors = colors
|
||||
self.BGCOLOR = BGCOLOR
|
||||
self.DISPLAYSURF = DISPLAYSURF
|
||||
self.font = pygame.font.Font(pygame.font.get_default_font(), 24)
|
||||
|
||||
self.pieceRect = []
|
||||
|
||||
self.boardRect, self.tile_size = self._generate_board_rect(size)
|
||||
|
||||
def _generate_board_rect(self, size):
|
||||
|
||||
start = 100
|
||||
end = 500
|
||||
stride = (end - start) // size
|
||||
board_rect = []
|
||||
|
||||
for column in range(0, size):
|
||||
board_rect.append(tuple([(start + row * stride, start + column * stride) for row in range(0, size)]))
|
||||
|
||||
return board_rect, stride
|
||||
|
||||
def displayBoard(self):
|
||||
self.DISPLAYSURF.fill(self.BGCOLOR)
|
||||
pygame.draw.rect(self.DISPLAYSURF, self.colors['Black'], (95, 95, 410, 410), 10)
|
||||
|
||||
self.drawTiles()
|
||||
|
||||
|
||||
def drawTiles(self):
|
||||
wtile = pygame.transform.scale(Board.wtile, (self.tile_size, self.tile_size))
|
||||
btile = pygame.transform.scale(Board.btile, (self.tile_size, self.tile_size))
|
||||
|
||||
for i in range(1, len(self.boardRect)+1):
|
||||
for j in range(1, len(self.boardRect[i-1])+1):
|
||||
if self.isOdd(i):
|
||||
if self.isOdd(j):
|
||||
self.DISPLAYSURF.blit(wtile, self.boardRect[i-1][j-1])
|
||||
elif self.isEven(j):
|
||||
self.DISPLAYSURF.blit(btile, self.boardRect[i-1][j-1])
|
||||
elif self.isEven(i):
|
||||
if self.isOdd(j):
|
||||
self.DISPLAYSURF.blit(btile, self.boardRect[i-1][j-1])
|
||||
elif self.isEven(j):
|
||||
self.DISPLAYSURF.blit(wtile, self.boardRect[i-1][j-1])
|
||||
|
||||
# draw letters
|
||||
files = 'abcdefgh'
|
||||
ranks = '12345678'
|
||||
size = len(self.boardRect)
|
||||
for i in range(0, len(self.boardRect)):
|
||||
|
||||
text_surface = self.font.render(ranks[size - i - 1], True, (200, 200, 200))
|
||||
rect = self.boardRect[i][-1]
|
||||
rect = (rect[0] + self.tile_size + 20, rect[1] + 40)
|
||||
self.DISPLAYSURF.blit(text_surface, dest=rect)
|
||||
|
||||
for i in range(0, len(self.boardRect)):
|
||||
text_surface = self.font.render(files[i], True, (200, 200, 200))
|
||||
rect = self.boardRect[-1][i]
|
||||
rect = (rect[0] + 40, rect[1] + self.tile_size + 15)
|
||||
self.DISPLAYSURF.blit(text_surface, dest=rect)
|
||||
|
||||
|
||||
def isOdd(self, number):
|
||||
if number % 2 == 1:
|
||||
return True
|
||||
|
||||
|
||||
def isEven(self, number):
|
||||
if number % 2 == 0:
|
||||
return True
|
||||
|
||||
|
||||
def drawPieces(self):
|
||||
self.mapPieces()
|
||||
|
||||
for piece in self.pieceRect:
|
||||
piece.displayPiece()
|
||||
|
||||
|
||||
def mapPieces(self):
|
||||
for i in range(len(Board.posb)):
|
||||
if i in [0, 1, 2, 3, 4, 5, 6, 7]:
|
||||
piece = self.createPiece(pieces.BLACK, pieces.PAWN, Board.posb[i])
|
||||
self.pieceRect.append(piece)
|
||||
elif i in [8, 15]:
|
||||
piece = self.createPiece(pieces.BLACK, pieces.ROOK, Board.posb[i])
|
||||
self.pieceRect.append(piece)
|
||||
elif i in [9, 14]:
|
||||
piece = self.createPiece(pieces.BLACK, pieces.KNGHT, Board.posb[i])
|
||||
self.pieceRect.append(piece)
|
||||
elif i in [10, 13]:
|
||||
piece = self.createPiece(pieces.BLACK, pieces.BISHOP, Board.posb[i])
|
||||
self.pieceRect.append(piece)
|
||||
elif i in [11]:
|
||||
piece = self.createPiece(pieces.BLACK, pieces.QUEEN, Board.posb[i])
|
||||
self.pieceRect.append(piece)
|
||||
elif i in [12]:
|
||||
piece = self.createPiece(pieces.BLACK, pieces.KING, Board.posb[i])
|
||||
self.pieceRect.append(piece)
|
||||
|
||||
for i in range(len(Board.posw)):
|
||||
if i in [0, 1, 2, 3, 4, 5, 6, 7]:
|
||||
piece = self.createPiece(pieces.WHITE, pieces.PAWN, Board.posw[i])
|
||||
self.pieceRect.append(piece)
|
||||
elif i in [8, 15]:
|
||||
piece = self.createPiece(pieces.WHITE, pieces.ROOK, Board.posw[i])
|
||||
self.pieceRect.append(piece)
|
||||
elif i in [9, 14]:
|
||||
piece = self.createPiece(pieces.WHITE, pieces.KNGHT, Board.posw[i])
|
||||
self.pieceRect.append(piece)
|
||||
elif i in [10, 13]:
|
||||
piece = self.createPiece(pieces.WHITE, pieces.BISHOP, Board.posw[i])
|
||||
self.pieceRect.append(piece)
|
||||
elif i in [11]:
|
||||
piece = self.createPiece(pieces.WHITE, pieces.QUEEN, Board.posw[i])
|
||||
self.pieceRect.append(piece)
|
||||
elif i in [12]:
|
||||
piece = self.createPiece(pieces.WHITE, pieces.KING, Board.posw[i])
|
||||
self.pieceRect.append(piece)
|
||||
|
||||
|
||||
def createPiece(self, color, type, position):
|
||||
piece = pieces.Piece(color, type, self.DISPLAYSURF, self.tile_size)
|
||||
piece.setPosition(position)
|
||||
return piece
|
||||
|
||||
|
||||
def updatePieces(self, fen):
|
||||
self.pieceRect = []
|
||||
fp = fenparser.FenParser(fen)
|
||||
fenboard = fp.parse()
|
||||
|
||||
for i in range(len(fenboard)):
|
||||
for j in range(len(fenboard[i])):
|
||||
if fenboard[i][j] in ['b', 'B']:
|
||||
if fenboard[i][j] == 'b':
|
||||
piece = self.createPiece(pieces.BLACK, pieces.BISHOP, self.boardRect[i][j])
|
||||
self.pieceRect.append(piece)
|
||||
elif fenboard[i][j] == 'B':
|
||||
piece = self.createPiece(pieces.WHITE, pieces.BISHOP, self.boardRect[i][j])
|
||||
self.pieceRect.append(piece)
|
||||
|
||||
elif fenboard[i][j] in ['k', 'K']:
|
||||
if fenboard[i][j] == 'k':
|
||||
piece = self.createPiece(pieces.BLACK, pieces.KING, self.boardRect[i][j])
|
||||
self.pieceRect.append(piece)
|
||||
elif fenboard[i][j] == 'K':
|
||||
piece = self.createPiece(pieces.WHITE, pieces.KING, self.boardRect[i][j])
|
||||
self.pieceRect.append(piece)
|
||||
|
||||
elif fenboard[i][j] in ['n', 'N']:
|
||||
if fenboard[i][j] == 'n':
|
||||
piece = self.createPiece(pieces.BLACK, pieces.KNGHT, self.boardRect[i][j])
|
||||
self.pieceRect.append(piece)
|
||||
elif fenboard[i][j] == 'N':
|
||||
piece = self.createPiece(pieces.WHITE, pieces.KNGHT, self.boardRect[i][j])
|
||||
self.pieceRect.append(piece)
|
||||
|
||||
elif fenboard[i][j] in ['p', 'P']:
|
||||
if fenboard[i][j] == 'p':
|
||||
piece = self.createPiece(pieces.BLACK, pieces.PAWN, self.boardRect[i][j])
|
||||
self.pieceRect.append(piece)
|
||||
elif fenboard[i][j] == 'P':
|
||||
piece = self.createPiece(pieces.WHITE, pieces.PAWN, self.boardRect[i][j])
|
||||
self.pieceRect.append(piece)
|
||||
|
||||
elif fenboard[i][j] in ['q', 'Q']:
|
||||
if fenboard[i][j] == 'q':
|
||||
piece = self.createPiece(pieces.BLACK, pieces.QUEEN, self.boardRect[i][j])
|
||||
self.pieceRect.append(piece)
|
||||
elif fenboard[i][j] == 'Q':
|
||||
piece = self.createPiece(pieces.WHITE, pieces.QUEEN, self.boardRect[i][j])
|
||||
self.pieceRect.append(piece)
|
||||
|
||||
elif fenboard[i][j] in ['r', 'R']:
|
||||
if fenboard[i][j] == 'r':
|
||||
piece = self.createPiece(pieces.BLACK, pieces.ROOK, self.boardRect[i][j])
|
||||
self.pieceRect.append(piece)
|
||||
elif fenboard[i][j] == 'R':
|
||||
piece = self.createPiece(pieces.WHITE, pieces.ROOK, self.boardRect[i][j])
|
||||
self.pieceRect.append(piece)
|
||||
|
||||
for piece in self.pieceRect:
|
||||
piece.displayPiece()
|
||||
Reference in New Issue
Block a user