Guest User

Untitled

a guest
Feb 13th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.44 KB | None | 0 0
  1. from turtle import Turtle, Screen
  2. from random import random, randint
  3. from time import time
  4. import os
  5. import sys
  6. import tkinter.messagebox as tm
  7. import hashlib, uuid
  8. import re
  9. from tkinter import *
  10.  
  11. CURSOR_SIZE = 20
  12.  
  13. user_get = 0
  14.  
  15. radius = 20
  16.  
  17.  
  18.  
  19. class Application(Frame):
  20. def __init__(self, master):
  21. super().__init__(master)
  22.  
  23. self.difficulty = -1
  24.  
  25. self.grid()
  26. self.login = self.create_main()
  27. self.read = None
  28.  
  29.  
  30.  
  31. def changeVariable1(self):
  32. self.difficulty = 12
  33. self.diff()
  34.  
  35. def changeVariable2(self):
  36. self.difficulty = 16
  37. self.diff()
  38.  
  39. def changeVariable3(self):
  40. self.difficulty = 20
  41. self.diff()
  42.  
  43.  
  44. def diff(self):
  45. global radius
  46. if self.difficulty == 12:
  47. radius = (30)
  48. elif self.difficulty == 16:
  49. radius = (20)
  50. elif self.difficulty == 20:
  51. radius = (10)
  52.  
  53.  
  54.  
  55.  
  56. def create_read(self):
  57. read = Toplevel()
  58. read.geometry("%dx%d%+d%+d" % (500, 500, 250, 125))
  59. #diff
  60. Label(read, text="Menu ", font='Helvetica 10 bold').grid(row=0, column=4)
  61. Label(read, text=" ", font='Helvetica 10 bold').grid(row=1, column=1)
  62. Label(read, text="Difficulty: ", font='Helvetica 10 bold').grid(row=3, column=1)
  63.  
  64. Button(read, text="Easy", font='Helvetica 10 bold', command=self.changeVariable1).grid(row=3, column=2)
  65. Button(read, text="Medium", font='Helvetica 10 bold', command=self.changeVariable2).grid(row=3, column=3)
  66. Button(read, text="Hard", font='Helvetica 10 bold', command=self.changeVariable3).grid(row=3, column=4)
  67.  
  68. Label(read, text=" ", font='Helvetica 10 bold').grid(row=4, column=1)
  69.  
  70. #bg colour
  71. Label(read, text="Background Colour: ", font='Helvetica 10 bold').grid(row=5, column=1)
  72.  
  73. Button(read, text="Blue", font='Helvetica 10 bold', bg='dodger Blue', command=self.bgblue).grid(row=5, column=2)
  74. Button(read, text="Cyan", font='Helvetica 10 bold', bg='Cyan', command=self.bgcyan).grid(row=5, column=5)
  75. Button(read, text="Red", font='Helvetica 10 bold', bg='Red', command=self.bgred).grid(row=5, column=3)
  76. Button(read, text="Green", font='Helvetica 10 bold', bg='lime green', command=self.bggreen).grid(row=5, column=4)
  77. Button(read, text="Sea", font='Helvetica 10 bold', bg='seagreen3', command=self.bgsea).grid(row=5, column=6)
  78. Button(read, text="Pink", font='Helvetica 10 bold', bg='deep pink', command=self.bgpink).grid(row=5, column=7)
  79.  
  80.  
  81.  
  82. return read
  83.  
  84.  
  85. def create_main(self):
  86. login = Toplevel()
  87. login.geometry("%dx%d%+d%+d" % (410, 500, 250, 125))
  88.  
  89. Label(login, text="Reflex Login ", font='Helvetica 10 bold').grid(row=0, column=2)
  90. Label(login, text="Username: ", font='Helvetica 10 bold').grid(row=1, column=1)
  91.  
  92. self.user_entry = Entry(login) # USERNAME ENTRY BOX
  93. self.user_entry.grid(row=1, column=2)
  94.  
  95. Label(login, text="Password: ", font='Helvetica 10 bold').grid(row=2, column=1)
  96.  
  97. self.pass_entry = Entry(login, show="●") # PASSWORD ENTRY BOX
  98. self.pass_entry.grid(row=2, column=2)
  99.  
  100. Button(login, text="Sign In", font='Helvetica 10 bold', command=self.logging_in).grid(row=3, column=2)
  101. Button(login, text="Register", font='Helvetica 10 bold', command=self.register).grid(row=4, column=2)
  102.  
  103. Label(login, text=" ", font='Helvetica 10 bold').grid(row=5, column=2)
  104. Label(login, text=" ", font='Helvetica 10 bold').grid(row=6, column=2)
  105.  
  106. # username criteria
  107. Label(login, text="---------------------------------------", font='Helvetica 10 bold').grid(row=6, column=2)
  108. Label(login, text="Username Criteria: ", font='Helvetica 10 bold').grid(row=7, column=2)
  109. Label(login, text="One number 1-9.", font='Helvetica 10').grid(row=8, column=2)
  110. Label(login, text="6-12 characters in length.", font='Helvetica 10').grid(row=9, column=2)
  111. Label(login, text="Include no spaces.", font='Helvetica 10').grid(row=10, column=2)
  112.  
  113. # password criteria
  114. Label(login, text=" ", font='Helvetica 10 bold').grid(row=11, column=2)
  115. Label(login, text="---------------------------------------", font='Helvetica 10 bold').grid(row=11, column=2)
  116. Label(login, text="Password Criteria: ", font='Helvetica 10 bold').grid(row=12, column=2)
  117. Label(login, text="One number 1-9.", font='Helvetica 10').grid(row=13, column=2)
  118. Label(login, text="6-12 characters in length.", font='Helvetica 10').grid(row=14, column=2)
  119. Label(login, text="One uppercase letter and one lowercase letter.", font='Helvetica 10').grid(row=15, column=2)
  120. Label(login, text="One special character [~!@#$%^&*].", font='Helvetica 10').grid(row=16, column=2)
  121. Label(login, text="Include no spaces.", font='Helvetica 10').grid(row=17, column=2)
  122. Label(login, text="---------------------------------------", font='Helvetica 10 bold').grid(row=18, column=2)
  123.  
  124. return login
  125.  
  126. def bgblue(self):
  127. Screen().bgcolor("dodger blue")
  128.  
  129. def bgcyan(self):
  130. Screen().bgcolor("Cyan")
  131.  
  132. def bgred(self):
  133. Screen().bgcolor("red")
  134.  
  135. def bggreen(self):
  136. Screen().bgcolor("lime green")
  137.  
  138. def bggrey(self):
  139. Screen().bgcolor("grey")
  140.  
  141. def bgsea(self):
  142. Screen().bgcolor("Seagreen3")
  143.  
  144. def bgpink(self):
  145. Screen().bgcolor("Deep pink")
  146.  
  147. def logging_in(self):
  148. user_get = self.user_entry.get() # Retrieve Username
  149. pass_get = self.pass_entry.get() # Retrieve Password
  150. hash_object = hashlib.md5(pass_get.encode())
  151.  
  152. for line in open("details.txt", "r").readlines():
  153. login_info = line.split() # Split on the space, and store the results in a list of two strings
  154.  
  155. if user_get == login_info[0] and hash_object.hexdigest() == login_info[1]:
  156. tm.showinfo("Success", 'Login Correct!')
  157. self.login.destroy()
  158. self.read = self.create_read()
  159. return True
  160.  
  161. tm.showerror('Error', 'Login Incorrect')
  162. return False
  163.  
  164. def register(self):
  165. user_get = self.user_entry.get() # Retrieve Username
  166. pass_get = self.pass_entry.get() # Retrieve Password
  167. hash_object = hashlib.md5(pass_get.encode())
  168.  
  169. # validation check
  170. # pass validation
  171. is_valid = False
  172.  
  173. if len(pass_get) < 6 or len(pass_get) > 12:
  174. tm.showerror("Invalid!", 'Password should be between 6 and 12. Try again')
  175. elif not re.search(r"[A-Z]", pass_get):
  176. tm.showerror("Invalid!", 'Password should contain one letter between [A-Z]. Try again')
  177. elif not re.search(r"[a-z]", pass_get):
  178. tm.showerror("Invalid!", 'Password should contain one letter between [a-z]. Try again')
  179. elif not re.search(r"[1-9]", pass_get):
  180. tm.showerror("Invalid!", 'Password should contain one number between [1-9]. Try again')
  181. elif not re.search(r"[~!@#$%^&*]", pass_get):
  182. tm.showerror("Invalid!", 'Password should contain at least one letter in [~!@#$%^&*]. Try again')
  183. elif re.search(r"s", pass_get):
  184. tm.showerror("Invalid!", 'Password should not contain any space. Try again')
  185. else:
  186. is_valid = True
  187.  
  188. # user validation
  189. user_valid = False
  190.  
  191. if len(user_get) < 6 or len(user_get) > 12:
  192. tm.showerror("Invalid!", 'Username should be between 6 and 12. Try again')
  193. elif not re.search(r"[1-9]", user_get):
  194. tm.showerror("Invalid!", 'Username should contain one number between [1-9]. Try again')
  195. elif re.search(r"s", user_get):
  196. tm.showerror("Invalid!", 'Username should not contain any space. Try again')
  197. else:
  198. user_valid = True
  199.  
  200. if is_valid and user_valid:
  201. tm.showinfo("Valid!", 'Username and Password is valid')
  202. file = open('details.txt', 'a+')
  203. file.write(user_get)
  204. file.write(" ")
  205. file.write(hash_object.hexdigest())
  206. file.write("n")
  207. file.close()
  208.  
  209. root = Tk()
  210.  
  211. app = Application(root)
  212.  
  213. root.mainloop()
  214.  
  215.  
  216.  
  217. #reset
  218. reset = int(input("Would you like to continue or start fresh? 1 for fresh start, Any other number for continue: "))
  219.  
  220. if reset == 1:
  221. os.remove('stats.txt')
  222. os.remove('maths.txt')
  223. print("Your previous scores have been deleted")
  224. else:
  225. print("We will keep your previous scores stored.")
  226.  
  227.  
  228. def addscore():
  229. global score
  230. score += 2
  231.  
  232. def deletescore():
  233. global score
  234. score -= 1
  235.  
  236. app.deletescore = deletescore
  237.  
  238. def my_circle(color):
  239.  
  240.  
  241. circle = Turtle('circle', visible=False)
  242. circle.shapesize(radius / CURSOR_SIZE)
  243. circle.color('black', color)
  244.  
  245. circle.penup()
  246.  
  247. while True:
  248. nx = randint(2 * radius - width // 2, width // 2 - radius * 2)
  249. ny = randint(2 * radius - height // 2, height // 2 - radius * 2)
  250.  
  251. circle.goto(nx, ny)
  252.  
  253. for other_radius, other_circle in circles:
  254. if circle.distance(other_circle) < 2 * max(radius, other_radius):
  255. break
  256. else:
  257. break
  258.  
  259. circle.onclick(lambda x,y,t=circle: (circle.hideturtle(), addscore()))
  260. circle.showturtle()
  261.  
  262.  
  263.  
  264. return radius, circle
  265.  
  266. def play():
  267. rgb = (random(), random(), random())
  268.  
  269. timeTaken = time() - startTime
  270.  
  271. circles.append(my_circle(rgb))
  272.  
  273. screen.title('SCORE: {}, TIME LEFT: {}'.format(score, int(round(gameLength - timeTaken, 0))))
  274.  
  275. if time() - startTime > gameLength:
  276. screen.title('FINAL SCORE: {}'.format(score))
  277. screen.onclick(None)
  278. screen.clear()
  279. else:
  280. screen.ontimer(play, 1000 // app.difficulty)
  281.  
  282.  
  283.  
  284. screen = Screen()
  285. screen.title("Reflex Aim Training")
  286.  
  287. width, height = screen.window_width(), screen.window_height()
  288.  
  289. score = 0
  290.  
  291. circles = []
  292.  
  293. gameLength = 30
  294.  
  295. screen.onclick(lambda x, y: deletescore())
  296.  
  297. startTime = time()
  298.  
  299.  
  300. play()
  301.  
  302. screen.mainloop()
  303.  
  304. print ("{} points, Well Done!".format(score))
  305.  
  306. #storingscore
  307.  
  308. file = open('scoreboard.txt', 'r')
  309. name = file.readline()
  310. high_score = int(file.readline())
  311. file.close()
  312.  
  313. plus_score = (score)-(high_score)
  314. minus_score = (high_score)-(score)
  315.  
  316.  
  317. if score > high_score:
  318. file = open('scoreboard.txt', 'w')
  319. file.write(str(user_get) + 'n' + str(score) + 'n' "You beat the previous high score by: "+str(plus_score)+" points!")
  320. file.close()
  321.  
  322. if high_score > score:
  323. file = open('scoreboard.txt', 'w')
  324. file.write(str(user_get) + 'n' + str(score) + 'n' "You missed the high score by: "+str(minus_score)+" points!")
  325. file.close()
  326.  
  327. if score == high_score:
  328. file = open('scoreboard.txt', 'w')
  329. file.write(str(user_get) + 'n' + str(score) + 'n' "You drew with the high score!")
  330. file.close()
  331.  
  332. file = open('stats.txt', 'a+')
  333. file.write('n' + 'Score: ' +str(score))
  334. file.close()
  335.  
  336. numbers = []
  337. with open('stats.txt') as fh:
  338. count = 0
  339. for line in fh:
  340. count += 1
  341. numbers.append(float(line.split()[1]))
  342.  
  343. file = open('maths.txt', 'w+')
  344. file.write('Average Score: ' + str(sum(numbers)/len(numbers)) + "n")
  345. file.write('Maximum Score: ' + str(max(numbers)) + "n")
  346. file.write('Minimum Score: ' + str(min(numbers)) + "n")
  347. maxn = max(numbers)
  348. minn = min(numbers)
  349. rangex = (maxn) - (minn)
  350. file.write('Range of Scores: ' + str(rangex) + "n")
  351.  
  352. l = []
  353.  
  354. with open('stats.txt', 'r') as f:
  355. for i in f:
  356. l.append(int(i.split(':')[1].strip()))
  357.  
  358. import statistics
  359. stdevi = statistics.stdev(l)
  360. file.write('Standard Deviation: ' + str(stdevi) + "n")
  361.  
  362. file.close()
  363.  
  364.  
  365.  
  366.  
  367. ########################################
Add Comment
Please, Sign In to add comment