ゲームに学ぶフレームワーク #3.6: dict を利用する
ゲームに学ぶ Jython/Swing フレームワーク《Jython2.5》
dict を利用する
《著》森こねこ+小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部
第1版♪2003/05/23 ● 第2版♪2009/04/03
■ 概要
アプリケーションを作成する過程を通して、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 step05/othelloEx.py90 84 47 90マウスでクリックしたマス目に、黒石を描きます。マウスでクリックした位置を出力します。 》作業中です《事例:Java の世界を Jython から観察する
実行中の Java アプリケーションの状態は、Jython の対話モードでも確認できます。>>> view = Xview >>> view java.awt.Canvas[canvas0,0,0,200x128]
大域変数 Xview を介して、Canvas を参照できます。すると、キャンバスの大きさ(幅x高さ)が 200x128 になっているのが分かります。ここで、次に示すコードの断片と比較してください。すると、幅 150 のウィンドウを指定したのに対して、実際にはキャンバスの幅が狭くなっているのが分かります。事例:コードの解説
■ モジュール:othelloModel.py
class Model(object): ... state = None def paint(self, g): e = self.geom x, y, w, h = e.x, e.y, e.width, e.height g.color = self._fillColor g.fillRect(x, y, w, h) g.color = self._drawColor g.drawRect(x, y, w, h) if self.state: g.color = Color.black g.fillOval(x, y, w, h)属性 .state は、モデルの状態を保持します。初期状態では、None(黒白どちらの領地でもない)です。■ モジュール:othelloView.py
class GameBoard(Canvas): def __init__(self, *args, **keys): super(self.__class__,self).__init__( mouseClicked = self._mouseClicked, ) e = Model._extent self.stones = dict([ ((x,y), Model(Point(e*x, e*y))) for y in range(8) for x in range(8) ])インスタンス属性 .stones は、組み込み型 dict を使ってモデルを管理します。x,y 座標を列挙したタプルをキーに指定すると、値として各モデルが得られます。def _mouseClicked(self, e): print e.x, e.y point = Point(e.x, e.y) for e in self.stones.values(): if e.geom.contains(point): e.state = True; break self.repaint()
各モデルに固有の矩形領域 geom が、クリックした座標 point を含む contains なら、モデルの状態 .state を変更(黒 True)します。def paint(self, g): for e in self.stones.values(): e.paint(g)キャンバスを再描画して、マス目を表示します。Tips
》作業中です《Last updated♪09/07/01