Your classes PlayerPiece and TilePiece are inner classes, defined inside the GameShape class.
An instance of an inner class needs a reference to an instance of its enclosing class. You need an instance of GameShape to create the instances of PlayerPiece and TilePiece on in lines 27 and 28. Since the
main method is static, you don't have an implicit instance of GameShape to create those instances on.
In this example, there is no reason why the classes PlayerPiece and TilePiece should be inner classes. Move them out into their own source files, as top-level classes.
Another way to solve this is to make PlayerPiece and TilePiece
nested classes instead of inner classes. A third way would be to change your
main method to create an instance of GameShape first, and then to create the PlayerPiece and TilePiece instances on the instance of GameShape. But since there isn't a good reason to make PlayerPiece and TilePiece inner classes, I think making them top-level classes would be the best solution here.