Java.use(better,Python)《64》新たなゲームを作成する: ビュー

《こちらに移動中です》
2008年3月 6日 (木)
記事一覧
Java.use(better, Python) # Jython 導入ガイド

------------ 序 ------------
【目次】
Python/Jython 入門〕Java.use(better) # Stairway to Real Agile World
《準備中》
今回のセミナー課題の実現例を示します。
※ 受講者のみなさんの作品は、掲示板をご覧ください。
------------ 本文 ------------

新たなバネル(承前)

#------ after --------------------------------
class HexOthelloPanel(GameBoardPanel):
    def this_mouseClicked(self, e):
        stone = self.detectStone(e)
        print ">>> this_mouseClicked: %s"%stone
        if stone: return
        if stone is nullStone:
            print "::: click again ..."
            return
        self.reversed = False
        self.reverse(stone)
        if not self.reversed: return
        self.place(HexStone(stone.x, stone.y, self.mode))
        self.mode = not self.mode
        self.repaint()

 変更したメソッド this_mouseClicked は、盤面をクリックしたときのイベントを処理します。現状のままでも、実用上は問題ありません。しかし、コマを配置する位置を正確に検出できないと、エラーメッセージが表示されます。そこで、利用者に「盤面を正確にクリックする」ことを促すメッセージを出力するように、コードを追加しています。

#------ after --------------------------------
class HexOthelloPanel(GameBoardPanel):
    def detectStone(self, e):
        return self.detectPoint(e.x, e.y)

 変更したメソッド detectStone は、イベントが発生したコマを検出します。以前は、コマの座標で検出 detect していましたが、今回は、スクリーン座標で検出 detectPoint する必要があります。

#------ after --------------------------------
class HexOthelloPanel(GameBoardPanel):
    def reverse(self, stone):
        for x, y in self._bounds:
            e = self.detect(stone.x+x, stone.y+y)
            if e.state == (not self.mode):
                self.reverseStones(e, x, y)
    def detectPoint(self, x, y):
        obj = self.nullObject()
        for e in self.items:
            if e.isExistPoint(x, y): obj = e; break
        return obj

 変更したメソッド reverse は、イベントが発生したコマ stone と隣接するコマを反転します。クラス属性 _bounds が保持するオフセット座標を使って、6つの方向で境界を接するコマに対して、反転できるかどうかを検証します。
 新たなメソッド detectPoint は、スクリーン座標 x,y 使って、そこにコマが存在するかどうか isExistPoint を判定します。

#------ after --------------------------------
class HexOthelloPanel(GameBoardPanel):                   
    def place(self, stone):
        px, py = stone._points()
        null = self.detectPoint(px, py)
        self.items.remove(null)
        self.items.append(stone)
        print "place: %s"%stone, "%s,%s"%(px, py)

==================================
伊藤うさぎ 著 ◆ 監修:小泉ひよ子とタマゴ倶楽部

Last updated♪2009/07/29