《付録》exHoneyComb2.py
# -*- coding: utf-8 -*- #=============================================================================== # Copyright (C) 2000-2008, 小泉ひよ子とタマゴ倶楽部 # # Change History: WPF examples # 2008/01/25, IronPython 1.1.1 (download) # 2008/08/22, IronPython 1.1.2 (download) # 2008/03/16, ver.2.0, WPF # 2008/00/00, ver.2.1, IronPython 1.1.2 # Change History: Games # 1988/05, Smalltalk # 2004/09, Java # 2005/02, C# # 2005/03, Jython #=============================================================================== from _ant import * from System.Windows import * from HoneyComb2 import * from HoneyCell import * ## -------------------- class ExWindow(Window): def __init__(self, Content=None, **args): self.InitializeComponent(Content) self.init() def InitializeComponent(self, Content): self.Content = LoadXaml(Content) def init(self): target = "canvas", self._Controls(target) self.comb = CombCell() self.addCells() def _Controls(self, target): controls = xaml_controls(self) for e in target: setattr(self, e, controls[e]) def addCells(self): self.addNull() self.addComb() self.addBlack() self.addWhite() def addNull(self): for n, x, y in [ (7, 2, -2), (7, 2, 18), ]: for e in range(n): cell = NullStone(self, e*2+x, y) self.addShape(cell.shape) for x, y in [ ( 1, 0), (15, 0), ( 0, 2), (16, 2), (-1, 4), (17, 4), (-2, 6), (18, 6), (-1, 8), (17, 8), (-2, 10), (18, 10), (-1, 12), (17, 12), ( 0, 14), (16, 14), ( 1, 16), (15, 16), ]: cell = NullStone(self, x, y) self.addShape(cell.shape) def addComb(self): for n, x, y in [ (6, 3, 0), (7, 2, 2), (8, 1, 4), (9, 0, 6), (8, 1, 8), (9, 0, 10), (8, 1, 12), (7, 2, 14), (6, 3, 16), ]: for e in range(n): cell = CombStone(self, e*2+x, y) self.addShape(cell.shape) self.comb.addCell(cell) def addBlack(self): self._addStone(BlackStone, [( 6,6), (9,8), ( 6,10)]) def addWhite(self): self._addStone(WhiteStone, [(10,6), (7,8), (10,10)]) def _addStone(self, species, points): for x, y in points: cell = species(self, x, y) self.addShape(cell.shape) self.comb.addNeighbors(cell, x, y) def addShape(self, shape): return self.canvas.Children.Add(shape) ## -------------------- if __name__ == "__main__": import sys xaml = sys.argv[1] win = ExWindow( Title=__file__, Width=298, Height=286, Content=xaml, ) Application().Run(win) ## --------------------
テストケース2:隣接する領地
テストケースを起動すると、ウィンドウが開きます。任意の領地を選択(クリック)すると、それを囲む領域を強調して(色付きで)表示します。