[Tutor] Lights game
Ismael Garrido
ismaelgf at adinet.com.uy
Sun Jan 16 08:30:14 CET 2005
Hello list.
I'd really appreciate any comments, particulary regarding style
corrections. I'm a newbie...
Thanks!
Ismael
import random
import tkMessageBox
from Tkinter import *
class GUI:
def __init__(self):
self._crearGUI()
def _crearGUI(self):
self.root = Tk()
self.root.title("Lights")
self.botones = [[0,0,0],[0,0,0],[0,0,0]]
for i in range(3):
for j in range(3):
action = lambda n=i, m=j: self._accion(n,m)
self.botones[i][j] = Button(self.root, height=5,
width=10, command=action)
self.botones[i][j].grid(row=i, column=j, padx= 4, pady=4)
self._updateBotones()
self.root.mainloop()
def _accion(self, i, j):
self._click(i, j)
try:
self._checkWin()
except ValueError:
tkMessageBox.showinfo(title = "You won!", message = "You
rock, kid!")
if True == tkMessageBox.askyesno(title="What shall we do?",
message="Play another?"):
self.root.destroy()
lights.__init__() ## Is this... too ugly? Is there a
beter way?
self.__init__()
else:
self.root.destroy()
def _updateBotones(self):
for i in range(3):
for j in range(3):
if lights.tablero[i][j] == True:
self.botones[i][j].configure(bg="red")
else:
self.botones[i][j].configure(bg="grey")
def _click(self, i, j):
lights.click(i,j)
self._updateBotones()
def _checkWin(self):
conteo = 0
for i in range(3):
for j in range(3):
if lights.tablero[i][j] == True: conteo +=1
if conteo == 9:
print "GANO"
raise ValueError
return
class Luces:
def __init__(self):
self.tablero = [[0,0,0],[0,0,0],[0,0,0]]
self._hacerTablero()
def _hacerTablero(self):
for i in range(3):
for j in range(3):
self.tablero[i][j] = not random.randint(0,1)
def _cambiarCelda(self, i, j):
self.tablero[i][j] = not self.tablero[i][j]
def _descartarNegativos(self, n):
if n < 0:
raise IndexError
return n
def click(self, i,j):
self._cambiarCelda(i,j)
try:
self._cambiarCelda(self._descartarNegativos(i-1), j)
except IndexError:
pass
try:
self._cambiarCelda(self._descartarNegativos(i+1), j)
except IndexError:
pass
try:
self._cambiarCelda(i, self._descartarNegativos(j-1))
except IndexError:
pass
try:
self._cambiarCelda(i, self._descartarNegativos(j+1))
except IndexError:
pass
if __name__ == '__main__':
lights = Luces()
lightsGUI = GUI()
More information about the Tutor
mailing list