On Jun 28, 8:21 am, iconoclast011 <iconoclast...@gmail.com> wrote: > Fairly new to Python ... Is there a way to efficiently (different from my > brute > force code shown below) to set up a game grid of buttons (ie with pygame) > responding to mouse clicks ? I would want to vary the size of the grid ...
It hasn't been updated for a few years, but I was always impressed by Richard Jones' use of context managers in his withgui, especially his minesweeper example: import random class Cell(object): def __init__(self, i, j, has_bomb): self.i, self.j = i, j self.has_bomb = has_bomb class Board(list): def __init__(self, size, chance=.2): self.size = size self[:] = [[Cell(i, j, random.random() < chance) for i in range(size)] for j in range(size)] def count(self, cell): '''Count the number of bombs near the cell.''' return sum(self[j][i].has_bomb for i in range(max(0, cell.i-1), min(self.size, cell.i +2)) for j in range(max(0, cell.j-1), min(self.size, cell.j+2))) board = Board(20) with gui.canvas(width=320, height=320) as canvas: for column in board: for cell in column: @canvas.image('cover.png', x=cell.i*16, y=cell.j*16) def on_mouse(image, mouse, cell=cell): count = board.count(cell) if cell.has_bomb: image.value = 'bomb.png' print 'GAME OVER!' elif count: image.destroy() canvas.label(str(count), x=cell.i*16+8, y=cell.j*16+8, anchor=center) else: image.destroy() http://www.mechanicalcat.net/richard/log/Python/Something_I_m_working_on.7 https://code.launchpad.net/withgui -- http://mail.python.org/mailman/listinfo/python-list