حل التحدي الأخير "المستوى التاني" الوحدة الرابعة

شباب دا كود اللعبة ال المستر قال اعملوها :
ف نقطة معرفتش اعملها…
هي ازاي اغير الحجم بشكل متناسق


الملف الرئيسى:

from turtle import Screen
from player import Paddle
from shapes import Shape
import time
from score import Score
window=Screen()
window.bgcolor('black')
window.setup(700,700)
window.title("The challenge")
window.tracer(0)
paddle=Paddle()
segment=Shape()
score=Score()
window.listen()
window.onkey(paddle.go_right,"Right")
window.onkey(paddle.go_left,"Left")
default_sleep=.1
while True:
    window.update()
    time.sleep(default_sleep)
    segment.move()
    # اذا اصطدم بالمضرب
    if segment.ycor() <= -300 and paddle.distance(segment) <= 50:
        if segment.shape() == "turtle" and segment.color()[0] == 'white' :
            score.game_over()
            break
        elif segment.shape() == "circle"  or segment.shape() == 'turtle':
            score.increase_score(1)
        elif segment.shape() == "square":
            score.increase_score(2)
        elif segment.shape() == 'triangle':
            score.score = 0
            score.update_score() 
        segment.appear()
        default_sleep *=.8   # Increase the speed
    # اذا خرج من الاسفل
    if segment.ycor()<=-350:
        segment.appear()
        default_sleep =.1
window.exitonclick()

ملف اللاعب :

from turtle import Turtle
class Paddle(Turtle):
    def __init__(self):
        super().__init__()
        self.penup()
        self.shape('square')
        self.shapesize(1,5)
        self.color('white')
        self.goto(0,-300)
    def go_right(self):
        if self.xcor() < 300 :
            self.goto(self.xcor()+50,self.ycor())
    def go_left(self):
        if self.xcor() > -300 :
            self.goto(self.xcor()-50,self.ycor())

ملف الاشكال

from turtle import Turtle
import random
class Shape(Turtle):
    def __init__(self):
        super().__init__()
        self.penup()
        self.shapes=('circle','square','triangle',"turtle")
        self.colors=('teal','green','white',"dark olive green",'cyan','lavender','dark gray')
        self.appear()
    def appear(self):
        self.shape(random.choice(self.shapes)) # change the shape
        self.color(random.choice(self.colors)) # change the color
        self.goto(random.randint(-300,300),350) # change the postion
        # self.shapesize(1,random.random()*2)
    def move(self):
        self.goto(self.xcor(),self.ycor()-10)

ملف السكور

from turtle import Turtle
class Score(Turtle):
    def __init__(self):
        super().__init__()
        self.score=0
        self.color("white")
        self.penup()
        self.goto(0,300)
        self.hideturtle()
        self.update_score()
    def update_score(self):
        self.clear()
        self.write(self.score,font=('courier',26,'normal'),align='center')
    def increase_score(self,point):
        self.score += point
        self.update_score()
    def game_over(self):
        # self.getscreen().bgcolor('red')
        self.home()
        self.write(f"Game over",font=('courier',32,'normal'),align='center')

نتيجة الكود:


إعجابَين (2)

بالنسبة لتغيير حجم الأشكال بشكل متناسق، يمكنك استخدام الدالة shapesize() مع بعض الحسابات البسيطة لتعديل الحجم بما يتناسب مع نوع الشكل المختار.

في ملف shapes.py، يمكن تعديل الكود كالتالي داخل دالة appear:

def appear(self):
    self.shape(random.choice(self.shapes))  # تغيير الشكل
    self.color(random.choice(self.colors))  # تغيير اللون
    self.goto(random.randint(-300, 300), 350)  # تغيير المكان
    size_factor = random.uniform(0.5, 2)  # عامل عشوائي لتغيير الحجم
    self.shapesize(size_factor, size_factor)  # تعيين حجم الشكل بشكل متناسق

الشرح:

  • استخدمنا random.uniform(0.5, 2) لتحديد قيمة عشوائية بين 0.5 و 2 لتغيير حجم الشكل.
  • استخدمنا shapesize(size_factor, size_factor) لتغيير حجم الشكل بشكل متناسق على المحورين x و y.

هذه الطريقة ستجعل الأشكال تظهر بأحجام مختلفة لكن متناسقة.

4 إعجابات

طب لي استخدمت الميثود uniform() بدلا من اي ميثود اخر مثل random او randint>>>
ال فهمته انها بتاخد ارقام صحيحة او عشوائيه وبتطلع رقم عشوائي عشري صح؟

3 إعجابات

ايوا بالظبط
انا استخدمتها عشان تعطي سلاسة اكثر
انت حر استخدم اي ميثود

3 إعجابات

تمام شكرا اخي ع المعلومة :heart::blush:

3 إعجابات

تجربة رائعة والالوان متناسقة لم اشعر بالانزاعاج من الالوان جميل :ok_hand: :star_struck:

3 إعجابات

شكرا جدا لك ي اخي :heart::face_holding_back_tears:

4 إعجابات

العفو بارك الله فيك :rose:

3 إعجابات

احسنت اخي مشروع جميل ماشاء الله @Abood

بالنسبة لسؤالك عن تغيير الحجم بشكل متناسق فجرب ان تحط متغير يكون فيه قيمة حجم معين وبعدين عندما تعطي الكائن الحجم عطيه هذا المتغير لانه في الطول والعرض راح يكونوا نفس قيمة المتغير زي كذا:

class Food(Turtle):
    def __init__(self):
        super().__init__()
        self.penup()
        self.colors = ['red','blue','white','yellow']
        self.shapes = ['circle','turtle','square','triangle']
        self.size = [1,1.5]
size = random.choice(food.size)
food.shapesize(stretch_len= size , stretch_wid= size)

إعجابَين (2)

اي اخي معاك حق … لكن اي رايك لو خلنااها بداخل الكلاس

(self.size=random.choice([1,1.5]
self.sizeshape(self.size,self.size)
4 إعجابات

مافي مشكلة الي تشوفه مناسب❤️ @Abood
اصلا اخر سطرين من ملف مختلف انا حطيتهم تحت كلاس food بس عشان التوضيح😅

إعجابَين (2)

:joy::joy::joy:


جزاك الله خيرا

3 إعجابات

يعطيك لعافية شي رائع

اخي جرب حط بقلب دالة move
self.left(5)
رح تعطي حركة للعبة اكتر واجمل

بل نسبة لتغيير لحجم بكفي تحط رقم واحد مافي داعي تحط رقمين
(shapesize(random.randint(1,2)

5 إعجابات

شكرا ي اخي وجزاك الله خيرا علي الاضافه :heart:
لكن اذا كتبت ف ميثود ال move إن الشكل يلف يسار بزاوية 5 درجات…اذا كيف ستتحرك !

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

سوف يتحرك الى الاسفل لانك كتبت ycor-10
لاكن سوف تصبح الحركة اجمل عندما يلتف اثناء النزول
:+1:

إعجابَين (2)

سؤال اخي ايا الطرق افضل هذه الطريقة او الطريقة التي استعملتها انت
مع العلم اني قمت بتجربة الطريقتين والاثنين يعملان بشكل جيد

إعجابَين (2)

فهمت ي اخي ما تقصده♥️
وسوف افعلهاا باذن الله
اضافة رائعة

ماشاء الله كودك كويس ورائع جداا :face_holding_back_tears: :heart:
طالما يؤدي ال نفس النتيجة المطلوبة فهو جيد :muscle:

لكن يبقي السؤال
هل الكود مرن وسهل القراءة والتعديل عليه ام لا ؟
ف حالتك
حضرتك ف الكود عامل ٣ ميثودز لزيادة السكور
ف حين إنك ممكن تعمل ميثود واحده تعطيها argument بالسكور ال عاوزه…

بكدا خليت الكود مرن وسهل التعديل عليه
ولو حبيت تغير السكور بعد كدا تقدر تغيرها من مكان واحد بسهولة .
---------&---------
كذلك برضو حاله if
لو كانت nested if
if بداخلها حالة if اخري
if
elif
elif
elif

الكود هيكون سهل القراءة وكمان اقل ف عدد الاسطر …
:heart::heart::heart::heart::heart:

بالنسبة لي فأنا أفضل جدااا أن أجعل الكود الذي اكتبه أن يكون مرن جدا ليسهل فهمه علي من يقرأه ويسهل عليا تعديلة فيما بعد …

بالفعل لقد قمت بالتعديل عليه واضفت بعض السطور
مثل تكبير عرض المضرب عند اكل قطعة كبيرة…وتصغيرة اذا اكل قطعة صغيرة…
ثم اذا كان عرض المضرب صغيره وأكل قطعة كبيرة يخسر
:joy: :joy: :joy:

غير اضافة خليفة للعبة+إضافة صووت عند أكل أحد القطع .

إعجابَين (2)

ممتاز واضح صار شكل لعبة اجمل
وشكرا على موضوع السكور ولله نسيت هل طريقة
عنجد طريقة افضل
ياريت تعلمني كيف ضفت لخلفية ولصوت للعبة

إعجابَين (2)

فعلا جربتها وكانت فكرة رائعة ماشاء الله يعطيك العافية

3 إعجابات

عفوا اخي :heart::heart: نحن هنا نتعلم من بعض :face_holding_back_tears:

اكيد تفضل اخي هذة الطريقة لإضافة خلفية للشاشة

تعلم ميثود جديدة لوضع صورة للشاشة كخلفية

وده مشروع تاني بخلفية آخري

عمل لعبة بسيطة جدا 💪 Simple Game

ودي شرح طريقة تحويل الصوره لاي امتداد آخر

موقع ايقونات لمشاريعك + طريقة تحويلها ل ico - #2 بواسطة Abood

بالنسبة للصوت بإذن الله اول مرجع هنزلها لأني مش ف البيت حاليا…

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