Started implementing a gogame class to handle GUI aspects of the board
3
pygo.py
|
@ -8,7 +8,7 @@ sys.path.append('lib/')
|
|||
|
||||
import goban
|
||||
import config
|
||||
import gtk, gtk.glade
|
||||
import gtk, gtk.glade, gobject
|
||||
|
||||
|
||||
class Pygo():
|
||||
|
@ -47,6 +47,7 @@ class Pygo():
|
|||
# fixme: create the go board widget and add it to our box here
|
||||
|
||||
|
||||
|
||||
def on_net_direct(self, widget):
|
||||
print 'stub: Pygo.on_menu_net_direct()'
|
||||
|
||||
|
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 656 B After Width: | Height: | Size: 656 B |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 818 B After Width: | Height: | Size: 818 B |
Before Width: | Height: | Size: 666 B After Width: | Height: | Size: 666 B |
Before Width: | Height: | Size: 204 B After Width: | Height: | Size: 204 B |
Before Width: | Height: | Size: 665 B After Width: | Height: | Size: 665 B |
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 656 B After Width: | Height: | Size: 656 B |
Before Width: | Height: | Size: 921 B After Width: | Height: | Size: 921 B |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
111
widgets/gogame.py
Normal file
|
@ -0,0 +1,111 @@
|
|||
# This is a widget that handles a go game
|
||||
# It needs a goban object, and handles it from beginning to end
|
||||
|
||||
import goban
|
||||
import gtk
|
||||
import lib.options
|
||||
|
||||
|
||||
class GoGame(gtk.HBox):
|
||||
"""
|
||||
This class draws a board and some information about the game (turn, captures, etc).
|
||||
It also handles moves and other operations on the goban.
|
||||
"""
|
||||
|
||||
_img_res = None
|
||||
|
||||
def __init__(self, goban):
|
||||
self.HBox.__init__(self)
|
||||
|
||||
if GoGame._img_res is None:
|
||||
GoGame._img_res = _build_img_res()
|
||||
|
||||
self.goban = goban
|
||||
|
||||
self._init_widgets()
|
||||
|
||||
|
||||
def _init_widgets(self):
|
||||
self.board_area = gtk.DrawingArea()
|
||||
|
||||
info_box = gtk.VBox()
|
||||
info_rows = [gtk.VBox()] * 3
|
||||
to_move_label = gtk.Label('To Move:')
|
||||
black_cap_label = gtk.Label('Black Captures:')
|
||||
white_cap_label = gtk.Label('White Captures:')
|
||||
|
||||
self.to_move_value = gtk.Label()
|
||||
self.black_cap_value = gtk.Label()
|
||||
self.white_cap_value = gtk.Label()
|
||||
|
||||
info_rows[0].pack_start(to_move_label)
|
||||
info_rows[1].pack_start(black_cap_label)
|
||||
info_rows[2].pack_start(white_cap_label)
|
||||
info_rows[0].pack_end(self.to_move_value)
|
||||
info_rows[1].pack_end(self.black_cap_value)
|
||||
info_rows[2].pack_end(self.white_cap_value)
|
||||
|
||||
for row in info_rows:
|
||||
info_box.pack_start(row)
|
||||
|
||||
self.pass_button = gtk.Button('Pass')
|
||||
self.resign_button = gtk.Button('Resign')
|
||||
|
||||
info_box.pack_end(self.pass_button)
|
||||
info_box.pack_end(self.resign_button)
|
||||
|
||||
self.pack_start(self.board_area)
|
||||
self.pack_end(info_box)
|
||||
|
||||
|
||||
def _draw_board(self):
|
||||
gc = self.board_area.get_style().fg_gc[gtk.STATE_NORMAL]
|
||||
|
||||
# gtk.gdk.gdk_pixbuf_scale_simple(img, new_width, new_height, GDK_INTERP_BILINEAR)
|
||||
|
||||
|
||||
|
||||
|
||||
# pixmap.draw_pixbuf(None, pixbuf, 0, 0, x, y, -1, -1, gtk.gdk.RGB_DITHER_NONE, 0, 0)
|
||||
|
||||
|
||||
|
||||
def _magnitude(vector):
|
||||
x,y = vector
|
||||
return math.sqrt(x*x + y*y)
|
||||
|
||||
|
||||
def _build_img_res():
|
||||
ret = {}
|
||||
|
||||
triangle = _load_png('go_t.png')
|
||||
|
||||
ret['w'] = _load_png('go_w.png')
|
||||
ret['wT'] = _load_png('go_w.png')
|
||||
# ret['wT'].blit(triangle, (0,0))
|
||||
ret['wH'] = _load_png('go_w.png', 128)
|
||||
|
||||
ret['b'] = _load_png('go_b.png')
|
||||
ret['bT'] = _load_png('go_b.png')
|
||||
# ret['bT'].blit(triangle, (0,0))
|
||||
ret['bH'] = _load_png('go_b.png', 128)
|
||||
|
||||
circle = _load_png('go_c.png')
|
||||
|
||||
for d in ('u', 'd', 'l', 'r', 'm', 'dl', 'dr', 'ul', 'ur', 'h'):
|
||||
ret[d] = _load_png('go_' + d + '.png')
|
||||
ret[d + 'C'] = _load_png('go_' + d + '.png')
|
||||
# ret[d + 'C'].blit(circle, (0,0))
|
||||
|
||||
return ret
|
||||
|
||||
|
||||
def _load_png(name, alpha=None):
|
||||
""" Load image and return image object"""
|
||||
fullname = os.path.join('ui/res/', name)
|
||||
image = gtk.gdk.pixbuf_new_from_file(fullname)
|
||||
|
||||
# if alpha is not None:
|
||||
# image.set_alpha(alpha)
|
||||
|
||||
return image
|