Lulz-Tigre

Untitled

Apr 27th, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. try:
  2.     from tkinter import *
  3. except:
  4.     from Tkinter import *
  5.  
  6. import random
  7.  
  8. class Application:
  9.     concat = []
  10.     inputList = [] # Gets the input from the keypad and the answer text
  11.     callIf = [True] # Checks if the countdown is at zero and allows other functions to be called when condition is met
  12.     bit = {} # Dictonary that houses the bits
  13.     bitList = [] # List that takes data from the bit dictionary and passes it to the tkinter Labels
  14.     byteCache = '' # Stores the byte so it can be compared to the answerbyte and no errors are made in the comparison
  15.     score = 0 # Keeps the score of when the user gets a byte right
  16.    
  17.     def __init__(self):
  18.        
  19.         master.wm_title("Binary Math") # Sets name of the Window
  20.    
  21.     def countdown(self, number):
  22.        
  23.         number -= 1 # subtracts 1 from number for countdown
  24.        
  25.         self.timeText_n.config(text=number) # Sets text to variable number
  26.        
  27.         if number <=0: # Checks If timer is less than or equal to zero
  28.             self.timeText_n.config(text='Times Up!') # Changes text
  29.             Application.callIf[0] = True # Changes the callIf to false to not let any other functions be calls and not allow user to do things that are not intended
  30.            
  31.             for i in range(0,8): # Sets everything in bitList to 0
  32.                 self.bitList[i] = 0
  33.                
  34.             Application.setText(self) # Sets all the text to 0 of the binaryBoxes
  35.        
  36.         else:  
  37.             master.after(1000, self.countdown, number) # If timer is not less then zero it counts until it is zero
  38.             Application.callIf[0] = False
  39.    
  40.     def randomByte(self):  # Function that randomly creates 8 bits and stores them in the dictionary 'bit' which parses it then sends parsed strings into list 'bitList'
  41.        
  42.         if Application.callIf[0] == True:
  43.            
  44.             try:
  45.                 self.bitList.clear() # Clears anything that may be in the bitList
  46.             except:
  47.                 self.bitList[:]=[]
  48.            
  49.             for i in range(0,8): # Loops that sets dictionary of bit[1-7] then sets bitList[1-7] to the value in each dictionary spot
  50.                 self.bit['bit' + str(i)] = random.randint(0,1)
  51.                 self.bitList.append(str(self.bit['bit' + str(i)]))  
  52.             Application.byteCache = ''.join(self.bitList) # Saves the byte to byteCache to be used later and not cause any unintended errors
  53.             print(self.bit)
  54.             print(self.bitList)
  55.             print(Application.byteCache)
  56.        
  57.     def setText(self):   # Function sets the text when the start button is clicked    
  58.        
  59.         textvar1 = self.bitList[0] # Sets the text of text variable to the 1 or 0 generated in randomByte
  60.         self.binary_text_var1.set(textvar1) # Sets the text to the text variable
  61.         print(str(self.bitList[0]))
  62.        
  63.         textvar2 = self.bitList[1]
  64.         self.binary_text_var2.set(textvar2)
  65.         print(str(self.bitList[1]))
  66.        
  67.         textvar3 = self.bitList[2]
  68.         self.binary_text_var3.set(textvar3)
  69.         print(str(self.bitList[2]))
  70.        
  71.         textvar4 = self.bitList[3]
  72.         self.binary_text_var4.set(textvar4)
  73.         print(str(self.bitList[3]))
  74.        
  75.         textvar5 = self.bitList[4]
  76.         self.binary_text_var5.set(textvar5)
  77.         print(str(self.bitList[4]))
  78.        
  79.         textvar6 = self.bitList[5]
  80.         self.binary_text_var6.set(textvar6)
  81.         print(str(self.bitList[5]))
  82.        
  83.         textvar7 = self.bitList[6]
  84.         self.binary_text_var7.set(textvar7)
  85.         print(str(self.bitList[6]))
  86.        
  87.         textvar8 = self.bitList[7]
  88.         self.binary_text_var8.set(textvar8)
  89.         print(str(self.bitList[7]))
  90.        
  91.     def callFunctions(self): # Calls on both randomByte and setText functions
  92.        
  93.         Application.randomByte(self)
  94.         Application.setText(self)
  95.        
  96.         if Application.callIf[0] == True: # Calls if countdown has already reached 0
  97.             Application.countdown(self, 6)
  98.                  
  99.     def inputFunctions(self, button):
  100.        
  101.         if Application.callIf[0] == True: # Only lets input if countdown is equal to 0
  102.      
  103.             Application.inputList.append(button)
  104.             self.concat = ''.join(Application.inputList) # Concatenates the numbers in the inputList to a single number
  105.             self.buttonNumber = self.concat # Sets buttonNumber equal to the joined numbers
  106.             self.answerText.config(text=self.buttonNumber) # Sets the text to the buttonNumber
  107.        
  108.     def clearInput(self): # Allows the input to be cleared with the clear button
  109.        
  110.         try:
  111.             Application.inputList.clear() #Clerars the inputList
  112.         except:
  113.             self.inputList[:] = []
  114.        
  115.         self.buttonNumber = '0' # Sets buttonNumber to an empty string
  116.         self.answerText.config(text=self.buttonNumber) # Sets the texty to the empt y string
  117.        
  118.     def enterButton(self):
  119.        
  120.         fullByte = int(Application.byteCache, 2) # Grabs the fullbyte from the byteCache
  121.         answerByte = self.concat # Sets answerByte to the concatenated number
  122.         print(fullByte)
  123.         print(answerByte )
  124.        
  125.         if fullByte == int(answerByte): # Checks if the answer is the same as the binary number shown on display
  126.             Application.score += 1 # Adds score plus 1
  127.             self.scoreText.config(text='Score:' + str(Application.score)) # Sets text of score
  128.            
  129.             Application.callFunctions(self) # Calls on function to allow another byte to be solved by the user
  130.        
  131.    
  132.     '''def toolBar(self, master): # Creates the toolbar as well as the dropdown menu
  133.        
  134.        self.selectionMenu = Menu(master)
  135.        master.config(menu=self.selectionMenu)
  136.            
  137.        self.menuParams = Menu(self.selectionMenu)
  138.        self.selectionMenu.add_cascade(label='Options', menu=self.menuParams)
  139.        self.menuParams.add_command(label='About')'''
  140.        
  141.     def restartGame(self): # Allows user to restart game if stuck on problem
  142.    
  143.         Application.score = 0 # Sets score back to zero
  144.         self.scoreText.config(text='Score:' + str(Application.score)) # Sets text to zero
  145.        
  146.         Application.clearInput(self) # Clears the input
  147.        
  148.         for i in range(0,8): # Clears the list
  149.                 self.bitList[i] = 0
  150.                
  151.         Application.setText(self) # sets text for boxes back to zero
  152.    
  153.    
  154.     def topElements(self, master): # Creates the top elements such as the top frame and the time text for when the timer counts down for a visual
  155.        
  156.         self.topFrame = Frame(master) # Frame that houses the top elements
  157.         self.topFrame.grid(row=0, column = 0, sticky='w')
  158.  
  159.         self.timeText = Label(self.topFrame, text='Time:')
  160.         self.timeText.grid()
  161.        
  162.         self.timeText_n = Label(self.topFrame, text=0)
  163.         self.timeText_n.grid(row=0, column=1)
  164.        
  165.         self.topFrame_Clear = Frame(master)
  166.         self.topFrame_Clear.grid(row=0, sticky='e')
  167.        
  168.         self.clearButton = Button(self.topFrame_Clear, text='Clear', command=lambda : Application.clearInput(self))
  169.         self.clearButton.grid()
  170.        
  171.     def binaryBox_frame(self, master): # Creates the textboxes that show the binary numbers
  172.      
  173.         self.binaryFrame = Frame(master) # Frame that houses the binary Elements
  174.         self.binaryFrame.grid(row=1)
  175.              
  176.         self.binary_text_var1 = StringVar() # binary text variable set as object from tkinter
  177.         self.binary_text_var1.set('0') # Sets default of 0
  178.         self.binaryLabel1 = Label(self.binaryFrame, textvariable=self.binary_text_var1, borderwidth=5, relief='ridge',)
  179.         self.binaryLabel1.grid(row=0, column=0)
  180.         self.binaryLabel1.config(font=('Courier', 25)) # Size and font type of the text
  181.        
  182.         self.binary_text_var2 = StringVar()
  183.         self.binary_text_var2.set('0')
  184.         self.binaryLabel2 = Label(self.binaryFrame, textvariable=self.binary_text_var2, borderwidth=5, relief='ridge')
  185.         self.binaryLabel2.grid(row=0, column=1)
  186.         self.binaryLabel2.config(font=('Courier', 25))
  187.        
  188.         self.binary_text_var3 = StringVar()
  189.         self.binary_text_var3.set('0')
  190.         self.binaryLabel3 = Label(self.binaryFrame, textvariable=self.binary_text_var3, borderwidth=5, relief='ridge')
  191.         self.binaryLabel3.grid(row=0, column=2)
  192.         self.binaryLabel3.config(font=('Courier', 25))
  193.        
  194.         self.binary_text_var4 = StringVar()
  195.         self.binary_text_var4.set('0')
  196.         self.binaryLabel4 = Label(self.binaryFrame, textvariable=self.binary_text_var4, borderwidth=5, relief='ridge')
  197.         self.binaryLabel4.grid(row=0, column=3)
  198.         self.binaryLabel4.config(font=('Courier', 25))
  199.        
  200.         self.binary_text_var5 = StringVar()
  201.         self.binary_text_var5.set('0')
  202.         self.binaryLabel5 = Label(self.binaryFrame, textvariable=self.binary_text_var5, borderwidth=5, relief='ridge')
  203.         self.binaryLabel5.grid(row=0, column=4)
  204.         self.binaryLabel5.config(font=('Courier', 25))
  205.        
  206.         self.binary_text_var6 = StringVar()
  207.         self.binary_text_var6.set('0')
  208.         self.binaryLabel6 = Label(self.binaryFrame, textvariable=self.binary_text_var6, borderwidth=5, relief='ridge')
  209.         self.binaryLabel6.grid(row=0, column=5)
  210.         self.binaryLabel6.config(font=('Courier', 25))
  211.          
  212.         self.binary_text_var7 = StringVar()
  213.         self.binary_text_var7.set('0')
  214.         self.binaryLabel7 = Label(self.binaryFrame, textvariable=self.binary_text_var7, borderwidth=5, relief='ridge')
  215.         self.binaryLabel7.grid(row=0, column=6)
  216.         self.binaryLabel7.config(font=('Courier', 25))
  217.            
  218.         self.binary_text_var8 = StringVar()
  219.         self.binary_text_var8.set('0')
  220.         self.binaryLabel8 = Label(self.binaryFrame, textvariable=self.binary_text_var8, borderwidth=5, relief='ridge')
  221.         self.binaryLabel8.grid(row=0, column=7)
  222.         self.binaryLabel8.config(font=('Courier', 25))
  223.        
  224.     def bottomElements(self, master): # Creates the bottom elements such as the keypad and start and enter buttons
  225.        
  226.         self.bottomFrame = Frame(master)
  227.         self.bottomFrame.grid(row=2)
  228.        
  229.         self.answerText = Label(self.bottomFrame, text='', height=1, width=20, bg='white', relief='ridge')
  230.         self.answerText.grid(row=0, column=4, columnspan=5, pady=5)
  231.        
  232.         self.button1= Button(self.bottomFrame, text = 1, height=2, width=5, command= lambda : Application.inputFunctions(self, '1'))
  233.         self.button1.grid(row=1, column=5, sticky='e')
  234.        
  235.         self.button2 = Button(self.bottomFrame, text = 2, height=2, width=5, command= lambda : Application.inputFunctions(self, '2'))
  236.         self.button2.grid(row=1, column=6)
  237.        
  238.         self.button3 = Button(self.bottomFrame, text = 3, height=2, width=5, command= lambda : Application.inputFunctions(self, '3'))
  239.         self.button3.grid(row=1, column=7, sticky='w')
  240.        
  241.         self.button4 = Button(self.bottomFrame, text = 4, height=2, width=5, command= lambda : Application.inputFunctions(self, '4'))
  242.         self.button4.grid(row=2, column=5, sticky='e')
  243.        
  244.         self.button5 = Button(self.bottomFrame, text = 5, height=2, width=5, command= lambda : Application.inputFunctions(self, '5'))
  245.         self.button5.grid(row=2, column=6)
  246.        
  247.         self.button6 = Button(self.bottomFrame, text = 6, height=2, width=5, command= lambda : Application.inputFunctions(self, '6'))
  248.         self.button6.grid(row=2, column=7, sticky='w')
  249.        
  250.         self.button7 = Button(self.bottomFrame, text = 7, height=2, width=5, command= lambda : Application.inputFunctions(self, '7'))
  251.         self.button7.grid(row=3, column=5, sticky='e')
  252.        
  253.         self.button8 = Button(self.bottomFrame, text = 8, height=2, width=5, command= lambda : Application.inputFunctions(self, '8'))
  254.         self.button8.grid(row=3, column=6)
  255.        
  256.         self.button9 = Button(self.bottomFrame, text = 9, height=2, width=5, command= lambda : Application.inputFunctions(self, '9'))
  257.         self.button9.grid(row=3, column=7, sticky='w')
  258.        
  259.         self.buttonStart = Button(self.bottomFrame, text = 'Start', height=2, width=5, command= lambda : Application.callFunctions(self))
  260.         self.buttonStart.grid(row=4, column=5, sticky='e')
  261.        
  262.         self.button0 = Button(self.bottomFrame, text = 0, height=2, width=5, command= lambda : Application.inputFunctions(self, '0'))
  263.         self.button0.grid(row=4, column=6)
  264.        
  265.         self.buttonEnter = Button(self.bottomFrame, text = 'Enter', height=2, width=5, command= lambda : Application.enterButton(self))
  266.         self.buttonEnter.grid(row=4, column=7, sticky='w')
  267.        
  268.         self.scoreText = Label(master, text='Score:')
  269.         self.scoreText.grid(row=2, column=0, stick=W+S)
  270.        
  271.         restartButton = Button(master, text = 'Restart', height=1, width=4, command= lambda : Application.restartGame(self))
  272.         restartButton.grid(row=2, column=0, sticky=E+S)
  273.        
  274. # Code below are objects that call on the functions in the class to use in tkinter for the GUI  
  275.        
  276. master = Tk()
  277.  
  278. binaryGame = Application()
  279.  
  280. '''binaryGame.toolBar(master)'''
  281.  
  282. binaryGame.topElements(master)
  283.  
  284. binaryGame.binaryBox_frame(master)
  285.  
  286. binaryGame.bottomElements(master)
  287.  
  288. master.mainloop()
Add Comment
Please, Sign In to add comment