NEW Demo - Chess board
This commit is contained in:
parent
827a3ca565
commit
eba9ea62bb
|
@ -0,0 +1,105 @@
|
|||
import PySimpleGUI as sg
|
||||
import os
|
||||
import io
|
||||
from PIL import Image, ImageDraw, ImageTk, ImageFont
|
||||
import sys
|
||||
from random import randint as rand
|
||||
|
||||
button_names = ('close', 'cookbook', 'cpu', 'github', 'pysimplegui', 'run', 'storage', 'timer')
|
||||
|
||||
ROOT_PATH = './' if sys.platform == 'linux' else 'C:\\Python\\PycharmProjects\\GooeyGUI\\'
|
||||
CHESS_PATH = 'C:/Python/PycharmProjects/GooeyGUI/Chess'
|
||||
|
||||
# piece names
|
||||
BLANK = 0
|
||||
PAWNB = 1
|
||||
KNIGHTB = 2
|
||||
BISHOPB = 3
|
||||
ROOKB = 4
|
||||
KINGB = 5
|
||||
QUEENB = 6
|
||||
PAWNW = 7
|
||||
KNIGHTW = 8
|
||||
BISHOPW = 9
|
||||
ROOKW = 10
|
||||
KINGW = 11
|
||||
QUEENW = 12
|
||||
|
||||
initial_board = [[ROOKB, KNIGHTB, BISHOPB, KINGB, QUEENB, BISHOPB, KNIGHTB, ROOKB ],
|
||||
[PAWNB for _ in range(8)],
|
||||
[BLANK for _ in range(8)],
|
||||
[BLANK for _ in range(8)],
|
||||
[BLANK for _ in range(8)],
|
||||
[BLANK for _ in range(8)],
|
||||
[PAWNW for _ in range(8)],
|
||||
[ROOKW, KNIGHTW, BISHOPW, KINGW, QUEENW, BISHOPW, KNIGHTW, ROOKW]]
|
||||
|
||||
def get_image_bytes(image64):
|
||||
image_file = io.BytesIO(base64.b64decode(image64))
|
||||
img = Image.open(image_file)
|
||||
bio = io.BytesIO()
|
||||
img.save(bio, format='PNG')
|
||||
imgbytes = bio.getvalue()
|
||||
return imgbytes
|
||||
|
||||
def DrawBoard():
|
||||
blank = os.path.join(CHESS_PATH, 'blank.png')
|
||||
bishopB = os.path.join(CHESS_PATH, 'bishopb.png')
|
||||
bishopW = os.path.join(CHESS_PATH, 'bishopw.png')
|
||||
pawnB = os.path.join(CHESS_PATH, 'pawnb.png')
|
||||
pawnW = os.path.join(CHESS_PATH, 'pawnw.png')
|
||||
knightB = os.path.join(CHESS_PATH, 'knightb.png')
|
||||
knightW = os.path.join(CHESS_PATH, 'knightw.png')
|
||||
rookB = os.path.join(CHESS_PATH, 'rookb.png')
|
||||
rookW = os.path.join(CHESS_PATH, 'rookw.png')
|
||||
queenB = os.path.join(CHESS_PATH, 'queenB.png')
|
||||
queenW = os.path.join(CHESS_PATH, 'queenW.png')
|
||||
kingB = os.path.join(CHESS_PATH, 'kingb.png')
|
||||
kingW = os.path.join(CHESS_PATH, 'kingw.png')
|
||||
|
||||
images = { BISHOPB:bishopB, BISHOPW:bishopW, PAWNB:pawnB, PAWNW:pawnW, KNIGHTB : knightB, KNIGHTW: knightW, ROOKB:rookB, ROOKW:rookW, KINGB:kingB, KINGW:kingW, QUEENB:queenB, QUEENW:queenW, BLANK:blank}
|
||||
|
||||
sg.SetOptions(auto_size_buttons=True, margins=(0,0), button_color=sg.COLOR_SYSTEM_DEFAULT)
|
||||
|
||||
def render_tan(image):
|
||||
return sg.RButton('', image_filename=image, size=(1, 1), button_color=('white', '#B58863'), pad=(0, 0), key='_close_')
|
||||
def render_brn(image):
|
||||
return sg.RButton('', image_filename=image, size=(1, 1), button_color=('white', '#F0D9B5'), pad=(0, 0), key='_close_')
|
||||
|
||||
brn = sg.RButton('',image_filename=blank, size=(1,1), button_color=('white','#B58863') ,pad=(0,0), key='_close_')
|
||||
tan = sg.RButton('', image_filename=blank, size=(4,3), button_color=('white','#F0D9B5') ,pad=(0,0))
|
||||
|
||||
board = initial_board
|
||||
|
||||
board_layout = [[sg.T(' ')] + [sg.T(f'{a}', pad=((23,27),0), font='Any 13') for a in 'abcdefgh']]
|
||||
|
||||
for i in range(8):
|
||||
row = [sg.T(str(8-i)+' ', font='Any 13')]
|
||||
for j in range(8):
|
||||
piece_image = images[board[i][j]]
|
||||
if (i+j) % 2:
|
||||
row.append(render_tan(piece_image))
|
||||
else:
|
||||
row.append(render_brn(piece_image))
|
||||
board_layout.append(row)
|
||||
|
||||
controls_layout = [[sg.Text('Performance Parameters', font='Any 20')]]
|
||||
statistics_layout = [[sg.Text('Statistics', font=('Any 20'))]]
|
||||
|
||||
layout = [[sg.TabGroup([[sg.Tab('Board',board_layout),
|
||||
sg.Tab('Controls', controls_layout),
|
||||
sg.Tab('Statistics', statistics_layout)]])]]
|
||||
|
||||
window = sg.Window('Chess',
|
||||
no_titlebar=False,
|
||||
grab_anywhere=True,
|
||||
keep_on_top=True,
|
||||
icon='kingb.ico').Layout(layout)
|
||||
|
||||
# ---===--- Loop taking in user input --- #
|
||||
while True:
|
||||
button, value = window.Read()
|
||||
if button is None:
|
||||
break
|
||||
|
||||
DrawBoard()
|
Loading…
Reference in New Issue