﻿⍝ How about a Nice Game of Chess?

⎕SE.FontObj←'APL385 Unicode' 30
ChessPieces←↑'♔♕♖♗♘♙' '♚♛♜♝♞♟'
ChessPieces
Officers←3 5 4 2 1 4 5 3 ⋄ Pawns←6
ChessPieces[1;Officers]
White Black←1 2
ix←Black White∘.,Officers,8⍴Pawns
ix
Pieces←4 8⍴ChessPieces[0 ¯8⌽ix]
Pieces
Board←(2⌽4/1 0)⍀Pieces
Board
Board+.='♙'
'Chess' ⎕WC 'Form' 'Uni-Chess Beta'(40 20)(323 381)'Pixel'
'Chess' ⎕WS 'Font' 'Arial Unicode  MS' 30
'Chess.Board' ⎕WC 'Grid' Board (0 0) Chess.Size

Chess.Board.(TitleWidth CellWidths←60 40)
Chess.Board.ColTitles←,¨'ΑΒΓΔΕΖΗΘ'
Chess.Board.BCol←(192 192 192)(127 127 127)
Chess.Board.CellTypes←(⍳8)⌽8 8⍴2 1
Chess.Board.RowTitles←,¨⎕UCS 8543+⍳8 ⍝ Greek/Roman Chess

+/Chess.Board.Values='♜'
b←,Chess.Board.Values
b
u←∪b
u
f←+/u∘.=b
f
(u,[1.5]f)[⍒f;]
data←⍉1 0↓(u,[1.5]f)[⍒f;]
⍝ Now Demo PieChart

'XL' ⎕WC 'OleClient' 'Excel.Application'
XL.Application.Visible←1
wb←XL.Workbooks.Add ⍬
XL.ActiveSheet.Range[⊂'A1:H8'].Value2←,¨Chess.Board.Values
XL.ActiveSheet.Columns[⍳8].AutoFit
Interior←(⌷XL.ActiveSheet.Range[⊂'A1:H8']).Interior
Interior.Color←,256⊥¨(Chess.Board.(BCol[CellTypes]))
Chess.Board.(Values[5 7;4]←Values[7 5;4])
wb.Sheets[2].Range[⊂'A1:H8'].Value2←,¨Chess.Board.Values
Chess.Board.(Values[(3 3)(1 2)]←Values[(1 2)(3 3)])
wb.Sheets[3].Range[⊂'A1:H8'].Value2←,¨Chess.Board.Values
XL.Sheets[2 3].(Columns[⍳8]).AutoFit
wb.(⌷Sheets).Name
wb.(⌷Sheets).Name←'Begin' 'PawnToQ5' 'KnightToQB3'
]disp wb.Sheets['PawnToQ5' 'KnightToQB3'].(Range[⊂'C3:D5']).Value2
]disp wb.(⌷Sheets).UsedRange.(↑¨Value2)
XL.Workbooks[1].(Close Saved←1)
XL.Quit