Based on Uncle Bob's chess exercises in Agile Java