Visually, each of the three Cell types would render differently. So they can be seen to have some things in common and some things that are unique to each. Let's define our initial classes to be:
We suspect that there may an abstract class that will unify common behavior between the classes. For now, let's not do that and just stick with these classes until the need to create other classes actually exists.
Instances of Grid will be responsible for our grid and overall management of the cells.
Instances of BlankCell will be the default condition in our grid. MirrorCell instances will not be as frequent and will also be contained in our grid. The TargetCell will have one instance in our grid.