# This is a widget that handles a go game # It needs a goban object, and handles it from beginning to end import os import gtk import goban 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): super(GoGame, self).__init__() 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() # All of this is to create the info box along the right side of the board info_box = gtk.VBox() info_rows = [] for i in range(3): info_rows.append(gtk.VBox()) 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