Nếu bạn viết được các GUI dễ thì đã được 50% rồi đó. Giờ chỉ còn bỏ công bỏ sức vào nữa thôi :)
1) Cần phải chạy được các engine cờ và phải bắt được chúng in ra cái gì, đồng thời ta phải đưa được các lệnh điều khiển (dạng text) cho các engine đó. Cái kỹ thuật chạy chương trình này trong lòng chương trình kia gọi là chạy pipe
2) Các engine cờ không in "lung tung" ra màn hình, lệnh điều khiển đưa vào cho chúng cũng không "lung tung". Thực chất chúng theo các quy định của cờ máy. Tập hợp các lệnh/quy định đó gọi là Protocol. Hiện có hai protocol phổ biến, có tên là Winboard protocol và UCI protocol. Người viết GUI phải nắm được các protocol này
Nắm được 2 cái trên, rồi viết chương trình đồ hoạ cho chúng nữa là xong :)
Ngày xưa việc 1) là rất khó vì phải nắm sâu hệ thống và có nhiều thứ rất tỷ mỷ. Bây giờ dễ hơn nhiều bởi vì có khá nhiều thư viện, open source giúp cho việc này.
Còn dễ hơn nữa, chess GUI dạng open source giờ trên Internet cũng rất nhiều. Đủ loại ngôn ngữ lập trình: C, C++, C#, Pascal, Python, JavaScript... Giờ chỉ cần bạn tìm hiểu rồi chọn một cái phù hợp, sau đó sửa theo ý mình là xong. Nhiều GUI không có phần Cờ tướng thì có thể thêm vào => 30% công việc nữa :)
Bản thân tôi cũng đã viết và cho trên github một chương trình cờ dùng để quản lý và thi đấu cho các engine. Chương trình này cho cờ Vua, không có đồ hoạ nhưng thực hiện được các công việc quan trọng nhất: chạy được các engine trong lòng nó, hiểu được cả Winboard và UCI protocol, cho các engine này thi đấu với nhau và lấy kết quả. Tôi cũng không tự viết cái việc (1) mà dùng một thư viện mở có tên là TinyProcess.
Chương trình của tôi có tên là Banksia. Mã nguồn ở đây:
https://github.com/nguyenpham/Banksia
Good luck!