codesafety_x11repo

Untitled

Apr 27th, 2020
746
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.63 KB | None | 0 0
  1.    
  2. # Описываем класс Ball, который будет отвечать за шарик
  3. class Ball:
  4.     # конструктор — он вызывается в момент создания нового объекта на основе этого класса
  5.     def __init__(self, canvas, paddle, score, color):
  6.         # задаём параметры объекта, которые нам передают в скобках в момент создания
  7.         self.canvas = canvas
  8.         self.paddle = paddle
  9.         self.score = score
  10.         # цвет нужен был для того, чтобы мы им закрасили весь шарик
  11.         # здесь появляется новое свойство id, в котором хранится внутреннее название шарика
  12.         # а ещё командой create_oval мы создаём круг радиусом 15 пикселей и закрашиваем нужным цветом
  13.         self.id = canvas.create_oval(10,10, 25, 25, fill=color)
  14.         # помещаем шарик в точку с координатами 245,100
  15.         self.canvas.move(self.id, 245, 100)
  16.         # задаём список возможных направлений для старта
  17.         starts = [-2, -1, 1, 2]
  18.         # перемешиваем его
  19.         random.shuffle(starts)
  20.         # выбираем первый из перемешанного — это будет вектор движения шарика
  21.         self.x = starts[0]
  22.         # в самом начале он всегда падает вниз, поэтому уменьшаем значение по оси y
  23.         self.y = -2
  24.         # шарик узнаёт свою высоту и ширину
  25.         self.canvas_height = self.canvas.winfo_height()
  26.         self.canvas_width = self.canvas.winfo_width()
  27.         # свойство, которое отвечает за то, достиг шарик дна или нет. Пока не достиг, значение будет False
  28.         self.hit_bottom = False
  29.     # обрабатываем касание платформы, для этого получаем 4 координаты шарика в переменной pos (левая верхняя и правая нижняя точки)
  30.     def hit_paddle(self, pos):
  31.         # получаем кординаты платформы через объект paddle (платформа)
  32.         paddle_pos = self.canvas.coords(self.paddle.id)
  33.         # если координаты касания совпадают с координатами платформы
  34.         if pos[2] >= paddle_pos[0] and pos[0] <= paddle_pos[2]:
  35.             if pos[3] >= paddle_pos[1] and pos[3] <= paddle_pos[3]:
  36.                 # увеличиваем счёт (обработчик этого события будет описан ниже)
  37.                 self.score.hit()
  38.                 # возвращаем метку о том, что мы успешно коснулись
  39.                 return True
  40.         # возвращаем False — касания не было
  41.         return False
  42.     # обрабатываем отрисовку шарика
  43.     def draw(self):
  44.         # передвигаем шарик на заданные координаты x и y
  45.         self.canvas.move(self.id, self.x, self.y)
  46.         # запоминаем новые координаты шарика
  47.         pos = self.canvas.coords(self.id)
  48.         # если шарик падает сверху  
  49.         if pos[1] <= 0:
  50.             # задаём падение на следующем шаге = 2
  51.             self.y = 2
  52.         # если шарик правым нижним углом коснулся дна
  53.         if pos[3] >= self.canvas_height:
  54.             # помечаем это в отдельной переменной
  55.             self.hit_bottom = True
  56.             # выводим сообщение и количество очков
  57.             canvas.create_text(250, 120, text='Вы проиграли', font=('Courier', 30), fill='red')
  58.         # если было касание платформы
  59.         if self.hit_paddle(pos) == True:
  60.             # отправляем шарик наверх
  61.             self.y = -2
  62.         # если коснулись левой стенки
  63.         if pos[0] <= 0:
  64.             # движемся вправо
  65.             self.x = 2
  66.         # если коснулись правой стенки
  67.         if pos[2] >= self.canvas_width:
  68.             # движемся влево
  69.             self.x = -2
Advertisement
Add Comment
Please, Sign In to add comment