Одна вещь, которая бросается в глаза при этом: почему вы используете целые числа вместо класса для представления этого? Правда, это простая игра, но класс Piece, кажется, выпадает как довольно очевидный класс.
Кроме того, с int у вас действительно есть 3 состояния, предположительно что-то вроде:
0 = empty
1 = X
2 = Y
Таким образом, вы должны проверить на 0 (пусто), прежде чем пытаться проверить, имеют ли они одинаковое значение, это будет быстрее (хотя на самом деле это волнует, это не должно быть быстрым), и имеет более логичный смысл ( квадрат пуст? Если это так, не беспокойтесь о проверке, имеют ли квадраты одинаковые значения).
Даже для таких простых вещей, как это, особенно когда вы только начинаете, попробуйте принять ООП, это другой способ мышления, и он требует практики, поэтому практикуйтесь как можно больше!