SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

よろずプログラマーのためのPython導入ガイド

Java meets Python - 第6回 配列と別れる50の方法(3) ライフゲーム

よろずプログラマーのためのPython導入ガイド (8)

イベント処理

 何かと厄介なイベント処理ですが、うまく付き合えば強力な味方となります。

class LifeGamePanel(JPanel):
    def this_mouseClicked(self, e):
        life = self.detectLife(e)
        print ">>>", life
        life.reverse();
        self.repaint();

 メソッドthis_mouseClickedは、マウスでクリックした生命体を描画します。detectLifeを利用してイベントが発生した生命体lifeを特定し、隣接する生命体の数によってその表示を変化(反転)させます。反転reverseしたときには、repaintを利用してパネルを再描画します。

class LifeGamePanel(JPanel):
    def paintComponent(self, g):
        self.decideEdge();
        self.paintItems(g)
    def decideEdge(self):
        Life.Edge = min(self.width, self.height) / self.dim
    def paintItems(self, g):
        for e in self.items:
            e.paint(g)

 repaintを呼び出すと、Swingのフレームワークに準拠してpaintComponentが呼び出されます。そのため、任意のコンポーネントを再描画したいときには、このメソッドを再定義しておきます。実際の処理はpaintItemsに委ね、パネルに配置したすべての生命体を再描画paintします。

 メソッドdecideEdgeは、ウィンドウの大きさが変化したときに、再描画する生命体の大きさを決定します。ただし、属性値Life.Edgeを直接アクセスしているので、後の仕様変更でこれが問題となる可能性を否定できません。この問題を回避する方法は、後の連載で紹介します。

《Tips》ハリウッドの原則
 ここでは、既存のフレームワークを再利用する方法を紹介しました。フレームワークとうまく付き合うコツは、ハリウッドの原則に従うことです。そのためには、自分から「呼び出す」ためではなく、他から「呼び出してもらう」ためだけに、メソッドを用意する必要があります。フレームワークを自分で構築する方法については、後の連載で紹介します。
class LifeGamePanel(JPanel):
    def detect(self, x, y):
        obj = self.nullObject()
        for e in self.items:
            if e.detect(x, y): obj = e; break
        return obj
    def nullObject(self):
        return Null

class Life(Shape):
    def detect(self, x, y):
        return (self.x, self.y) == (x, y)

 メソッドdetectは、指定した座標x/yを持つ生命体を特定します。ただし、実際の処理は、各Lifeインスタンスeに委ね、その条件を満たす生命体objをリターン値とします。クラスLifeでは、指定した座標x/yと比較して、自分selfがその条件を満たすかどうかを判定した結果をリターン値とします。

【付記】
 先の連載第2回で紹介したクラスTileでは、各座標ごとに同値比較しますが、ここではタプルを利用する方法を紹介しています。

次のページ
ビューの構成

この記事は参考になりましたか?

よろずプログラマーのためのPython導入ガイド連載記事一覧

もっと読む

この記事の著者

小泉ひよ子とタマゴ倶楽部(コイズミヒヨコトタマゴクラブ)

http://tamago-club.cocolog-nifty.com/「楽しくなければ仕事じゃない」が私たちのモットー。99%の苦悩の連続も、1%の成功に報われます。だからこそ、この仕事が楽しくて仕方がないのです。楽をするための努力なら惜しみません。何もせず楽をしているのと、努力をしたから楽ができるのと...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

伊藤うさぎ(イトウ ウサギ)

ペンネームの「由来は」と言うと。苗字の方は、セミナー研修で同じチームになった、3人の合体ユニット名 [I:石塚, T:田川, O:尾沢] から来ています。名前の方は、同じ干支(卯:1987 年生)に因んだものです。既に2人は卒業して、残る1人がその名跡を継承しています。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/2252 2008/06/13 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー