This was a great solution, although I have no idea how it could be implemented.
Same for the code that decides who won. I was almost amazed at it when it committed a mistake:

By the way, if you get back to it, I think we need more space around the squares still (and smaller squares).