テトリミノ:石の配置
既存のモジュール hexagon.py を再利用しながら、新たなモジュールの動作を検証するために、テストケースを作成します。
class Omino(object): def _shape(self, x, y, phase): self.phase = self._rotate1(phase) s = [] for n in self.mino1: s.append(Polygon( HorizontalAlignment=HorizontalAlignment.Center, VerticalAlignment=VerticalAlignment.Center, Stroke=self._strokeColor, Fill=self.color, Points=self.matrix1[self._rotate1(n)], )) return s
すべてのテトリミノに共通する特性を規定するとともに、内周の石 s を配置します。内周の石の配置は、self.mino1 の各要素が示すオフセットによって決まります。
class SigOmino(Omino): def _shape(self, x, y, phase): pivot = Polygon( HorizontalAlignment=HorizontalAlignment.Center, VerticalAlignment=VerticalAlignment.Center, Stroke=self._strokeColor, Fill=self.color, Points=self.pivot, ) s = super(SigOmino, self)._shape(x, y, phase) return [pivot] + s
回転の枢軸となる石 pivot の回りに、内周の石 s を配置します。枢軸の石 pivot を先頭にして、その後に内周の石 s が続きます。
class PiOmino(SigOmino): def _shape(self, x, y, phase): s = super(PiOmino, self)._shape(x, y, phase) for n in self.mino2: s.append(Polygon( HorizontalAlignment=HorizontalAlignment.Center, VerticalAlignment=VerticalAlignment.Center, Stroke=self._strokeColor, Fill=self.color, Points=self.matrix2[self._rotate2(n)], )) return s
内周の石 s に加えて、外周の石を配置します。外周の石の配置は、self.mino2 の各要素が示すオフセットによって決まります。