|
|
|
import numpy |
|
from Scripts.Variables import * |
|
import pygame |
|
|
|
|
|
|
|
class Board: |
|
|
|
@staticmethod |
|
def draw_board(display): |
|
block = unit_size |
|
cnt = 0 |
|
for i in range(8): |
|
for j in range(8): |
|
axis = (i * block, j * block, block, block) |
|
if cnt % 2 == 0: |
|
pygame.draw.rect(display, light_block, axis) |
|
else: |
|
pygame.draw.rect(display, dark_block, axis) |
|
cnt += 1 |
|
cnt -= 1 |
|
|
|
@staticmethod |
|
def draw_pieces(board,display): |
|
for rows in range(units): |
|
for block in range(units): |
|
if board[rows][block] == 1: |
|
|
|
pygame.draw.circle(display, light_piece, ((block * unit_size) + (unit_size//2), (rows * unit_size) + (unit_size//2)), (unit_size//2)-5) |
|
|
|
elif board[rows][block] == 2: |
|
|
|
pygame.draw.circle(display, dark_piece, ((block * unit_size) + (unit_size//2), (rows * unit_size) + (unit_size//2)), (unit_size//2)-5) |
|
|
|
elif board[rows][block] == 3: |
|
|
|
pygame.draw.circle(display, light_king, ((block * unit_size) + (unit_size // 2), (rows * unit_size) + (unit_size // 2)), (unit_size // 2) - 5) |
|
|
|
elif board[rows][block] == 4: |
|
|
|
pygame.draw.circle(display, dark_king, ((block * unit_size) + (unit_size // 2), (rows * unit_size) + (unit_size // 2)), (unit_size // 2) - 5) |
|
|
|
@staticmethod |
|
def draw_hovered_piece(display, piece, x, y): |
|
if piece == 1: |
|
pygame.draw.circle(display, light_piece, (x, y), (unit_size//2)-5) |
|
elif piece == 2: |
|
pygame.draw.circle(display, dark_piece, (x, y), (unit_size // 2) - 5) |
|
elif piece == 3: |
|
pygame.draw.circle(display, light_king, (x, y), (unit_size // 2) - 5) |
|
elif piece == 4: |
|
pygame.draw.circle(display, dark_king, (x, y), (unit_size // 2) - 5) |
|
|
|
|
|
@staticmethod |
|
def newBoard(): |
|
return [ |
|
[0, 2, 0, 2, 0, 2, 0, 2], |
|
[2, 0, 2, 0, 2, 0, 2, 0], |
|
[0, 0, 0, 0, 0, 0, 0, 0], |
|
[0, 0, 0, 0, 0, 0, 0, 0], |
|
[0, 0, 0, 0, 0, 0, 0, 0], |
|
[0, 0, 0, 0, 0, 0, 0, 0], |
|
[0, 1, 0, 1, 0, 1, 0, 1], |
|
[1, 0, 1, 0, 1, 0, 1, 0] |
|
|
|
] |
|
|
|
@staticmethod |
|
def check_promotion(board): |
|
|
|
|
|
for i in range(8): |
|
if board[0][i] == 1: |
|
board[0][i] = 3 |
|
if board[7][i] == 2: |
|
board[7][i] = 4 |
|
|
|
|
|
|
|
|
|
class Available: |
|
|
|
@staticmethod |
|
def check_down(board, row, column, opp): |
|
available = [] |
|
|
|
if column != 0: |
|
if row != 0: |
|
if board[column-1][row-1] == 0: |
|
available.append(helper.fromIndex(column-1, row-1)) |
|
if row != 7: |
|
if board[column-1][row+1] == 0: |
|
available.append(helper.fromIndex(column - 1, row + 1)) |
|
|
|
|
|
if column != 1: |
|
if row != 0: |
|
if row != 1: |
|
if board[column - 2][row - 2] == 0 and board[column - 1][row - 1] in opp: |
|
available.append(helper.fromIndex(column - 2, row - 2)) |
|
if row != 7: |
|
if row != 6: |
|
if board[column - 2][row + 2] == 0 and board[column -1][row + 1] in opp: |
|
available.append(helper.fromIndex(column - 2, row + 2)) |
|
|
|
|
|
return available |
|
|
|
@staticmethod |
|
def check_up(board, row, column, opp): |
|
available = [] |
|
|
|
if column != 7: |
|
if row != 0: |
|
if board[column + 1][row - 1] == 0: |
|
available.append(helper.fromIndex(column + 1, row - 1)) |
|
if row != 7: |
|
if board[column + 1][row + 1] == 0: |
|
available.append(helper.fromIndex(column + 1, row + 1)) |
|
|
|
if column != 6: |
|
if row != 0: |
|
if row != 1: |
|
if board[column + 2][row - 2] == 0 and board[column +1][row -1] in opp: |
|
available.append(helper.fromIndex(column + 2, row - 2)) |
|
if row != 7: |
|
if row != 6: |
|
if board[column + 2][row + 2] == 0 and board[column + 1][row + 1] in opp: |
|
available.append(helper.fromIndex(column + 2, row + 2)) |
|
|
|
return available |
|
|
|
@staticmethod |
|
def check_king(board, row, column, opp): |
|
|
|
available = Available.check_down(board, row, column, opp) |
|
for i in Available.check_up(board, row, column, opp): |
|
available.append(i) |
|
return available |
|
|
|
class helper: |
|
|
|
@staticmethod |
|
def fromAxis(x, y): |
|
return (x // unit_size), (y // unit_size) |
|
|
|
|
|
@staticmethod |
|
def fromIndex(x, y): |
|
return (x) * 8 + y + 1 |
|
|
|
|
|
@staticmethod |
|
def toIndex(serial): |
|
if serial % 8 != 0: |
|
return serial // 8, (serial % 8) - 1 |
|
else: |
|
return (serial // 8) - 1, 7 |
|
|
|
|
|
@staticmethod |
|
def toAxis(x, y): |
|
return x * unit_size, y * unit_size |
|
|
|
@staticmethod |
|
def sub_list(list,list2): |
|
return [list[0] - list2[0] , list[1] - list2[1]] |
|
|
|
@staticmethod |
|
def dev_list_by2(list): |
|
return [list[0] // 2, list[1] // 2] |
|
|