So with that, you can write the logic for the game with anything, using objects and functions that act on those objects. So it may be a good idea to take one of the languages you’ve experience in and try to write out that logic. The reason I’d try to do that first is that you want to be able to play against the computer, and you need to figure out a way for the computer to be able to be a reasonable opponent. So to do that you probably want a working game just in code, no graphics or anything. The computer can just play randomly, but it is likely that you want them to be fun to play against, for them to be able to play tactically. That’s the hard bit, but it doesn’t need a special framework or graphics, it just needs a lot of thought.
The actual overall game application, the window that will open, the UI, the graphics, in a sense they are just window dressing. In reality they’re quite a bit more than that, but they are going to run and respond to the logic.