لعبة ping pong حل تحدي الوحدة مع اضافة امكانية العب مع الكمبيوتر

الملف الرئيس game.py

from turtle import Turtle ,Screen
from paddle import Paddle
from ball import Ball
from score import Score
import time

window = Screen()
window.setup(1000,700)
window.title("Ping Pong")
window.bgcolor("black")
window.tracer(0)
choose = Paddle((-80,125))
window.listen()
window.onkey(choose.choose_1,"1")
window.onkey(choose.choose_2,"2")
game_on = False
choose.choose_masseg() # طباعة صفحة الاختيار
# التحقق من اختيار المستخدم
while True :
    if choose.choose > 0 :
        game_on = True
        choose.clear()
        break
    window.update()
r_paddle = Paddle((460,0))
y_paddle = Paddle((-460,0))
ball = Ball()
r_score = Score((400,300))
y_score = Score((-400,300))
window.onkey(r_paddle.up,"Up")
window.onkey(r_paddle.down,"Down")
# متغير سرعة عصة الكمبيوتر
move = 10
while game_on :
    window.update()
    time.sleep(0.1)
    # حركة الكرة
    ball.goto(ball.xcor() + ball.x_move , ball.ycor() + ball.y_move)
    # العب مع الكمبيوتر
    if choose.choose == 1 :
        if ball.xcor() < 200 :
            if  y_paddle.ycor() < ball.ycor() :
                y_paddle.goto(y_paddle.xcor(),y_paddle.ycor()+move )
            elif y_paddle.ycor() > ball.ycor() :
                y_paddle.goto(y_paddle.xcor(),y_paddle.ycor()-move )
    # العب مع صديق
    else:
        window.onkey(y_paddle.up,"w")
        window.onkey(y_paddle.down,"s")

# تغيير اتجاه الكرة عند التصادم اعلى واسفل
    if ball.ycor() >= 330 or ball.ycor() <= -330 :
        ball.y_move *= -1
# تحقق من اصدام الكرة باالمضرب
    if ( ball.xcor() >= 435 and ball.distance(r_paddle) <= 50 ) or ( ball.xcor() <= -435 and ball.distance(y_paddle) <= 50 ) :
        ball.x_move *= -1
        # زيادة سرعة الكرة
        if ball.x_move > 0 :
            ball.x_move += 1
        else:
            ball.x_move -= 1
        if ball.y_move > 0 :
            ball.y_move += 1
        else:
            ball.y_move -= 1
        # زيادة سرعة عصة الكومبيوتر
        move += 1
# اعادة الكرة الى المنتصف وطباعة السكور و عكس اتجاه الكرة
    if ball.xcor() >= 485 :
        y_score.increase_score_1()
        ball.goto(0,0)
        ball.x_move = -10
        ball.y_move = -10
        move = 10

    elif ball.xcor() <= -485 :
        r_score.increase_score_2()
        ball.goto(0,0)
        ball.x_move = 10
        ball.y_move = 10
        move = 10
        
window.exitonclick()

ملف paddle.py

from turtle import Turtle 

class Paddle(Turtle) :
    def __init__(self,position) :
        super().__init__()
        self.shape("square")
        self.color("white")
        self.penup()
        self.goto(position)
        self.shapesize(5,1)
        self.choose = 0

    def up(self) :
        self.goto(self.xcor(),self.ycor()+30)

    def down(self) :
        self.goto(self.xcor(),self.ycor()-30)

    def choose_1(self) :
        self.choose = 1

    def choose_2(self) :
        self.choose = 2

    def choose_masseg(self) :
        self.color("blue")
        self.hideturtle()
        self.write("️⚽️",align="center", font=("Arial",100,"normal"))
        self.color("white")
        self.goto(0,0)
        self.write(f" للعب مع الكومبيوتر اضغط رقم : 1",align="center", font=("Arial",30,"normal"))
        self.goto(0,-100)
        self.write(f" للعب مع صديقك اضغط رقم : 2",align="center", font=("Arial",30,"normal"))

ملف ball.py

from turtle import Turtle

class Ball(Turtle) :
    def __init__(self) :
        super().__init__()
        self.x_move = +10
        self.y_move = +10
        self.shape("circle")
        self.color("white")
        self.penup()

ملف score.py

from turtle import Turtle

class Score(Turtle) :
    def __init__(self,position):
        super().__init__()
        self.color("white")
        self.penup()
        self.hideturtle()
        self.goto(position)
        self.score_1 = 0
        self.score_2 = 0
        self.update_score_1()
        self.update_score_2()

    def increase_score_1(self) :
        self.score_1 += 1
        self.update_score_1()
    
    def increase_score_2(self) :
        self.score_2 += 1
        self.update_score_2()

    def update_score_1(self) :
        self.clear()
        self.write(f"( Score : {self.score_1} )",align="center", font=("Arial",20,"normal"))

    def update_score_2(self) :
        self.clear()
        self.write(f"( Score : {self.score_2} )",align="center", font=("Arial",20,"normal"))
6 إعجابات

جميل اخي مشاركة رائعة ومميزة ابهرتني :ok_hand:

4 إعجابات

شكرا لك على الكلام الجميل

4 إعجابات

جميل يا صاحبي ماشاء الله عليك
استمر :+1::+1:

4 إعجابات

العفو . . . . . . . . :rose:

4 إعجابات

جميل اللهم بارك استمر ربنا يوفقك

4 إعجابات

اللهم بارك
ابداع :heart_eyes::star_struck::sunglasses:

5 إعجابات

شكرا لك \\\\\\\\

إعجاب واحد (1)

شكرا لك \\\\\\\\\ :kissing_heart:

إعجاب واحد (1)