it's actually very easy i made several chess games with rules, though i don't have any of them at the moment, they were too old, but it was not hard at all
i used to have an 8x8 array of pointers to a structure, if the value is not NULL, the structure tells what type of piece is on this square, it's color and the ID of the object it's representing, once you set up that, the rest is easy, for example to move a piece you simply call a function that enumerates possible moves for it (used to do it in a vector), and then check if the desired move is valid, if so, then just make the new square on your array point to the old square element and set the old square in the array to NULL (do not "delete" anything), and meanwhile, you should be playing the animation of the piece moving from old position to new position.
i used new/delete operators to initiate the board/destroy a piece
i had all object positions handled by multiplying by 100 then adding 50, so 0,0 in the array would be 50, 50, 1,1 would be 150, 150, and so on
for the AI, it wasn't very easy, i got bored after creating an AI that could just think of 1 step forward without taking consequences into account, AI was pretty boring to code
good luck!
EDIT:
i found my latest attempt on one of the hdds, attached with the post, it was not written with GDK, i wrote it with an old version of my engine, very outdated so it won't work, but it's commented so it might be of some help, it does not have any code for move validation or such, it might use different ways than described above, there are 2 projects, "Hassan Chess AI", which is an application that is supposed to handle a player's AI, and "ChessAI Framework" which is responsible for rendering the actual events, i wrote that so me and another coder could just modify the chess AI (1st project) and the 2 AIs plays against eachothers