Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from turtle import Turtle, Screen
- from random import random, randint
- from time import time
- import os
- import sys
- import tkinter.messagebox as tm
- import hashlib, uuid
- import re
- from tkinter import *
- CURSOR_SIZE = 20
- user_get = 0
- radius = 20
- class Application(Frame):
- def __init__(self, master):
- super().__init__(master)
- self.difficulty = -1
- self.grid()
- self.login = self.create_main()
- self.read = None
- def changeVariable1(self):
- self.difficulty = 12
- self.diff()
- def changeVariable2(self):
- self.difficulty = 16
- self.diff()
- def changeVariable3(self):
- self.difficulty = 20
- self.diff()
- def diff(self):
- global radius
- if self.difficulty == 12:
- radius = (30)
- elif self.difficulty == 16:
- radius = (20)
- elif self.difficulty == 20:
- radius = (10)
- def create_read(self):
- read = Toplevel()
- read.geometry("%dx%d%+d%+d" % (500, 500, 250, 125))
- #diff
- Label(read, text="Menu ", font='Helvetica 10 bold').grid(row=0, column=4)
- Label(read, text=" ", font='Helvetica 10 bold').grid(row=1, column=1)
- Label(read, text="Difficulty: ", font='Helvetica 10 bold').grid(row=3, column=1)
- Button(read, text="Easy", font='Helvetica 10 bold', command=self.changeVariable1).grid(row=3, column=2)
- Button(read, text="Medium", font='Helvetica 10 bold', command=self.changeVariable2).grid(row=3, column=3)
- Button(read, text="Hard", font='Helvetica 10 bold', command=self.changeVariable3).grid(row=3, column=4)
- Label(read, text=" ", font='Helvetica 10 bold').grid(row=4, column=1)
- #bg colour
- Label(read, text="Background Colour: ", font='Helvetica 10 bold').grid(row=5, column=1)
- Button(read, text="Blue", font='Helvetica 10 bold', bg='dodger Blue', command=self.bgblue).grid(row=5, column=2)
- Button(read, text="Cyan", font='Helvetica 10 bold', bg='Cyan', command=self.bgcyan).grid(row=5, column=5)
- Button(read, text="Red", font='Helvetica 10 bold', bg='Red', command=self.bgred).grid(row=5, column=3)
- Button(read, text="Green", font='Helvetica 10 bold', bg='lime green', command=self.bggreen).grid(row=5, column=4)
- Button(read, text="Sea", font='Helvetica 10 bold', bg='seagreen3', command=self.bgsea).grid(row=5, column=6)
- Button(read, text="Pink", font='Helvetica 10 bold', bg='deep pink', command=self.bgpink).grid(row=5, column=7)
- return read
- def create_main(self):
- login = Toplevel()
- login.geometry("%dx%d%+d%+d" % (410, 500, 250, 125))
- Label(login, text="Reflex Login ", font='Helvetica 10 bold').grid(row=0, column=2)
- Label(login, text="Username: ", font='Helvetica 10 bold').grid(row=1, column=1)
- self.user_entry = Entry(login) # USERNAME ENTRY BOX
- self.user_entry.grid(row=1, column=2)
- Label(login, text="Password: ", font='Helvetica 10 bold').grid(row=2, column=1)
- self.pass_entry = Entry(login, show="●") # PASSWORD ENTRY BOX
- self.pass_entry.grid(row=2, column=2)
- Button(login, text="Sign In", font='Helvetica 10 bold', command=self.logging_in).grid(row=3, column=2)
- Button(login, text="Register", font='Helvetica 10 bold', command=self.register).grid(row=4, column=2)
- Label(login, text=" ", font='Helvetica 10 bold').grid(row=5, column=2)
- Label(login, text=" ", font='Helvetica 10 bold').grid(row=6, column=2)
- # username criteria
- Label(login, text="---------------------------------------", font='Helvetica 10 bold').grid(row=6, column=2)
- Label(login, text="Username Criteria: ", font='Helvetica 10 bold').grid(row=7, column=2)
- Label(login, text="One number 1-9.", font='Helvetica 10').grid(row=8, column=2)
- Label(login, text="6-12 characters in length.", font='Helvetica 10').grid(row=9, column=2)
- Label(login, text="Include no spaces.", font='Helvetica 10').grid(row=10, column=2)
- # password criteria
- Label(login, text=" ", font='Helvetica 10 bold').grid(row=11, column=2)
- Label(login, text="---------------------------------------", font='Helvetica 10 bold').grid(row=11, column=2)
- Label(login, text="Password Criteria: ", font='Helvetica 10 bold').grid(row=12, column=2)
- Label(login, text="One number 1-9.", font='Helvetica 10').grid(row=13, column=2)
- Label(login, text="6-12 characters in length.", font='Helvetica 10').grid(row=14, column=2)
- Label(login, text="One uppercase letter and one lowercase letter.", font='Helvetica 10').grid(row=15, column=2)
- Label(login, text="One special character [~!@#$%^&*].", font='Helvetica 10').grid(row=16, column=2)
- Label(login, text="Include no spaces.", font='Helvetica 10').grid(row=17, column=2)
- Label(login, text="---------------------------------------", font='Helvetica 10 bold').grid(row=18, column=2)
- return login
- def bgblue(self):
- Screen().bgcolor("dodger blue")
- def bgcyan(self):
- Screen().bgcolor("Cyan")
- def bgred(self):
- Screen().bgcolor("red")
- def bggreen(self):
- Screen().bgcolor("lime green")
- def bggrey(self):
- Screen().bgcolor("grey")
- def bgsea(self):
- Screen().bgcolor("Seagreen3")
- def bgpink(self):
- Screen().bgcolor("Deep pink")
- def logging_in(self):
- user_get = self.user_entry.get() # Retrieve Username
- pass_get = self.pass_entry.get() # Retrieve Password
- hash_object = hashlib.md5(pass_get.encode())
- for line in open("details.txt", "r").readlines():
- login_info = line.split() # Split on the space, and store the results in a list of two strings
- if user_get == login_info[0] and hash_object.hexdigest() == login_info[1]:
- tm.showinfo("Success", 'Login Correct!')
- self.login.destroy()
- self.read = self.create_read()
- return True
- tm.showerror('Error', 'Login Incorrect')
- return False
- def register(self):
- user_get = self.user_entry.get() # Retrieve Username
- pass_get = self.pass_entry.get() # Retrieve Password
- hash_object = hashlib.md5(pass_get.encode())
- # validation check
- # pass validation
- is_valid = False
- if len(pass_get) < 6 or len(pass_get) > 12:
- tm.showerror("Invalid!", 'Password should be between 6 and 12. Try again')
- elif not re.search(r"[A-Z]", pass_get):
- tm.showerror("Invalid!", 'Password should contain one letter between [A-Z]. Try again')
- elif not re.search(r"[a-z]", pass_get):
- tm.showerror("Invalid!", 'Password should contain one letter between [a-z]. Try again')
- elif not re.search(r"[1-9]", pass_get):
- tm.showerror("Invalid!", 'Password should contain one number between [1-9]. Try again')
- elif not re.search(r"[~!@#$%^&*]", pass_get):
- tm.showerror("Invalid!", 'Password should contain at least one letter in [~!@#$%^&*]. Try again')
- elif re.search(r"s", pass_get):
- tm.showerror("Invalid!", 'Password should not contain any space. Try again')
- else:
- is_valid = True
- # user validation
- user_valid = False
- if len(user_get) < 6 or len(user_get) > 12:
- tm.showerror("Invalid!", 'Username should be between 6 and 12. Try again')
- elif not re.search(r"[1-9]", user_get):
- tm.showerror("Invalid!", 'Username should contain one number between [1-9]. Try again')
- elif re.search(r"s", user_get):
- tm.showerror("Invalid!", 'Username should not contain any space. Try again')
- else:
- user_valid = True
- if is_valid and user_valid:
- tm.showinfo("Valid!", 'Username and Password is valid')
- file = open('details.txt', 'a+')
- file.write(user_get)
- file.write(" ")
- file.write(hash_object.hexdigest())
- file.write("n")
- file.close()
- root = Tk()
- app = Application(root)
- root.mainloop()
- #reset
- reset = int(input("Would you like to continue or start fresh? 1 for fresh start, Any other number for continue: "))
- if reset == 1:
- os.remove('stats.txt')
- os.remove('maths.txt')
- print("Your previous scores have been deleted")
- else:
- print("We will keep your previous scores stored.")
- def addscore():
- global score
- score += 2
- def deletescore():
- global score
- score -= 1
- app.deletescore = deletescore
- def my_circle(color):
- circle = Turtle('circle', visible=False)
- circle.shapesize(radius / CURSOR_SIZE)
- circle.color('black', color)
- circle.penup()
- while True:
- nx = randint(2 * radius - width // 2, width // 2 - radius * 2)
- ny = randint(2 * radius - height // 2, height // 2 - radius * 2)
- circle.goto(nx, ny)
- for other_radius, other_circle in circles:
- if circle.distance(other_circle) < 2 * max(radius, other_radius):
- break
- else:
- break
- circle.onclick(lambda x,y,t=circle: (circle.hideturtle(), addscore()))
- circle.showturtle()
- return radius, circle
- def play():
- rgb = (random(), random(), random())
- timeTaken = time() - startTime
- circles.append(my_circle(rgb))
- screen.title('SCORE: {}, TIME LEFT: {}'.format(score, int(round(gameLength - timeTaken, 0))))
- if time() - startTime > gameLength:
- screen.title('FINAL SCORE: {}'.format(score))
- screen.onclick(None)
- screen.clear()
- else:
- screen.ontimer(play, 1000 // app.difficulty)
- screen = Screen()
- screen.title("Reflex Aim Training")
- width, height = screen.window_width(), screen.window_height()
- score = 0
- circles = []
- gameLength = 30
- screen.onclick(lambda x, y: deletescore())
- startTime = time()
- play()
- screen.mainloop()
- print ("{} points, Well Done!".format(score))
- #storingscore
- file = open('scoreboard.txt', 'r')
- name = file.readline()
- high_score = int(file.readline())
- file.close()
- plus_score = (score)-(high_score)
- minus_score = (high_score)-(score)
- if score > high_score:
- file = open('scoreboard.txt', 'w')
- file.write(str(user_get) + 'n' + str(score) + 'n' "You beat the previous high score by: "+str(plus_score)+" points!")
- file.close()
- if high_score > score:
- file = open('scoreboard.txt', 'w')
- file.write(str(user_get) + 'n' + str(score) + 'n' "You missed the high score by: "+str(minus_score)+" points!")
- file.close()
- if score == high_score:
- file = open('scoreboard.txt', 'w')
- file.write(str(user_get) + 'n' + str(score) + 'n' "You drew with the high score!")
- file.close()
- file = open('stats.txt', 'a+')
- file.write('n' + 'Score: ' +str(score))
- file.close()
- numbers = []
- with open('stats.txt') as fh:
- count = 0
- for line in fh:
- count += 1
- numbers.append(float(line.split()[1]))
- file = open('maths.txt', 'w+')
- file.write('Average Score: ' + str(sum(numbers)/len(numbers)) + "n")
- file.write('Maximum Score: ' + str(max(numbers)) + "n")
- file.write('Minimum Score: ' + str(min(numbers)) + "n")
- maxn = max(numbers)
- minn = min(numbers)
- rangex = (maxn) - (minn)
- file.write('Range of Scores: ' + str(rangex) + "n")
- l = []
- with open('stats.txt', 'r') as f:
- for i in f:
- l.append(int(i.split(':')[1].strip()))
- import statistics
- stdevi = statistics.stdev(l)
- file.write('Standard Deviation: ' + str(stdevi) + "n")
- file.close()
- ########################################
Add Comment
Please, Sign In to add comment