def __init__(self, master): self.numberOfMines = 10 self.numberOfRows = 10 self.numberOfColumns = 10 self.boardAdjustmentX = 20 self.boardAdjustmentY = 20 self.cellHeight = 30 self.cellWidth = 30 self.game = True self.master = master self.frame = Frame(master) self.board = Mineboard(self.numberOfColumns, self.numberOfRows, self.numberOfMines) self.frame.pack( expand = YES, fill = BOTH ) self.frame.master.title( "Demonstrating Mouse Events" ) self.frame.master.geometry( str(self.boardAdjustmentX * 2 + self.numberOfColumns * self.cellWidth) + "x" + str(self.boardAdjustmentY * 2 + self.numberOfRows * self.cellHeight) ) self.canvas = Canvas(self.frame, width = self.boardAdjustmentX + 1 + self.numberOfColumns * self.cellWidth, height = self.boardAdjustmentY + 1 + self.numberOfRows * self.cellHeight) self.canvas.grid(row=0, column=0, sticky=N+S+E+W) self.update() self.canvas.bind( "<ButtonRelease-1>", self.openCell ) self.canvas.bind( "<ButtonRelease-3>", self.markCell )
class Minefield: def __init__(self, master): self.numberOfMines = 10 self.numberOfRows = 10 self.numberOfColumns = 10 self.boardAdjustmentX = 20 self.boardAdjustmentY = 20 self.cellHeight = 30 self.cellWidth = 30 self.game = True self.master = master self.frame = Frame(master) self.board = Mineboard(self.numberOfColumns, self.numberOfRows, self.numberOfMines) self.frame.pack( expand = YES, fill = BOTH ) self.frame.master.title( "Demonstrating Mouse Events" ) self.frame.master.geometry( str(self.boardAdjustmentX * 2 + self.numberOfColumns * self.cellWidth) + "x" + str(self.boardAdjustmentY * 2 + self.numberOfRows * self.cellHeight) ) self.canvas = Canvas(self.frame, width = self.boardAdjustmentX + 1 + self.numberOfColumns * self.cellWidth, height = self.boardAdjustmentY + 1 + self.numberOfRows * self.cellHeight) self.canvas.grid(row=0, column=0, sticky=N+S+E+W) self.update() self.canvas.bind( "<ButtonRelease-1>", self.openCell ) self.canvas.bind( "<ButtonRelease-3>", self.markCell ) def openCell( self, event ): if not self.game: return x = floor((event.x - 2 - self.boardAdjustmentX) / self.cellWidth) y = floor((event.y - 3 - self.boardAdjustmentY) / self.cellHeight) if x in range(0, self.numberOfColumns) and y in range(0, self.numberOfRows): self.board.open(x, y) self.update() if self.board.nodes[x][y].type == -1: print("Game over, you deaded!") self.game = False def markCell( self, event ): if not self.game: return x = floor((event.x - 2 - self.boardAdjustmentX) / self.cellWidth) y = floor((event.y - 3 - self.boardAdjustmentY) / self.cellHeight) if x in range(0, self.numberOfColumns) and y in range(0, self.numberOfRows): self.board.mark(x, y) self.update() def update(self): for x in range (self.numberOfColumns): for y in range(self.numberOfRows): if not self.board.nodes[x][y].open: self.canvas.create_rectangle(self.boardAdjustmentX + x * self.cellWidth, self.boardAdjustmentY + y * self.cellHeight, self.boardAdjustmentX + (x + 1) * self.cellWidth, self.boardAdjustmentY + (y + 1) * self.cellHeight, fill = "#696969") elif self.board.nodes[x][y].type == -1: self.canvas.create_rectangle(self.boardAdjustmentX + x * self.cellWidth, self.boardAdjustmentY + y * self.cellHeight, self.boardAdjustmentX + (x + 1) * self.cellWidth, self.boardAdjustmentY + (y + 1) * self.cellHeight, fill = "#FF0000") else: self.canvas.create_rectangle(self.boardAdjustmentX + x * self.cellWidth, self.boardAdjustmentY + y * self.cellHeight, self.boardAdjustmentX + (x + 1) * self.cellWidth, self.boardAdjustmentY + (y + 1) * self.cellHeight, fill = "#FFE4B5") for x in range (self.numberOfColumns): for y in range(self.numberOfRows): if self.board.nodes[x][y].open: if self.board.nodes[x][y].type != 0: self.canvas.create_text(self.boardAdjustmentX + x * self.cellWidth + 10, self.boardAdjustmentY + y * self.cellHeight + 10, text = str(self.board.nodes[x][y].type)) elif self.board.nodes[x][y].mark: self.canvas.create_rectangle(self.boardAdjustmentX + x * self.cellWidth + self.cellWidth / 2 - 2, self.boardAdjustmentY + y * self.cellHeight + self.cellHeight / 2 - 2, self.boardAdjustmentX + x * self.cellWidth + self.cellWidth / 2 + 2, self.boardAdjustmentY + y * self.cellHeight + self.cellHeight / 2 + 2, fill = "#FF0000") if self.board.checkBoard(): print ("You won!") self.game = False