Most chess engines are designed to communicate with a GUI via an interface such as Chess Engine Communication Protocol . So in theory its entirely possible to make your chess game GUI implement this protocol and use it to communicate with existing chess engines That approach would allow you to use it with a wide array of strong chess engines. However, the protocol looks fairly non-trivial to implement.
If you want to roll your own A.I (good for learning) Minimax isn't actually all that hard to implement. The only complication is the ability to make copies of the game state (but you will need that for many types of A.I). You will also need some kind of heuristic but basic ones are not hard.
The tricky part with minimax is implementing the optimizations to let it search many turns in advance and to implement a good heuristic. But both of those things are just needed to make the A.I strong, not to make it work.
The way I got comfortable with minimax was implementing a simple text based game of Tic Tac Toe then writing a minimax player for it and then implementing alpha beta pruning. That was a one day project. I mostly just used the wikipedia page as a reference. I would recommend you complete a similar exercise. Don't worry about any of the optimizations or advanced variations until you have the basics down.
Amyan supports both Winboard or UCI protocols.
The two are very much similar, and are based on the same principles: the engine receive text commands from the standard input and emit the resulting information on the standard output.
A GUI has simply to start the engine process and redirect both channels, so that it can pilot it by sending the appropriate sequences of string commands to the input and then parse his output to make actual moves on the board, show analysis status and so on.
Note that this method is cross-language, so you don't have to actually choose a Java engine for your Java interface... as long as the engine is a console application that complies with the above standards, anything goes.
Or else, inter-process communication: messages, remote procedure calls, ...
E.g. to write a chess program in Lisp with a GUI, just have it conform to a protocol like xboard protocol. Then you fire up an existing GUI that speaks xboard, like xboard itself.
There you go: Lisp engine, C GUI.
Fairy-Stockfish plays several chess variants, including Xiangqi. Its strengh is "slightly above the level of Elephant Eye and Cyclone 0.55, at least on master level." (I don't know much about those engines but I assume they're strong).
Besides the engine you need a GUI (for example xboard) to play with it.
There are many implementations of the original perft
function, but I'd hazard a guess that the popular XBoard/WinBoard is the application you're looking for.
You might also have some luck contacting some of the developers using perft
in their projects (I note quite a few GitHub projects related to the topic). The Chess Programming Wiki has a lot of resources which might help, including a list of Tournament Manager applications. Good luck with your program!
You can do this with most engines that support the Winboard/XBoard protocol, nowadays called CECP: https://www.gnu.org/software/xboard/engine-intf.html
Modern engines use UCI, which also works from the terminal, but is a bit less suitable for hand operation - they're meant to be used with a GUI.
The program that's bundled with the Mac is an old open source engine. You can check if you can get the original one to work instead: https://sjeng.org/ftp/Sjeng-Free-11.2.tar.gz