#!/usr/bin/python # author : mirko koenig # 18.9.2000 # released under GPL http://www.gnu.org/copyleft/gpl.html import time from Tkinter import * from random import * class senso: def __init__( self, parent ): self.maxrange = 15 # length of the sequenz self.maxrounds = self.maxrange self.time = [ 0.5, 0.4, 0.3, 0.1 ] # delay times between blinking for each level ############################################################ # make the gui self.frame = Frame( parent ) self.frame.pack() self.levelframe = Frame( parent ) self.levelframe.pack() self.modiframe = Frame( parent ) self.modiframe.pack() ############################################################ # create buttons and status self.btn = [] self.btn.append( Button( self.frame, state="disabled", activebackground='#0000ff', background='#0000bb', width=20, height=10, command=self.btn1 )) self.btn.append( Button( self.frame, state="disabled", activebackground='#ff0000', background='#bb0000', width=20, height=10, command=self.btn2 )) self.btn.append( Button( self.frame, state="disabled", activebackground='#00ff00', background='#00bb00', width=20, height=10, command=self.btn3 )) self.btn.append( Button( self.frame, state="disabled", activebackground='#ffff00', background='#bbbb00', width=20, height=10, command=self.btn4 )) self.btn[0].grid( row=0, column=0 ) self.btn[1].grid( row=0, column=1 ) self.btn[2].grid( row=1, column=0 ) self.btn[3].grid( row=1, column=1 ) ############################################################ # display timelevel radiobuttons Label( self.levelframe, text="Level :" ).grid( row=0, column=0 ) Label( self.levelframe, text="slow" ).grid( row=0, column=1 ) Label( self.levelframe, text="fast" ).grid( row=0, column=9 ) self.timelevel = IntVar() self.rbtn = [] # then the labels with the buttons self.rbtn.append( Radiobutton( self.levelframe, variable=self.timelevel, value=0 ) ) self.rbtn[0].grid( row=0, column=2 ) self.rbtn.append( Radiobutton( self.levelframe, variable=self.timelevel, value=1 ) ) self.rbtn[1].grid( row=0, column=4 ) self.rbtn.append( Radiobutton( self.levelframe, variable=self.timelevel, value=2 ) ) self.rbtn[2].grid( row=0, column=6 ) self.rbtn.append( Radiobutton( self.levelframe, variable=self.timelevel, value=3 ) ) self.rbtn[3].grid( row=0, column=8 ) # default is first level self.rbtn[0].select() ############################################################ # random checkbutton #Label( self.levelframe, text="Random :" ).grid( row=1, column=0 ) self.random = IntVar() self.rndchkbtn = Checkbutton( self.modiframe, text="Random", variable=self.random ) self.rndchkbtn.grid( row=1, column=0 ) self.rndchkbtn.deselect() # default is no random sequenz ############################################################ # brain checkbox #Label( self.levelframe, text="Brain :" ).grid( row=1, column=2 ) self.brain = IntVar() self.brainchkbtn = Checkbutton( self.modiframe, text="Brain", variable=self.brain ) self.brainchkbtn.grid( row=1, column=1 ) self.brainchkbtn.deselect() ############################################################ # start button b1 = Button( self.frame, text="Start", command=self.start ) b1.grid( row=3, column=0, columnspan=2 ) def activate( self, index, delay ): if index == 0: self.btn[index].config( background="#0000ff" ) elif index == 1: self.btn[index].config( background="#ff0000" ) elif index == 2: self.btn[index].config( background="#00ff00" ) elif index ==3: self.btn[index].config( background="#ffff00" ) self.frame.update() time.sleep(delay) def deactivate( self, index, delay ): if index == 0: self.btn[index].config( background="#0000bb" ) elif index == 1: self.btn[index].config( background="#bb0000" ) elif index == 2: self.btn[index].config( background="#00bb00" ) elif index ==3: self.btn[index].config( background="#bbbb00" ) self.frame.update() time.sleep(delay) def playsequenz( self, seqrange, delay ): self.deactivatebtns() # deactivate all btns for x in range(3): self.deactivate( x, 0.0 ) # the last must wait 1 sek, so that the player # is able to see the whole new sequence self.deactivate( 3, 1.0 ) self.activatebtns() i = 1 for x in self.cpusequenz[:seqrange]: self.deactivatebtns() self.activate( x, delay ) if i == seqrange: # no wait after the last highlighting self.deactivate( x, 0.0 ) else: self.deactivate( x, delay ) self.activatebtns() i = i + 1 def start( self ): if self.brain.get() == 1: self.random.set(1) # brain modus needs random self.range = self.maxrange else: self.range = 1 for x in range(4): self.btn[x].config( text="" ) self.deactivate( x, 0.0 ) time.sleep( 0.5 ) # create the cpusequenz self.createsequenz() print self.cpusequenz # to control the sequenz self.round = 1 self.pressedbtns = 1 self.delay = self.time[ self.timelevel.get() ] self.playsequenz( self.range, self.delay ) def createsequenz( self ): posibilities = range(4) self.cpusequenz = [] for x in range( self.maxrange ): self.cpusequenz.append( choice( posibilities ) ) def control( self, btnindex ): if self.cpusequenz[self.pressedbtns - 1] != btnindex: # if pressewd btn is wrong self.gameover() else: if self.pressedbtns == self.range: # are all btns pressed self.pressedbtns = 1 self.round = self.round + 1 if self.brain.get() == 0: self.range = self.round if self.round <= self.maxrounds: # some round to go if self.random.get() == 1: # if selected make new sequenz every time self.createsequenz() self.frame.update() time.sleep(1) # wait before start the next sequenz self.playsequenz( self.range, self.delay ) else: # you did it self.win() else: # wait for the rest self.pressedbtns = self.pressedbtns + 1 def activatebtns( self ): for x in range(4): self.btn[x].config(state='normal') def deactivatebtns( self ): for x in range(4): self.btn[x].config(state='disabled') def win( self ): for index in range(4): self.btn[index].config( background="yellow" ) self.btn[0].config ( text="YOU" ) self.btn[1].config( text="WON" ) self.frame.update() time.sleep(1) for index in range(4): self.btn[index].config( state='disabled' ) def gameover( self ): for index in range(4): self.btn[index].config( background="red" ) self.btn[0].config ( text="GAME" ) self.btn[1].config( text="OVER" ) self.frame.update() time.sleep(1) for index in range(4): self.btn[index].config( state='disabled' ) def btn1( self ): self.control(0) def btn2( self ): self.control(1) def btn3( self ): self.control(2) def btn4( self ): self.control(3) root = Tk() root.title("SENSO") app = senso( root ) root.mainloop()