كيف تصنع لعبة ثعبان في بايثون

إذا كنت ممن يستمتعون بلعب لعبة الثعبان ، فأنا متأكد من أنك ستجد هذا المقال ممتعًا.

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

يوجد عدد من الطرق لإنشاء هذه اللعبة ويتضمن أحدها استخدام مكتبة Python PyGame وهي مكتبة Python التي نستخدمها لإنشاء الألعاب.

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

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

بالإضافة إلى هذه الوحدة ، سنستخدم أيضًا وحدتين أخريين هما ؛

  • وحدة الوقت – ستتيح لنا هذه الطريقة تتبع عدد الثواني المنقضية منذ الوقت السابق.
  • وحدة عشوائية – تولد أرقامًا بشكل عشوائي في بايثون.

تتضمن الأدوات الأساسية الأخرى التي ستحتاج إلى استخدامها محرر نصوص من اختيارك. سأستخدم VSCode في هذه المقالة. بالطبع ، ستحتاج إلى تثبيت Python 3 على جهازك إذا لم يكن لديك بالفعل. يمكنك أيضًا استخدام مترجم admingate.org.

هذا ينبغي أن يكون متعة!

كيف تعمل لعبة الثعبان

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

يتحكم اللاعب في الثعبان باستخدام أربعة مفاتيح اتجاه مرتبطة بالاتجاه الذي يتجه إليه الثعبان. إذا اصطدم الثعبان بكتلة أو نفسها ، يخسر اللاعب اللعبة.

سوف نتبع الخطوات التالية لتنفيذ هذه اللعبة.

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

قم بإنشاء ملف snakegame.py الذي سنضيف فيه كود التنفيذ.

استيراد الوحدات

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

  كيف تعمل إشعارات التعرض الجديدة لـ COVID-19 لجهاز iPhone الخاص بك

أضف الجزء التالي من التعليمات البرمجية إلى ملف snakegame.py الخاص بك.

import turtle
import random
import time

player_score = 0
highest_score = 0
delay_time = 0.1

إنشاء شاشة عرض اللعبة

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

أضف هذا الرمز إلى ملف بايثون.

# window screen created
wind = turtle.Screen()
wind.title("Snake Maze🐍")
wind.bgcolor("red")

# The screen size
wind.setup(width=600, height=600)


# creating the snake 
snake = turtle.Turtle()
snake.shape("square")
snake.color("black")
snake.penup()
snake.goto(0, 0)
snake.direction = "Stop"

# creating the food
snake_food = turtle.Turtle()
shapes = random.choice('triangle','circle')
snake_food.shape(shapes)
snake_food.color("blue")
snake_food.speed(0)
snake_food.penup()
snake_food.goto(0, 100)

pen = turtle.Turtle()
pen.speed(0)
pen.shape('square')
pen.color('white')
pen.penup()
pen.hideturtle()
pen.goto(0, 250)
pen.write("Your_score: 0 Highest_Score : 0", align="center", 
font=("Arial", 24, "normal"))
turtle.mainloop()

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

تقوم طريقة penup () ببساطة بالتقاط قلم السلحفاة بحيث لا يتم رسم خط أثناء تحرك السلحفاة. تحتوي طريقة goto (x، y) على مواضع إحداثيات تحرك السلحفاة إلى موضع مطلق.

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

من المهم إضافة turtle.mainloop () في نهاية الكود الخاص بك ، والذي سيعرض الشاشة لفترة أطول للسماح للمستخدم بعمل شيء ما على الشاشة.

قم بتشغيل الملف ويجب أن يكون لديك الإخراج التالي:

إعداد مفاتيح الاتجاه للثعبان

هنا ، سنقوم بإعداد مفاتيح محددة توجه الاتجاه الذي سيتحرك فيه الثعبان على الشاشة. سنستخدم حرف “L” للإشارة إلى اليسار ، و “R” لليمين ، و “U” للأعلى ، و “D” للأسفل. سنقوم بتنفيذ هذه التوجيهات باستخدام وظيفة اتجاه السلحفاة التي ندعوها للثعبان.

  كيفية التقاط صور جيدة في المطر (وغيرها من المواقف الرطبة)

أضف مقتطف الشفرة التالي إلى شفرتك.

# Assigning directions
def moveleft():
    if snake.direction != "right":
        snake.direction = "left"

def moveright():
    if snake.direction != "left":
        snake.direction = "right"

def moveup():
    if snake.direction != "down":
        snake.direction = "up"

def movedown():
    if snake.direction != "up":
        snake.direction = "down"

def move():
    if snake.direction == "up":
        coord_y = snake.ycor()
        snake.sety(coord_y+20)

    if snake.direction == "down":
        coord_y = snake.ycor()
        snake.sety(coord_y-20)

    if snake.direction == "right":
        coord_x = snake.xcor()
        snake.setx(coord_x+20)

    if snake.direction == "left":
        coord_x = snake.xcor()
        snake.setx(coord_x-20)

wind.listen()
wind.onkeypress(moveleft, 'L')
wind.onkeypress(moveright, 'R')
wind.onkeypress(moveup, 'U')
wind.onkeypress(movedown, 'D')

تحدد وظيفة move () أعلاه حركة الثعبان في الموضع المحدد ضمن قيمة إحداثي دقيقة.

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

تنفيذ لعبة الثعبان

بعد وضع النظرة الأساسية للعبة الثعبان لدينا ، سيتعين علينا جعل اللعبة في الوقت الفعلي.

سيشمل ذلك ما يلي:

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

أضف باقي هذا الرمز إلى ملف Python الخاص بك.

segments = []

#Implementing the gameplay
while True:
    wind.update()
    if snake.xcor() > 290 or snake.xcor() < -290 or snake.ycor() > 290 or snake.ycor() < -290:
        time.sleep(1)
        snake.goto(0, 0)
        snake.direction = "Stop"
        snake.shape("square")
        snake.color("green")

        for segment in segments:
            segment.goto(1000, 1000)
            segments.clear()
            player_score = 0
            delay_time = 0.1
            pen.clear()
            pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal"))

        if snake.distance(snake_food) < 20:
            coord_x = random.randint(-270, 270)
            coord_y = random.randint(-270, 270)
            snake_food.goto(coord_x, coord_y)

            # Adding segment
            added_segment = turtle.Turtle()
            added_segment.speed(0)
            added_segment.shape("square")
            added_segment.color("white")
            added_segment.penup()
            segments.append(added_segment)
            delay_time -= 0.001
            player_score += 5

            if player_score > highest_score:
                highest_score = player_score
                pen.clear()
                pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal"))

    # checking for collisions
    for i in range(len(segments)-1, 0, -1):
        coord_x = segments[i-1].xcor()
        coord_y = segments[i-1].ycor()
        segments[i].goto(coord_x, coord_y)

    if len(segments) > 0:
        coord_x = snake.xcor()
        coord_y = snake.ycor()
        segments[0].goto(coord_x, coord_y)
    move()

    for segment in segments:
        if segment.distance(snake) < 20:
            time.sleep(1)
            snake.goto(0, 0)
            snake.direction = "stop"
            snake.color('white')
            snake.shape('square')

            for segment in segments:
                segment.goto(1000, 1000)
                segment.clear()
                player_score = 0
                delay_time = 0.1
                pen.clear()
                pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal"))

     time.sleep(delay_time)

turtle.mainloop()

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

  قم بإنشاء قائمة بكل ما تحتاجه لحزمه لرحلتك

بعد أن يجمع الثعبان الطعام دون الاصطدام ، يتم تعيين الطعام في موضع عشوائي ضمن نطاق إحداثيات 270 لحجم الشاشة. في كل مرة يجمع فيها الثعبان الطعام ، تزداد نقاط اللاعب بمقدار 5. عندما يصطدم الثعبان ، يتم تعيين درجة اللاعب على 0 بينما تحتفظ الشاشة بأعلى درجة.

الآن قم بإعادة ملف Python وسترى شاشة السلحفاة الخاصة بك تبدو كما يلي:

الخلاصة 🐍

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

يمكنك أيضًا تجربة لعبة تخمين الأرقام في Python أو كيفية الحصول على بيانات JSON في Python.
استمتع بالبرمجة!