
كيفية برمجة لعبة الثعبان باستخدام Python : دليل شامل
تعتبر لعبة الثعبان من الألعاب الكلاسيكية والبسيطة التي أسرت قلوب الكثيرين.
إذا كنت مهتمًا بتعلم كيفية برمجة لعبة الثعبان باستخدام Python، فهذا الدليل
الشامل سيأخذك خطوة بخطوة خلال عملية إنشاء هذه اللعبة الممتعة. سنستخدم
مكتبة Pygame القوية لإنشاء واجهة المستخدم الرسومية، وتحريك الثعبان بسلاسة،
والتعامل مع مدخلات المستخدم للتحكم في الثعبان، وإضافة آليات توليد الطعام واكتشاف الاصطدامات.
سنتعلم أيضًا كيف نحفظ النقاط ونعرضها، وأخيرًا، سنستكشف طرق نشر التطبيق
ليتمكن الآخرون من لعب لعبتك. انطلق معنا في هذه الرحلة الشيقة لتعلم كيفية
برمجة لعبة الثعبان باستخدام Python بطريقة ممتعة وتفاعلية.
خطوات برمجة لعبة الثعبان باستخدام Python
الخطوة 1: إعداد بيئة التطوير وتثبيت Pygame
تأكد من تثبيت Python على جهازك. ثم قم بتثبيت مكتبة Pygame باستخدام pip:
pip install pygame
--
* أنشئ ملف Python جديدًا باسم snake_game.py.
الخطوة 2: تهيئة Pygame وإعداد النافذة
في ملف snake_game.py، ابدأ باستيراد مكتبة Pygame
وتهيئة وحداتها، ثم قم بإعداد نافذة اللعبة:
Python
import pygameimport randomimport time
pygame.init()
# أبعاد النافذةscreen_width = 600screen_height = 480screen = pygame.display.set_mode((screen_width, screen_height))pygame.display.set_caption("لعبة الثعبان")
# الألوانblack = pygame.Color(0, 0, 0)white = pygame.Color(255, 255, 255)red = pygame.Color(255, 0, 0)green = pygame.Color(0, 255, 0)
# سرعة اللعبةgame_speed = 15
# حجم قطعة الثعبانsnake_block_size = 10
--
الخطوة 3: تعريف دالة رسم الثعبان
لتمثيل الثعبان على الشاشة، قم بإنشاء دالة ترسم قطع الثعبان :
Python
def draw_snake(snake_block_size, snake_list):
for block in snake_list:
pygame.draw.rect(screen, green, [block[0], block[1], snake_block_size, snake_block_size])
--
الخطوة 4: تعريف دالة عرض النتيجة
لعرض النتيجة الحالية للاعب، قم بإنشاء دالة تعرض النص على الشاشة:
Python
font_style = pygame.font.SysFont(None, 30)
def display_score(score):
value = font_style.render("النقاط: " + str(score), True, white)
screen.blit(value, [0, 0])
--
الخطوة 5: الحلقة الرئيسية للعبة
هذه هي الدالة التي ستحتوي على منطق اللعبة الرئيسي :
Python
def game_loop(): game_over = False game_close = False
# إحداثيات بداية الثعبان x1 = screen_width / 2 y1 = screen_height / 2
# تغيير إحداثيات الثعبان x1_change = 0 y1_change = 0
# قائمة بأجزاء الثعبان snake_list = [] snake_length = 1
# موقع الطعام foodx = round(random.randrange(0, screen_width - snake_block_size) / 10.0) * 10.0 foody = round(random.randrange(0, screen_height - snake_block_size) / 10.0) * 10.0
clock = pygame.time.Clock()
while not game_over:
while game_close == True: screen.fill(black) message = font_style.render("لقد خسرت! اضغط Q-خروج أو C-لعب مجددًا", True, red) screen.blit(message, [screen_width / 6, screen_height / 3]) pygame.display.update()
for event in pygame.event.get(): if event.type == pygame.KEYDOWN: if event.key == pygame.K_q: game_over = True game_close = False if event.key == pygame.K_c: game_loop()
for event in pygame.event.get(): if event.type == pygame.QUIT: game_over = True if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: x1_change = -snake_block_size y1_change = 0 elif event.key == pygame.K_RIGHT: x1_change = snake_block_size y1_change = 0 elif event.key == pygame.K_UP: y1_change = -snake_block_size x1_change = 0 elif event.key == pygame.K_DOWN: y1_change = snake_block_size x1_change = 0
# تحديث إحداثيات الثعبان x1 += x1_change y1 += y1_change
# التحقق من حدود الشاشة if x1 >= screen_width or x1 < 0 or y1 >= screen_height or y1 < 0: game_close = True
screen.fill(black) pygame.draw.rect(screen, red, [foodx, foody, snake_block_size, snake_block_size]) snake_head = [] snake_head.append(x1) snake_head.append(y1) snake_list.append(snake_head) if len(snake_list) > snake_length: del snake_list[0]
# التحقق من اصطدام الثعبان بنفسه for x in snake_list[:-1]: if x == snake_head: game_close = True
draw_snake(snake_block_size, snake_list) display_score(snake_length - 1)
pygame.display.update()
# التحقق من أكل الطعام if x1 == foodx and y1 == foody: foodx = round(random.randrange(0, screen_width - snake_block_size) / 10.0) * 10.0 foody = round(random.randrange(0, screen_height - snake_block_size) / 10.0) * 10.0 snake_length += 1
clock.tick(game_speed)
pygame.quit() quit()
# بدء حلقة اللعبةgame_loop()
--
الخطوة 6: حفظ النقاط (تخزين النتيجة)
لحفظ النقاط، يمكنك استخدام ملف بسيط لتخزين أعلى نتيجة.
قم بتعديل دالة game_loop ودالة جديدة لحفظ وقراءة النتيجة :
Python
# ... (بقية الأكواد)
def save_high_score(score): try: with open("high_score.txt", "w") as f: f.write(str(score)) except IOError: print("خطأ في حفظ النتيجة!")
def load_high_score(): try: with open("high_score.txt", "r") as f: return int(f.readline()) except FileNotFoundError: return 0 except ValueError: return 0 except IOError: print("خطأ في قراءة النتيجة!") return 0
def game_loop(): game_over = False game_close = False
# ... (بقية تهيئة اللعبة)
high_score = load_high_score()
while not game_over:
while game_close == True: screen.fill(black) message = font_style.render("لقد خسرت! نقاطك: " + str(snake_length - 1), True, red) screen.blit(message, [screen_width / 6, screen_height / 3 - 30]) high_score_display = font_style.render("أعلى نتيجة: " + str(high_score), True, white) screen.blit(high_score_display, [screen_width / 6, screen_height / 3 + 10]) play_again = font_style.render("اضغط C-لعب مجددًا أو Q-خروج", True, white) screen.blit(play_again, [screen_width / 6, screen_height / 3 + 50]) pygame.display.update()
for event in pygame.event.get(): if event.type == pygame.KEYDOWN: if event.key == pygame.K_q: game_over = True game_close = False if event.key == pygame.K_c: game_loop()
# ... (بقية حلقة اللعبة)
display_score(snake_length - 1) # عرض النتيجة الحالية
pygame.display.update()
if x1 == foodx and y1 == foody: # ... (منطق أكل الطعام) if snake_length - 1 > high_score: save_high_score(snake_length - 1) high_score = snake_length - 1
clock.tick(game_speed)
pygame.quit() quit()
# ... (بقية الأكواد)
--
الخطوة 7: نشر التطبيق
لنشر لعبة Python تعتمد على Pygame، يمكنك اتباع عدة طرق:
1- توزيع الكود المصدري: يمكن للمستخدمين الذين لديهم Python و Pygame
مثبتين تشغيل ملف snake_game.py مباشرة. قم بتضمين تعليمات التشغيل ومتطلبات التثبيت.
2- إنشاء ملف تنفيذي باستخدام PyInstaller: يمكن لـ PyInstaller تجميع
برنامج Python وجميع تبعياته في ملف تنفيذي واحد قابل للتوزيع لأنظمة
تشغيل مختلفة (Windows، macOS، Linux).
* التثبيت :
pip install pyinstaller
--
* إنشاء الملف التنفيذي: انتقل إلى المجلد الذي يحتوي على ملف
snake_game.py وقم بتشغيل:
pyinstaller --onefile snake_game.py
--
سيتم إنشاء الملف التنفيذي في مجلد dist.
3- استخدام cx_Freeze : بديل آخر لـ PyInstaller لإنشاء ملفات تنفيذية.
* التثبيت :
pip install cx_Freeze
--
* إنشاء ملف الإعداد (setup.py): أنشئ ملفًا باسم setup.py في نفس
مجلد snake_game.py بالتعليمات التالية :
Python
import cx_Freeze
import sys
base = None
if sys.platform == "win32":
base = "Console" # أو "Win32GUI" إذا كنت لا تريد نافذة طرفية
cx_Freeze.setup(
name="SnakeGame",
version="0.1",
description="لعبة الثعبان الكلاسيكية",
executables=[cx_Freeze.Executable("snake_game.py", base=base)]
)
--
* بناء الملف التنفيذي :
python setup.py build
--
سيتم إنشاء الملفات القابلة للتوزيع في مجلد build.
4- التوزيع كتطبيق ويب (أكثر تعقيدًا): إذا كنت ترغب في تشغيل اللعبة
في متصفح الويب، فستحتاج إلى استخدام مكتبات مثل PyScript أو
Brython لتحويل Python و Pygame إلى JavaScript، لكن هذا يتطلب جهدًا إضافيًا وتعقيدًا أكبر.
* الخلاصة :
لقد تعلمت الآن كيفية برمجة لعبة الثعبان الكلاسيكية باستخدام Python
ومكتبة Pygame، بدءًا من إنشاء واجهة المستخدم وتحريك الثعبان والتحكم فيه،
وصولًا إلى إضافة الطعام واكتشاف الاصطدامات وحفظ النقاط وعرضها.
وأخيرًا، استكشفت طرق نشر التطبيق ليتمكن الآخرون من الاستمتاع بلعبتك.
يمكنك الآن تطوير هذه اللعبة بإضافة المزيد من الميزات مثل مستويات صعوبة مختلفة،
وأنواع طعام خاصة، وخلفيات متنوعة، والمزيد من التحسينات على واجهة المستخدم.
استمر في التجربة والإبداع!