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)
==================================
伊藤うさぎ 著 ◆ 監修:小泉ひよ子とタマゴ倶楽部