Advertisement
gorskaja2019

Untitled

May 8th, 2019
237
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.68 KB | None | 0 0
  1. from tkinter import*
  2. from random import *
  3. from time import *
  4. from tkinter import simpledialog
  5.  
  6. #считали данные
  7. results = {}
  8. file = open('records.txt','r',encoding='utf-8')
  9. for line in file:
  10. line = line.rstrip() #line = 'allena,10'
  11. people, score = line.split(',') # 'allena' '10'
  12. results[people] = score
  13. file.close()
  14.  
  15. def f(x):
  16. return x[1]
  17.  
  18. class Ball:
  19. def __init__(self, canvas, paddle, color):
  20. self.canvas = canvas
  21. self.paddle = paddle
  22. self.id = canvas.create_oval(10,10,25,25,fill=color)
  23. self.canvas.move(self.id, 225, 40)
  24. starts = [-3, -2, -1, 1, 2, 3]
  25. shuffle(starts)
  26. self.x = choice(starts)
  27. self.y = choice(starts)
  28. self.hit_bottom = False
  29. self.koef = 1
  30.  
  31. def draw(self):
  32. global lives
  33. self.canvas.move(self.id, self.x, self.y)
  34. (x1, y1, x2, y2) = self.canvas.coords(self.id)
  35. if x2 >= self.canvas.winfo_width() or x1 <= 0:
  36. self.x *= -1
  37. if y1 <= 0:
  38. self.y *= -1
  39. if y2 >= self.canvas.winfo_height():
  40. self.hit_bottom = True
  41. lives -= 1
  42. self.canvas.itemconfigure(lives_text, text = 'Жизней: '+str(lives))
  43. if self.hit_paddle():
  44. self.y *= -1 * self.koef
  45.  
  46. def hit_paddle(self):
  47. global score
  48. (x1, y1, x2, y2) = self.canvas.coords(self.id)
  49. (A1, B1, A2, B2) = self.canvas.coords(self.paddle.id)
  50. if x1 >= A1 and x2 <= A2 and y2 >= B1 and y2 <= B2:
  51. if (x1 >= A1 and x2 <= (2*A1+A2)/3) or (x1 >= (A1+2*A2)/3 and x2 <= A2):
  52. self.koef = 1.3
  53. score += 1
  54. self.canvas.itemconfigure(score_text, text = 'Счет: '+str(score))
  55. return True
  56.  
  57. class Paddle:
  58. def __init__(self, canvas, color):
  59. self.canvas = canvas
  60. self.id = canvas.create_rectangle(0, 0, 100, 15, fill = color)
  61. self.canvas.move(self.id, 200, 300)
  62. self.x = 0
  63. self.canvas.bind_all('<Left>', self.move_left)
  64. self.canvas.bind_all('<Right>', self.move_right)
  65.  
  66. def draw(self):
  67. self.canvas.move(self.id, self.x, 0)
  68. (x1, y1, x2, y2) = self.canvas.coords(self.id)
  69. if x1 <= 0 or x2 >= self.canvas.winfo_width():
  70. self.x *= -1
  71. self.canvas.move(self.id, 5*self.x, 0)
  72.  
  73.  
  74. def move_left(self, event):
  75. self.x = -4
  76. #self.canvas.move(self.id, -2, 0)
  77.  
  78. def move_right(self, event):
  79. self.x = 4
  80. #self.canvas.move(self.id, 2, 0)
  81.  
  82.  
  83. root = Tk()
  84. root.title('Пинг-понг')
  85. canvas = Canvas(width = 500, height = 400, bg = 'deepskyblue')
  86. canvas.pack()
  87. score = 0
  88. lives = 3
  89. score_text = canvas.create_text(10,10,anchor = 'nw', font = 'Verdana 18', fill = 'darkblue', text = 'Счет: '+str(score))
  90. lives_text = canvas.create_text(500-10,10,anchor = 'ne', font = 'Verdana 18', fill = 'darkblue', text = 'Жизней: '+str(lives))
  91.  
  92. HarryPotter = Paddle(canvas, 'orange')
  93.  
  94. root.update()
  95.  
  96. balls = []
  97. for i in range(lives):
  98. R = '%02x'%randint(0,255)
  99. G = '%02x'%randint(0,255)
  100. B = '%02x'%randint(0,255)
  101. color = '#'+R+G+B
  102. ball = Ball(canvas, HarryPotter, color)
  103. balls.append(ball)
  104.  
  105. def on_click(event):
  106. while True:
  107. if lives > 0:
  108. for ball in balls:
  109. if ball.hit_bottom == False:
  110. ball.draw()
  111. HarryPotter.draw()
  112. else:
  113. people = simpledialog.askstring('Сохраним результат','Ваше имя?')
  114. if people in results:
  115. if int(results[people]) < score:
  116. results[people] = str(score)
  117. else:
  118. results[people] = str(score)
  119. file = open('records.txt','a',encoding='utf-8')
  120. file.write(people+','+str(score)+'\n')
  121. file.close()
  122. A = list(results.items())
  123. A.sort(key = f, reverse = True)
  124. canvas.create_text(200,200,anchor='c',font='20',fill='red',text='Лучшие результаты:')
  125. canvas.create_text(200,230,anchor='c',font='20',fill='blue',text=A[0])
  126. canvas.create_text(200,260,anchor='c',font='20',fill='blue',text=A[1])
  127. canvas.create_text(200,290,anchor='c',font='20',fill='blue',text=A[2])
  128. canvas.unbind('<Button-1>')
  129. break
  130. #canvas.create_text(250,200,anchor = 'c', font = 'Verdana 36', fill = 'red', text = 'Конец игры!')
  131. root.update_idletasks()
  132. root.update()
  133. sleep(0.02)
  134. canvas.bind('<Button-1>', on_click)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement