شعار زيفيرنت

أنشئ لعبتك الأولى باستخدام Python: لعبة الثعبان

التاريخ:

بايثون ممتعة وسهلة الاستخدام. مع وجود مجموعة واسعة من المكتبات المتاحة، بايثون يجعل حياتنا أسهل من خلال تبسيط إنشاء الألعاب والتطبيقات. في هذه المقالة، سنقوم بإنشاء لعبة كلاسيكية من المحتمل أن الكثير منا قد لعبها في مرحلة ما من حياتنا - لعبة الثعبان. إذا لم تجرب هذه اللعبة من قبل، فهذه هي فرصتك لاستكشاف نسختك الخاصة وصياغتها دون الحاجة إلى تثبيت مكتبات ثقيلة على نظامك. كل ما تحتاجه للبدء في إنشاء لعبة الثعبان التي تثير الحنين إلى الماضي هو الفهم الأساسي لـ Python ومحرر البرمجة عبر الإنترنت مثل repl.it.

لعبة الثعبان هي لعبة أركيد كلاسيكية خالدة حيث يتحكم اللاعب في ثعبان ينمو طوله أثناء تناول الطعام. في هذا التنفيذ، دعونا نقسم الكود لفهم كيفية تنظيم اللعبة وكيفية استخدام مكتبة Turtle للرسومات وتفاعل المستخدم.

جدول المحتويات

استخدام رسومات السلحفاة لتطوير الألعاب البسيطة

رسومات السلحفاة مكتبة في بايثون يوفر طريقة ممتعة وتفاعلية لإنشاء الأشكال والرسم على الشاشة والرد على مدخلات المستخدم. غالبًا ما يتم استخدامه للأغراض التعليمية، حيث يقوم بتدريس مفاهيم البرمجة من خلال التعليقات المرئية. يستخدم هذا الرمز السلحفاة لإنشاء عناصر اللعبة مثل الثعبان والطعام وعرض النتيجة.

محرر الترميز عبر الإنترنت: Repl.it

تسمح لك منصة ترميز الويب التي تسمى Repl.it بتطوير التعليمات البرمجية وتشغيلها والتعاون فيها مباشرةً داخل متصفح الويب الخاص بك. وهو يدعم العديد من لغات البرمجة المختلفة ويحتوي على مترجمين ومترجمين فوريين مدمجين بالإضافة إلى ميزات مثل مشاركة التعليمات البرمجية والتحكم في الإصدار والعمل الجماعي. يستخدمه المطورون على نطاق واسع للتعلم والنماذج الأولية السريعة ومشاركة التعليمات البرمجية لأنه سهل الاستخدام ولا يتطلب أي إعداد.

خوارزمية

دعونا نبدأ في بناء لعبتنا الأولى مع بايثون. للقيام بذلك نحن بحاجة إلى اتباع بعض الخطوات أدناه:

إنشاء ملف Repl

الخطوة 1: تثبيت المكتبات اللازمة

يمثل هذا الخطوة الأولى في تطوير اللعبة المعروفة باسم Snake. ومن بين هذه العناصر السلحفاة والعشوائية والوقت.

  • سلحفاة: نحن بحاجة إلى هذه المكتبة لإنشاء الرسومات في لعبتنا. نحن قادرون على التلاعب بحركات الطعام والثعبان على الشاشة ورسمها.
  • عشوائي: لإنشاء مواقع عشوائية للطعام على الشاشة، نستخدم المكتبة العشوائية. وهذا يضمن أنه في كل مرة يتم تناول الطعام فيها يظهر في مكان مختلف.
  • مرة: يتحرك الثعبان بتأخير بسيط بين كل حركة بفضل مكتبة الوقت. وهذا يجعل اللعبة أسهل في التشغيل وأكثر متعة للاعبين.
import turtle
import time
import random

الخطوة 2: إعداد بيئة اللعبة.

يتضمن ذلك تحديد أبعاد الشاشة وإضافة خلفية زرقاء وإضافة تأخير بسيط لضمان سلاسة اللعب. قمنا أيضًا بإعداد متغيرات مثل High_score للاحتفاظ بأعلى الدرجات التي تم الحصول عليها، والنتيجة لمراقبة نتيجة اللاعب، وقطاعات لتتبع جسم الثعبان.

# Initialize the screen
sc = turtle.Screen()
sc.bgcolor("blue")
sc.setup(height=1000, width=1000)
delay = 0.1

# Initialize variables
segments = []
score = 0
high_score = 0
الناتج

الخطوة 3: خلق الثعبان

جسم السلحفاة ذو الشكل المربع يرمز إلى الثعبان. نضع القلم في منتصف الشاشة (goto(0, 100))، ونضبط لونه على اللون الأسود، ثم نرفعه لتجنب رسم الخطوط. تم ضبط اتجاه الثعبان في الأصل على "التوقف"، ويظل ثابتًا حتى يبدأ اللاعب في تحريكه.

# Create the snake
snake = turtle.Turtle()
snake.shape("square")
snake.color("black")
snake.penup()
snake.goto(0, 100)
snake.direction = "stop"
خلق الثعبان

الخطوة 4: وظائف الحركة

نحدد وظائف حركة الثعبان (move()) حسب اتجاهه في تلك اللحظة. تتحكم هذه الوظائف في قدرة الثعبان على التحرك لأعلى ولأسفل ولليسار ولليمين. يحركون رأس الثعبان 20 وحدة في الاتجاه المناسب عندما يطلب منهم ذلك.

# Functions to move the snake
def move():
    if snake.direction == "up":
        y = snake.ycor()
        snake.sety(y + 20)
    if snake.direction == "down":
        y = snake.ycor()
        snake.sety(y - 20)
    if snake.direction == "left":
        x = snake.xcor()
        snake.setx(x - 20)
    if snake.direction == "right":
        x = snake.xcor()
        snake.setx(x + 20)

الخطوة 5: السيطرة على الثعبان

باستخدام sc.listen() وsc.onkey()، نقوم بتكوين المستمعين الرئيسيين للتحكم في الثعبان. تعمل الإجراءات ذات الصلة (go_up()، go_down()، go_left()، go_right()) على تغيير اتجاه الثعبان استجابةً للضغطات على المفاتيح على لوحة المفاتيح w أو s أو a أو d.

# Functions to link with the keys
def go_up():
    snake.direction = "up"

def go_down():
    snake.direction = "down"

def go_left():
    snake.direction = "left"

def go_right():
    snake.direction = "right"

# Listen for key inputs
sc.listen()
sc.onkey(go_up, "w")
sc.onkey(go_down, "s")
sc.onkey(go_left, "a")
sc.onkey(go_right, "d")

الخطوة 6: خلق الغذاء

ويتم تمثيل الطعام بجسم سلحفاة دائري ذو لون أحمر. تم وضعه في البداية عند الإحداثيات (100، 100)، وهو بمثابة هدف يأكله الثعبان. عندما يصطدم الثعبان بالطعام، فإنه "يأكل" الطعام، ويظهر ثعبان جديد في مكان عشوائي.

# Create the food
food = turtle.Turtle()
food.shape("circle")
food.color("red")
food.penup()
food.goto(100, 100)

خلق الغذاء

الخطوة 7: عرض النتيجة

يعرض كائن السلحفاة (القلم) نتيجة اللاعب وأعلى الدرجات التي تم تحقيقها. يتم تحديث هذه المعلومات في كل مرة يأكل فيها الثعبان الطعام.

# Create the score display
pen = turtle.Turtle()
pen.penup()
pen.goto(0, 100)
pen.hideturtle()
pen.write("Score: 0  High Score: 0", align="center", font=("Arial", 30, "normal")
عرض النتيجة

الخطوة 8: حلقة اللعبة الرئيسية

جوهر لعبة Snake هو حلقة اللعبة الأساسية. فهو يدير مدخلات المستخدم، ويحدث الشاشة، ويحرك الثعبان، ويبحث عن الاصطدامات، وينظم كيفية لعب اللعبة. دعونا نفحص الوظائف المحددة لكل قسم من الحلقة الرئيسية بمزيد من التفاصيل:

while True:
    sc.update()  # Update the screen
    move()  # Move the snake
    time.sleep(delay)  # Introduce a slight delay for smooth gameplay
  • sc.update() : يقوم بتحديث الشاشة لتعكس أي تغييرات تم إجراؤها في اللعبة. بدون ذلك، لن يتم تحديث الشاشة، ولن يتمكن اللاعبون من رؤية حركة الثعبان أو تحديث النتيجة.
  • move(): تتحكم هذه الوظيفة في حركة الثعبان بناءً على اتجاهه الحالي. يقوم بتحريك رأس الثعبان بمقدار 20 وحدة في الاتجاه الذي يحدده إدخال اللاعب. يتحرك الثعبان باستمرار في الاتجاه الذي تم توجيهه إليه آخر مرة حتى يغير اللاعب اتجاهه.
  • time.sleep(delay): يقدم تأخيرًا طفيفًا بين كل حركة للثعبان. ال delay تم تعيين المتغير على 0.1 في بداية الكود. الغرض من هذا التأخير هو التحكم في سرعة اللعبة. بدونها، سيتحرك الثعبان بسرعة كبيرة جدًا بحيث يتعذر على اللاعب الرد، مما يجعل اللعبة صعبة اللعب.

تناول الطعام ونمو الثعبان

    if snake.distance(food) < 20:
        x = random.randint(-200, 200)
        y = random.randint(-200, 200)
        food.penup()
        food.goto(x, y)
        food.pendown()

        # Increase the length of the snake
        new_segment = turtle.Turtle()
        new_segment.shape("square")
        new_segment.color("grey")
        new_segment.penup()
        segments.append(new_segment)
        score += 1

        # Update score and high score
        if score > high_score:
            high_score = score
        pen.clear()
        pen.write("Score: {}  High Score: {}".format(score, high_score), align="center", font=("Arial", 30, "normal"))

تناول الطعام

  • عندما رأس الثعبان (snake) يأتي على مسافة 20 وحدة من الطعام (food) فهذا يعني أن الثعبان قد "أكل" الطعام.
  • يتم بعد ذلك إعادة تعيين موضع الطعام إلى موقع عشوائي جديد على الشاشة باستخدام random.randint().
  • يولد هذا الإجراء الوهم بأن الطعام "يظهر مرة أخرى" في أماكن مختلفة في كل مرة يتم تناوله فيها.

نمو جسم الثعبان

  • عندما يأكل الثعبان الطعام، يضيف الكود شريحة جديدة إلى جسم الثعبان ليجعله ينمو.
  • كائن سلحفاة جديد (new_segment) يتم إنشاؤه، والذي يصبح جزءًا من segments قائمة.
  • تقوم هذه القائمة بتتبع جميع الأجزاء التي يتكون منها جسم الثعبان.
  • تتم زيادة درجة اللاعب (score += 1) في كل مرة يأكل الثعبان الطعام.

تحديث النتيجة

  • بعد تناول الطعام وتحديث النتيجة، يتم تحديث عرض النتيجة باستخدام pen موضوع.
  • pen.clear() تقوم الوظيفة بمسح عرض النتيجة السابقة.
  • ثم، تتم كتابة النتيجة المحدثة والنتيجة العالية على الشاشة باستخدام pen.write().

تحريك جسم الثعبان

    for i in range(len(segments) - 1, 0, -1):
        x = segments[i - 1].xcor()
        y = segments[i - 1].ycor()
        segments[i].goto(x, y)

    # Move the first segment to follow the head
    if len(segments) > 0:
        x = snake.xcor()
        y = snake.ycor()
        segments[0].goto(x, y)
  • هذا القسم من الكود مسؤول عن جعل جسم الثعبان يتبع رأسه.
  • ويتكرر من خلال segments القائمة، بدءًا من الجزء الأخير (len(segments) - 1) وصولا إلى الجزء الثاني (0)، نقل كل قطعة إلى موضع القطعة التي أمامها.
  • وهذا يخلق تأثير جسم الثعبان الذي يتبع الرأس أثناء تحركه.

تحديث الجزء الأول (الرأس)

  • بعد تحريك كافة أجزاء الجسم، يتم تحديث موضع الجزء الأول (الرأس) ليتناسب مع الوضع الحالي للثعبان (snake).
  • وهذا يضمن أن يستمر رأس الثعبان في قيادة الجسم أثناء حركته.

ملاحظة النهاية

يوفر هذا الكود بنية أساسية للعبة Snake باستخدام مكتبة رسومات Turtle. تتضمن اللعبة التحكم في الثعبان ليأكل الطعام وينمو لفترة أطول مع تجنب الاصطدام بالجدران وذيله. إنه مشروع مبتدئ رائع للتعرف على مفاهيم تطوير الألعاب وبرمجة Python الأساسية والعمل مع مدخلات المستخدم والرسومات. لا تتردد في تخصيص هذا الرمز وتوسيعه لإضافة ميزات مثل اكتشاف الاصطدام أو زيادة الصعوبة أو إضافة مستويات لجعل لعبة Snake الخاصة بك أكثر إثارة!

إذا كنت تريد معرفة المزيد عن لغة بايثون، فقم بالتسجيل في موقعنا دورة بايثون مجانية.

اقرأ أيضًا المزيد من مقالاتنا المتعلقة ببايثون هنا:

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة