《付録》game.py

# -*- coding: utf-8 -*-
#===============================================================================
#    Copyright (C) 2000-2008, 小泉ひよ子とタマゴ倶楽部
#
# History: Games
#    1988/05, Smalltalk
#    2004/09, Java
#    2005/02, C#
#    2005/03, Jython
#===============================================================================

#===============================================================================
#    配列と別れる50の方法
#===============================================================================
from java.awt import *
from java.awt.event import *
from java.lang import *
from java.util import *
from javax.swing import *

#===============================================================================
class DefaultFrame(JFrame):
    defaultTitle = "Default Title"
    defaultSize = Dimension(200, 100)

    def __init__(self, title=None, size=None):
        self.initialize()
        self.initializeFrame(title, size)
        self.initializeComponent()
        self.visible = True

    def initialize(self): pass

    def initializeFrame(self, title=defaultTitle, size=defaultSize):
        JFrame.__init__(self, 
            defaultCloseOperation=JFrame.EXIT_ON_CLOSE, 
            size=size, title=title)

    def initializeComponent(self): pass

#===============================================================================
class GameBoardPanel(JPanel):
    def __init__(self):
        JPanel.__init__(self, mouseClicked=self.this_mouseClicked)
        self.initialize()
        
    def initialize(self):
        self.items = []
        self.locateItems()
        self.settle()

    def locateItems(self):
        raise NotImplementedError, "def locateItems(self)"

    def settle(self): pass
        
    def paintComponent(self, g):
    	self.prepare()
    	self.paintItems(g)

    def prepare(self):
        raise NotImplementedError, "def prepare(self)"

    def paintItems(self, g):
        for e in self.items:
            e.paint(g)

    def detect(self, x, y):
        obj = self.nullObject()
        for e in self.items:
            if e.isExist(x, y): obj = e; break
        return obj

    def nullObject(self):
        raise NotImplementedError, "def nullObject(self)"

#===============================================================================
class Shape(object):
    def dim(self):
        raise NotImplementedError, "def dim(self)"
    def paint(self, g):
        self.paintBackground(g)
        self.paintItem(g)
    def isExist(self, x, y):
        raise NotImplementedError, "def isExist(self,x,y)"

#===============================================================================
class GameItem(Shape):
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return "(%r,%r)"%(self.x, self.y)

    def width(self, g):
        return g.clipBounds.width / self.dim()

    def height(self, g):
        return g.clipBounds.height / self.dim()

    def isExist(self, x, y):
        return (self.x, self.y) == (x, y)

#===============================================================================
from _jython2_ import *
signature("-", __file__, '1.0.1')
#===============================================================================