ゲームに学ぶフレームワーク #3.3: モジュール分割:リファクタリング

前の記事記事一覧次の記事

ゲームに学ぶ Jython/Swing フレームワーク《Jython2.5》
モジュール分割:リファクタリング

《著》森こねこ+小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部
第1版♪2003/05/23 ● 第2版♪2009/04/03

■ 概要

アプリケーションを作成する過程を通して、Jython/Swing によるフレームワークを習得します。

典型的なオセロゲームから始めて、蜂の巣(6角形)状の盤面を作り、3人で対戦できるゲームへと進化させます。

《Note》JPython1.1.x/Jython2.1.x 用に作成したセミナー課題を、Jython2.5 で再構成しました。

事例:モジュールを起動する

モジュールを起動すると、次のようなウィンドウが現れます。

$ jython2.5.0 -i step02/othelloEx.py 


>>> 
True java.awt.Point[x=46,y=32]
True java.awt.Point[x=97,y=50]

何も描かれない(無地のキャンバス)状態を確認できます。クリックすると、その位置(座標)が出力されます。


》作業中です《

事例:Java の世界を Jython から観察する

実行中の Java アプリケーションの状態は、Jython の対話モードでも確認できます。

>>> view = Xview
>>> view
java.awt.Canvas[canvas0,0,0,200x128]

大域変数 Xview を介して、Canvas を参照できます。すると、キャンバスの大きさ(幅x高さ)が 200x128 になっているのが分かります。ここで、次に示すコードの断片と比較してください。すると、幅 150 のウィンドウを指定したのに対して、実際にはキャンバスの幅が狭くなっているのが分かります。

事例:コードの解説

■ モジュール:othelloEx.py
from java.awt import BorderLayout
from java.awt import Canvas
from javax.swing import JFrame
from javax.swing import JPanel
from sys import argv

モジュール分割によって、不要になった from..import 文を削除します。

from othelloView import GameBoard

モジュール分割によって、必要になった from..import 文を追加します。

class View(JPanel):
    def __init__(self, *args, **keys):
        canvas = GameBoard()
        super(self.__class__,self).__init__(
            layout = BorderLayout(),
            )
        self.add(
            canvas, BorderLayout.CENTER,
            )

既存のクラス Canvas に代えて、新たなモジュールで定義したクラス GameBoard を利用します。

■ モジュール:othelloView.py
from java.awt import Canvas

モジュール othelloEx で削除した from..import 文を、このモジュールに移動します。

class GameBoard(Canvas):
    def __init__(self, *args, **keys):
        super(self.__class__,self).__init__(
            mouseClicked = self._mouseClicked,
            )        
    def _mouseClicked(self, e):
        print e.source.bounds.contains(e.point), e.point

《Note》前述した モジュール と違って、プロパティー mouseClicked と同じ名前をメソッド名には指定できません。そのため、ここでは _mouseClicked としてあります。同じ名前にするとどうなるか、確かめてみるのも一興です。(^.^)

Tips

》作業中です《

Last updated♪09/06/30