Python Turtle Graphics تظهر وتختفى بسرعه

فى بايثون على فيجول فى لعبة الثعبان كتبت كل الاكواد الخاصة بالعبه وشاشة العرض بتظهر وتختفى بسرعه ومفيش اخطأ بتظهر وكاتبه فى اخر الكود
()Window.exitonclick
ممكن حل للمشكله

إعجابَين (2)

ارسل صورة للكود مشان تبان المشكلة اكثر

إعجابَين (2)

كانت مشكله فى امتداد المف وكتبته تانى بس المشكله بيظهر شاشة GAME OVER اول ميشتغل الكود

إعجابَين (2)

تأكد من كلمة window الحرف الأول صغير أو كبير!

إعجابَين (2)

صغير windo

إعجاب واحد (1)
  1. الكائن snake:
  • غير معرّف في الكود الموجود بالصورة. تحتاج إلى إنشاء كائن snake باستخدام كلاس أو وظيفة تنشئ ثعبانًا وتتحكم في حركته.
  1. الكائن food:
  • الكود يشير إلى food.appear()، ولكن كائن الطعام غير معرّف أيضًا. تحتاج إلى إنشاء كائن للطعام يُستخدم عند التقاطه.
  1. الكائن score:
  • الكود يشير إلى score.increase_score() وscore.game_over()، لكن كائن النقاط غير موجود. تحتاج إلى تعريف كائن يقوم بعرض النقاط والتحكم في حالة اللعبة.

ماذا تحتاج لإكمال الكود؟

1. إنشاء كائن للثعبان:

  • كائن snake الذي يحتوي على قائمة من المربعات (Segments) ويتحكم في حركتها.

2. إنشاء كائن للطعام:

  • كائن food الذي يتم عرضه في مواقع عشوائية على الشاشة.

3. إنشاء كائن للنقاط:

  • كائن score الذي يعرض النقاط على الشاشة ويظهر رسالة “Game Over” عند انتهاء اللعبة.
from turtle import Screen, Turtle
import random
import time

# --- تعريف كائن الثعبان ---
class Snake:
    def __init__(self):
        self.turtles = []
        self.create_snake()
        self.head = self.turtles[0]

    def create_snake(self):
        for i in range(3):  # إنشاء 3 أجزاء ابتدائية للثعبان
            self.add_segment((-20 * i, 0))

    def add_segment(self, position):
        new_segment = Turtle("square")
        new_segment.color("white")
        new_segment.penup()
        new_segment.goto(position)
        self.turtles.append(new_segment)

    def extend(self):
        # إضافة قطعة جديدة لجسم الثعبان
        self.add_segment(self.turtles[-1].position())

    def move(self):
        for seg_num in range(len(self.turtles) - 1, 0, -1):
            x = self.turtles[seg_num - 1].xcor()
            y = self.turtles[seg_num - 1].ycor()
            self.turtles[seg_num].goto(x, y)
        self.head.forward(20)

    def up(self):
        if self.head.heading() != 270:  # منع الحركة للخلف
            self.head.setheading(90)

    def down(self):
        if self.head.heading() != 90:
            self.head.setheading(270)

    def left(self):
        if self.head.heading() != 0:
            self.head.setheading(180)

    def right(self):
        if self.head.heading() != 180:
            self.head.setheading(0)

# --- تعريف كائن الطعام ---
class Food(Turtle):
    def __init__(self):
        super().__init__()
        self.shape("circle")
        self.color("red")
        self.penup()
        self.speed("fastest")
        self.appear()

    def appear(self):
        x = random.randint(-380, 380)
        y = random.randint(-380, 380)
        self.goto(x, y)

# --- تعريف كائن لوحة النقاط ---
class Scoreboard(Turtle):
    def __init__(self):
        super().__init__()
        self.score = 0
        self.color("white")
        self.penup()
        self.hideturtle()
        self.goto(0, 360)
        self.update_score()

    def update_score(self):
        self.clear()
        self.write(f"Score: {self.score}", align="center", font=("Arial", 24, "normal"))

    def increase_score(self):
        self.score += 1
        self.update_score()

    def game_over(self):
        self.goto(0, 0)
        self.write("Game Over", align="center", font=("Arial", 36, "bold"))

# --- إعداد نافذة اللعبة ---
window = Screen()
window.setup(width=800, height=800)
window.bgcolor("black")
window.title("لعبة الثعبان")
window.tracer(0)  # إيقاف التحديث التلقائي للشاشة

# --- إنشاء الكائنات ---
snake = Snake()  # كائن الثعبان
food = Food()    # كائن الطعام
score = Scoreboard()  # كائن لوحة النقاط

# --- إعداد التحكم بالثعبان ---
window.listen()
window.onkey(snake.up, "Up")
window.onkey(snake.down, "Down")
window.onkey(snake.left, "Left")
window.onkey(snake.right, "Right")

# --- تشغيل اللعبة ---
game_on = True
while game_on:
    window.update()
    time.sleep(0.1)
    snake.move()

    # فحص اصطدام رأس الثعبان بالطعام
    if snake.head.distance(food) < 15:
        food.appear()
        snake.extend()
        score.increase_score()

    # فحص اصطدام رأس الثعبان بجدران الشاشة
    if (
        snake.head.xcor() > 380 or 
        snake.head.xcor() < -380 or 
        snake.head.ycor() > 380 or 
        snake.head.ycor() < -380
    ):
        game_on = False
        score.game_over()

    # فحص اصطدام رأس الثعبان بجسمه
    for segment in snake.turtles[1:]:  # تجاهل الرأس
        if snake.head.distance(segment) < 10:
            game_on = False
            score.game_over()

# إغلاق النافذة عند النقر
window.exitonclick()

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