| 87 | |
| 88 | |
| 89 | class Ball(): |
| 90 | def __init__(self, |
| 91 | center_x: int, |
| 92 | center_y: int, |
| 93 | radius: int, |
| 94 | color: tuple, |
| 95 | display_width: int, |
| 96 | display_high: int, |
| 97 | speed_x: int = 0, |
| 98 | speed_y: int = 0,) -> None: |
| 99 | |
| 100 | self.center_x = center_x |
| 101 | self.center_y = center_y |
| 102 | self.radius = radius |
| 103 | self.speed_x = speed_x |
| 104 | self.speed_y = speed_y |
| 105 | self.color = color |
| 106 | self.display_width = display_width |
| 107 | self.display_high = display_high |
| 108 | |
| 109 | def update_pos(self) -> None: |
| 110 | if self.center_y - self.radius <= 0 or self.center_y + self.radius >= self.display_high: |
| 111 | self.invert_move(invert_y=True) |
| 112 | if self.speed_x != 0: |
| 113 | self.center_x += self.speed_x |
| 114 | if self.speed_y != 0: |
| 115 | self.center_y += self.speed_y |
| 116 | |
| 117 | def set_speed(self, speed_x: int | float, speed_y: int | float) -> None: |
| 118 | if speed_x != 0: |
| 119 | if self.speed_x < 0: |
| 120 | self.speed_x = -speed_x |
| 121 | else: |
| 122 | self.speed_x = speed_x |
| 123 | if speed_y != 0: |
| 124 | if self.speed_y < 0: |
| 125 | self.speed_y = -speed_y |
| 126 | else: |
| 127 | self.speed_y = speed_y |
| 128 | |
| 129 | def invert_move(self, invert_x=False, invert_y=False): |
| 130 | if invert_x: |
| 131 | self.speed_x *= -1 |
| 132 | if invert_y: |
| 133 | self.speed_y *= -1 |
| 134 | |
| 135 | def get_speed(self) -> tuple: |
| 136 | return (self.speed_x, self.speed_y) |
| 137 | |
| 138 | def draw(self, display: pygame.Surface) -> None: |
| 139 | self.surface = display |
| 140 | pygame.draw.circle(self.surface, self.color, |
| 141 | (self.center_x, self.center_y), self.radius) |
| 142 | |
| 143 | def reset(self) -> None: |
| 144 | self.speed_x = 0 |
| 145 | self.speed_y = 0 |
| 146 | self.center_x = self.display_width / 2 |