ゲームに学ぶフレームワーク #3.3: モジュール分割:リファクタリング
ゲームに学ぶ Jython/Swing フレームワーク《Jython2.5》
モジュール分割:リファクタリング
■ 概要
アプリケーションを作成する過程を通して、Jython/Swing によるフレームワークを習得します。
典型的なオセロゲームから始めて、蜂の巣(6角形)状の盤面を作り、3人で対戦できるゲームへと進化させます。
《Note》JPython1.1.x/Jython2.1.x 用に作成したセミナー課題を、Jython2.5 で再構成しました。
■ 関連記事
- INDEX〈Python〉
- INDEX〈Swing〉
- Java プログラマーのための Python 導入ガイド
- IronPython で学ぶ WPF プログラミングの世界《IronPython2.6》改訂版
事例:モジュールを起動する
モジュールを起動すると、次のようなウィンドウが現れます。
$ 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 BorderLayoutfrom java.awt import Canvasfrom 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
》作業中です《