From the looks of your code it would seem everything is called in a single frame which means that everything updates at once.
If you want a pause between @do_move and @before_best you need to add it in between.
@do_move = Win32API.new("ChessEngine.dll", "do_move", ['I','I'], "I")
@best_move = Win32API.new("ChessEngine.dll", "best_move", "", "L")
...
# Player move
@do_move.call(@from, @cursor)
refresh
# Wait 60 frames (Only the Graphics module is updated)
Graphics.wait(60)
# Computer move
@best_move.call()
refresh
Graphics.wait is not probably what you want, but you can visibly see a pause after @do_move. You will probably want to add your own wait method if things are moving or being animated on screen.