# -*- coding: utf-8 -*-
#===============================================================================
# Copyright (C) 2000-2008, 小泉ひよ子とタマゴ倶楽部
#
# Change History: Games
# 1988/05, Smalltalk
# 2004/09, Java
# 2005/02, C#
# 2005/03, Jython
# 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
#===============================================================================
from _ant import *
from System.Windows import *
from System.Windows.Controls import *
from System.Windows.Input import *
from Tetrimino3 import *
## --------------------
class TestCase:
types = "COpbYZLIJS"
def __iter__(self):
m = self.items()
for e in self.types:
yield e, m[e]
def items(self):
return dict((e, eval("Tetrimino%s(4, 4)"%e.upper()))
for e in self.types)
## --------------------
class ExWindow(Window):
def __init__(self, Content=None, **args):
self.InitializeComponent(Content)
self.init()
def InitializeComponent(self, Content):
self.Content = LoadXaml(Content)
def _Controls(self, target):
controls = xaml_controls(self)
for e in target:
setattr(self, e, controls[e])
def init(self):
target = "tabControl", "button",
self._Controls(target)
self.items = {}
for e, mino in TestCase():
tray = Tray()
mino.tray = tray
self.items[e] = mino
item = TabItem(Header=e)
self.tabControl.Items.Add(item)
panel = Canvas()
item.Content = panel
self.addTray(panel, tray)
self.addMino(panel, mino)
self.tabControl.SelectionChanged += self.selectionChanged
self.button.Click += self.click
self.KeyDown += self.keyDown
def addTray(self, panel, tray):
for k, tile in tray.leftEdges.items():
panel.Children.Add(tile.shape)
for k, tile in tray.rightEdges.items():
panel.Children.Add(tile.shape)
for k, tile in tray.tiles.items():
panel.Children.Add(tile.shape)
## --------------------
def addMino(self, panel, mino):
for e in mino.shape:
panel.Children.Add(e)
def selectionChanged(self, sender, e):
self.mino = self.items[sender.SelectedItem.Header]
self.button.Content = self.state()
def click(self, sender, e):
self.mino.rotateClockwise()
sender.Content = self.state()
def keyDown(self, sender, e):
KeyValues(e.Key).switch({
Key.Right: self.mino.shiftRight,
Key.Left : self.mino.shiftLeft,
Key.Up : self.mino.counterClockwise,
Key.Down : self.mino.rotateClockwise ,
})
self.button.Content = self.state()
def state(self):
return "Type-%s: rotation = %d"%(
self.mino.__class__.__name__[-1], self.mino.phase)
class KeyValues:
def __init__(self, value):
self.value = value
def switch(self, cases):
for key, f in cases.items():
if key == self.value:
f()
## --------------------
if __name__ == "__main__":
import sys
xaml = sys.argv[1]
win = ExWindow(
Title=__file__,
Width=234, Height=230,
Content=xaml,
)
Application().Run(win)
## --------------------