If you want brilliant, you can try WPF, perf. Now itβs not so bad, and itβs very easy to get very customizable graphics, loading from external files, etc ....
In terms of generalizing the behavior, you probably want to separate the code for the scene graph (layout, drawing objects, and all the boring low-level materials), then place the layer for general interaction with the game console: select the source, then the destination for the moves, turns, etc. etc., then on top of your game logic.
I would most likely just run Tic-Tac-Toe, see if there is anywhere you need to break your layer separation, and fix it earlier before getting bogged down in the game logic.
Simon buchan
source share