From 670508261bb693c5e11da4a24b08c3cb80964153 Mon Sep 17 00:00:00 2001 From: Tanguy Deleplanque Date: Tue, 15 Jul 2025 17:43:03 +0200 Subject: [PATCH] day 21 - pong WIP --- 021/ball.py | 27 ++++++++++++++++++++++ 021/game.py | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++ 021/main.py | 9 ++++++++ 021/paddle.py | 17 ++++++++++++++ 4 files changed, 115 insertions(+) create mode 100644 021/ball.py create mode 100644 021/game.py create mode 100644 021/main.py create mode 100644 021/paddle.py diff --git a/021/ball.py b/021/ball.py new file mode 100644 index 0000000..7f09e45 --- /dev/null +++ b/021/ball.py @@ -0,0 +1,27 @@ +from turtle import Turtle +import random + +class Ball(Turtle): + def __init__(self): + super().__init__() + self.shape("circle") + self.color("white") + self.pu() + + self.angle = random.randint(0,45) + self.angle = 50 + 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 = -self.angle + self.setheading(self.angle) + diff --git a/021/game.py b/021/game.py new file mode 100644 index 0000000..1561fa8 --- /dev/null +++ b/021/game.py @@ -0,0 +1,62 @@ +from turtle import Turtle, Screen +from paddle import Paddle +from ball import Ball + +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.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 abs(self.ball.xcor()) >= 400: + self.game_on = False + + if abs(self.ball.ycor()) > 280: + self.ball.bounce_wall() + + print(self.ball.ycor()) + + 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() + \ No newline at end of file diff --git a/021/main.py b/021/main.py new file mode 100644 index 0000000..7518736 --- /dev/null +++ b/021/main.py @@ -0,0 +1,9 @@ +from game import GameManager +from paddle import Paddle +import time + +game = GameManager() +while game.game_on: + game.game_round() + time.sleep(0.1) +game.screen.exitonclick() \ No newline at end of file diff --git a/021/paddle.py b/021/paddle.py new file mode 100644 index 0000000..b011677 --- /dev/null +++ b/021/paddle.py @@ -0,0 +1,17 @@ +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 up(self): + self.goto(x=self.xcor(), y=self.ycor()+20) + + def down(self): + self.goto(x=self.xcor(), y=self.ycor()-20) \ No newline at end of file