When I attempted this, I used a long string with a delimiter, and X Y alpha coordinates.
So something like:
0 1 2 3 4 5 6 7
A
B
C
D
E
F
G
H
So moving piece G0 to E0, like a pawn moving forward two - might look like this:
G0E0:
Which would be stored in a string.
All the possible moves would be stored, then using a buffer board, you set it to your current board layout, and perform each move in the string, delimited by :. The next most likely move from the opponent would be added, then the next player move added onto that.
Say for instance the opponent copies the player:
G0E0: Becomes G0E0:B0D0
So a 256 byte string would store 28 moves, perfectly fine for a DB chess game.
After performing both moves, the AI is back with that current move thread and can calulate the next player move.
You'd start with a list of possible moves, then for all those, add the opponent move, and that list then exponentially grows, using that original list as a seed, you end up with a big array full of moves, all starting from these possible moves, most of them referencing the same move but with different movement variations.
When you calculate each buffer move, you can update a seperate score array for each player - so each move keeps it's final score, and you select the best scoring move when your finished your analysis.

Aegrescit medendo