class Buscaminas(QtGui.QWidget): def __init__(self, n, minas): # con "n" se genera una matriz de nxn super(Buscaminas, self).__init__() self.n = n self.minas = minas self.partida = Partida(n, minas) ":::COMPLETAR:::" self.initUI() def initUI(self): ":::COMPLETAR:::" def buttonClickedLeft(self): ":::COMPLETAR:::" def apretar_boton(self, posicion): # Posición como una tupla (x, y) "Esta funcion devuelve la cantidad de minas alrededor de un espacio" "No tiene ninguna relación con lo que sucederá en la UI" boton = self.partida.botones[posicion] return self.partida.clickear(boton) def notificar(self, mensaje): ":::COMPLETAR:::" "Debe notificar a traves de un label cuando muera o sobreviva"
class Buscaminas(QtGui.QWidget): def __init__(self, n, minas): # con "n" se genera una matriz de nxn super(Buscaminas, self).__init__() self.n = n self.minas = minas self.partida = Partida(n, minas) ":::COMPLETAR:::" self.dicc = dict() self.apretados = 0 self.initUI() self.seguir = True def initUI(self): grid = QtGui.QGridLayout() self.setLayout(grid) for i in range(self.n): for j in range(self.n): button = QtGui.QPushButton(' ') self.dicc[button] = (i, j) button.setFixedSize(50, 50) grid.addWidget(button, i, j) button.clicked.connect(self.buttonClickedLeft) self.label = QtGui.QLabel("Comenzo el juego") grid.addWidget(self.label, self.n+1, 0, 1, self.n+1) self.setWindowTitle('Buscaminas') self.show() def buttonClickedLeft(self): sender = self.sender() if self.seguir: if sender.text() == ' ': tupla = self.dicc[sender] numero = self.apretar_boton(tupla) sender.setText(numero) if numero == "X": self.notificar("Moriste") self.seguir = False else: self.apretados += 1 if self.n**2 - self.apretados == self.minas: self.notificar("Ganaste") self.seguir = False else: self.notificar("Sigues vivo aun") def apretar_boton(self, posicion): # Posición como una tupla (x, y) "Esta funcion devuelve la cantidad de minas alrededor de un espacio" "No tiene ninguna relación con lo que sucederá en la UI" boton = self.partida.botones[posicion] return self.partida.clickear(boton) def notificar(self, mensaje): ":::COMPLETAR:::" "Debe notificar a traves de un label cuando muera o sobreviva" self.label.setText(mensaje)
class Buscaminas(QtGui.QWidget): def __init__(self, n, minas): # con "n" se genera una matriz de nxn super(Buscaminas, self).__init__() self.n = n self.minas = minas self.partida = Partida(n, minas) # posiciones = [(i, j) for i in range(self.n) for j in range(self.n)] self.botones = dict() ":::COMPLETAR:::" self.initUI() def initUI(self): self.setWindowTitle('Buscaminas') self.setGeometry(200, 100, 400, 500) grilla = QtGui.QGridLayout() self.setLayout(grilla) for posicion in [(i, j) for i in range(self.n) for j in range(self.n)]: boton = QtGui.QPushButton() boton.setFixedSize(50, 50) boton.clicked.connect(self.buttonClickedLeft) self.botones.update({boton: posicion}) grilla.addWidget(boton, *posicion) self.label = QtGui.QLabel('', self) self.label.move(0, 0) self.label.setFixedSize(200, 60) def buttonClickedLeft(self): sender = self.sender() posicion = self.botones[sender] texto = self.apretar_boton(posicion) if sender.text() == '': if texto == 'X': sender.setText(texto) self.notificar('El espia ha muerto ') print('hola') else: sender.setText(texto) def apretar_boton(self, posicion): # Posición como una tupla (x, y) "Esta funcion devuelve la cantidad de minas alrededor de un espacio" "No tiene ninguna relación con lo que sucederá en la UI" boton = self.partida.botones[posicion] return self.partida.clickear(boton) def notificar(self, mensaje): self.label.setText(mensaje) "Debe notificar a traves de un label cuando muera o sobreviva"
class Buscaminas(QtGui.QWidget): def __init__(self, n, minas): # con "n" se genera una matriz de nxn super(Buscaminas, self).__init__() self.n = n self.minas = minas self.partida = Partida(n, minas) ":::COMPLETAR:::" self.ya_gano = False self.initUI() def initUI(self): grilla = QtGui.QGridLayout() self.setLayout(grilla) for i in range(self.n): for j in range(self.n): boton = QtGui.QPushButton('') boton.pos = (i, j) # boton.setText(self.apretar_boton(boton.pos)) boton.setFixedSize(50, 50) grilla.addWidget(boton, i, j) boton.clicked.connect(self.buttonClickedLeft) self.label = QtGui.QLabel('', self) grilla.addWidget(self.label, self.n, 0, self.n, self.n) self.setWindowTitle('Vu Chef') self.show() def buttonClickedLeft(self): boton = self.sender() if self.perdedor(): self.notificar('Ya perdiste, no puedes seguir jugando') else: valor = self.apretar_boton(boton.pos) if self.ganador() and not self.ya_gano: self.notificar('Ganaste! Felicitaciones') boton.setText(valor) self.ya_gano = True elif not self.ya_gano: if boton.text() == '': boton.setText(valor) if valor == 'X': self.notificar('Moriste! Pisaste una mina') else: self.notificar('Sigues! Pisaste un lugar seguro') else: self.notificar('Ya ganaste! Puedes retirarte') def apretar_boton(self, posicion): # Posición como una tupla (x, y) "Esta funcion devuelve la cantidad de minas alrededor de un espacio" "No tiene ninguna relación con lo que sucederá en la UI" boton = self.partida.botones[posicion] return self.partida.clickear(boton) def notificar(self, mensaje): ":::COMPLETAR:::" "Debe notificar a traves de un label cuando muera o sobreviva" self.label.setText(mensaje) def ganador(self): botones = (j for i, j in self.partida.botones.items()) seguros = list(filter(lambda x: not x.mina and x.clickeado, botones)) return len(seguros) == self.n**2 - self.minas def perdedor(self): botones = (j for i, j in self.partida.botones.items()) minas = list(filter(lambda x: x.mina and x.clickeado, botones)) return len(minas) != 0