@startuml !include skinparams.puml actor "Opponent" as opponent actor "GUI Program" as program boundary "Engine CLI" as cli control "Play a stone" as playStone control "Think next move" as think entity "Board state" as state loop until starting board is set program -> cli : play stone cli -> playStone playStone -> state cli <- state end loop until game ends program -> cli : ask for move cli -> think think -> state cli <- state : Show move opponent -> program : give input program -> cli : play stone cli -> playStone playStone -> state cli <- state end @enduml