day 22 (actually, there's no 21) - finished Pong

This commit is contained in:
Tanguy Deleplanque
2025-07-16 12:47:31 +02:00
parent 670508261b
commit 697d53f836
5 changed files with 52 additions and 9 deletions

28
022/ball.py Normal file
View File

@ -0,0 +1,28 @@
from turtle import Turtle
import random
class Ball(Turtle):
def __init__(self):
super().__init__()
self.shape("circle")
self.color("white")
self.speed("fastest")
self.pu()
self.move_speed = 0.1
self.angle = random.randint(0,45)
self.setheading(self.angle)
print(self.angle)
def move(self):
self.forward(20)
def bounce_wall(self):
self.angle = -self.angle
self.setheading(self.angle)
def bounce_paddle(self):
self.angle = 180 - self.angle
self.setheading(self.angle)

85
022/game.py Normal file
View File

@ -0,0 +1,85 @@
from turtle import Turtle, Screen
from paddle import Paddle
from ball import Ball
from score import Score
import time
class GameManager():
BOARD_WIDTH=800
BOARD_HEIGHT=600
def __init__(self):
self.screen = Screen()
self.screen.setup(width=self.BOARD_WIDTH, height=self.BOARD_HEIGHT)
self.screen.bgcolor("black")
self.screen.title("PONG")
self.screen.tracer(0)
self.draw_delimiter()
self.screen.update()
self.game_on = True
self.right_paddle = Paddle(350)
self.left_paddle = Paddle(-370)
self.right_score = Score(30)
self.left_score = Score(-30)
self.ball = Ball()
def draw_delimiter(self):
delimiter = Turtle()
max_y = int(self.BOARD_HEIGHT/2)
delimiter.color("white")
delimiter.shape("square")
delimiter.pen(pensize=3)
delimiter.hideturtle()
delimiter.pu()
delimiter.goto(x=0, y=-max_y)
for i in range(-max_y, max_y, 20):
delimiter.goto(x=0, y=i+10)
delimiter.pu()
delimiter.goto(x=0, y=i+20)
delimiter.pd()
def game_round(self):
self.control_paddle()
self.ball.move()
if self.ball.xcor() > 400:
self.game_on = False
self.left_score.increment()
self.left_score.update()
if self.ball.xcor() < -400:
self.game_on = False
self.right_score.increment()
self.right_score.update()
if self.game_on == False:
self.ball.clear()
self.ball = Ball()
self.right_paddle.reset_position(350)
self.left_paddle.reset_position(-370)
self.game_on = True
if abs(self.ball.ycor()) > 280:
self.ball.bounce_wall()
if (abs(self.ball.xcor() - self.right_paddle.xcor()) <= 20 and abs(self.ball.ycor() - self.right_paddle.ycor()) < 50) or (abs(self.ball.xcor() - self.left_paddle.xcor()) <= 20 and abs(self.ball.ycor() - self.left_paddle.ycor()) < 50):
self.ball.bounce_paddle()
self.ball.move_speed = self.ball.move_speed * 0.1
time.sleep(self.ball.move_speed)
def control_paddle(self):
self.screen.listen()
self.screen.onkey(self.right_paddle.up, "Up")
self.screen.onkey(self.right_paddle.down, "Down")
self.screen.onkey(self.left_paddle.up, "q")
self.screen.onkey(self.left_paddle.down, "w")
self.screen.update()

7
022/main.py Normal file
View File

@ -0,0 +1,7 @@
from game import GameManager
from paddle import Paddle
game = GameManager()
while game.game_on == True:
game.game_round()
game.screen.exitonclick()

20
022/paddle.py Normal file
View File

@ -0,0 +1,20 @@
from turtle import Turtle
class Paddle(Turtle):
def __init__(self, x_pos):
super().__init__()
self.shape("square")
self.shapesize(stretch_wid=5, stretch_len=1)
self.color("white")
self.pu()
self.teleport(x=x_pos, y=0)
def reset_position(self, x_pos):
self.teleport(x=x_pos, y=0)
def up(self):
self.goto(x=self.xcor(), y=self.ycor()+20)
def down(self):
self.goto(x=self.xcor(), y=self.ycor()-20)

18
022/score.py Normal file
View File

@ -0,0 +1,18 @@
from turtle import Turtle
class Score(Turtle):
def __init__(self, x_pos):
super().__init__()
self.score = 0
self.color("white")
self.hideturtle()
self.pu()
self.goto(x=x_pos, y=270)
self.write(self.score, move=False, align='center', font=('Arial', 24, 'normal'))
def increment(self):
self.score += 1
def update(self):
self.clear()
self.write(self.score, move=False, align='center', font=('Arial', 24, 'normal'))