كيف تصنع لعبة Tic-Tac-Toe في بايثون؟

نشرت: 2021-08-19

دعونا ننشئ لعبة Tic Tac Toe بسيطة في Python. سيساعدك على بناء منطق اللعبة وفهم كيفية هيكلة الكود.

الألعاب هي أحد وسائل الترفيه التي يتمتع بها البشر. يمكننا العثور على أنواع مختلفة من الألعاب على الويب والجوال وسطح المكتب وما إلى ذلك. لسنا هنا لصنع واحدة من تلك الألعاب الثقيلة الآن. سنقوم بإنشاء لعبة CLI tic-tac-toe باستخدام Python.

إذا لم تكن معتادًا على Tic Tac Toe ، فقم بتشغيله بشكل مرئي هنا لفهمه. لا تقلق ، حتى لو لم تفهمه ، فسنراه.

تيك تاك تو

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

يمكنك تخطي القسم الأول إذا كنت تعرف بالفعل كيفية لعب Tic Tac Toe.

لذلك ، دون مزيد من اللغط ، دعنا نتعمق في القسم الأول.

لعب تيك تاك تو

سيكون هناك لاعبان في اللعبة. علامتان تمثلان كل لاعب. العلامات العامة المستخدمة في اللعبة هي X و O. أخيرًا ، سيكون هناك لوحة بها 9 صناديق.

رؤية لوحة tic-tac-toe بصريًا.

مجلس تيك تاك تو
مجلس تيك تاك تو

ستكون طريقة اللعب على النحو التالي.

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

دعونا نرى بعض طرق اللعب بصريا.

لعبة تيك تاك تو وين
لعبة تيك تاك تو وين

يفوز اللاعب X باللعبة في طريقة اللعب المذكورة أعلاه. تملأ جميع المربعات قطريًا بعلامات X. لذلك ، يفوز اللاعب المعني باللعبة.

هناك إجمالي 8 طرق لترتيب نفس العلامة والفوز باللعبة. دعونا نرى كل الترتيبات الثمانية التي يمكنها الفوز باللعبة.

ترتيبات الفوز تيك تاك تو
ترتيبات الفوز تيك تاك تو

وأخيرًا ، يملأ السحب اللوحة دون أي ترتيب رابح. أتمنى أن تفهم كيف تيك تاك تو الآن.

الآن ، حان وقت اللعب بالنسبة لك. يمكنك الذهاب هنا وتشغيلها لفهم طريقة اللعب تمامًا. اتركه إذا كنت قد حصلت عليه بالفعل.

الآن ، حان الوقت لنقل قسم الخوارزمية.

الخوارزمية

سنناقش الآن الخوارزمية لكتابة الكود. ستساعدك هذه الخوارزمية على كتابة التعليمات البرمجية بأي لغة برمجة من اختيارك. دعونا نرى كيف يتم ذلك.

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

قد تكون قادرًا على تصور ما يحدث. لا تقلق ، حتى لو لم تفهمها تمامًا. ستحصل على مزيد من الوضوح بمجرد رؤية الرمز.

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

رمز

اذهب من خلال الكود أدناه.

 import random class TicTacToe: def __init__(self): self.board = [] def create_board(self): for i in range(3): row = [] for j in range(3): row.append('-') self.board.append(row) def get_random_first_player(self): return random.randint(0, 1) def fix_spot(self, row, col, player): self.board[row][col] = player def is_player_win(self, player): win = None n = len(self.board) # checking rows for i in range(n): win = True for j in range(n): if self.board[i][j] != player: win = False break if win: return win # checking columns for i in range(n): win = True for j in range(n): if self.board[j][i] != player: win = False break if win: return win # checking diagonals win = True for i in range(n): if self.board[i][i] != player: win = False break if win: return win win = True for i in range(n): if self.board[i][n - 1 - i] != player: win = False break if win: return win return False for row in self.board: for item in row: if item == '-': return False return True def is_board_filled(self): for row in self.board: for item in row: if item == '-': return False return True def swap_player_turn(self, player): return 'X' if player == 'O' else 'O' def show_board(self): for row in self.board: for item in row: print(item, end=" ") print() def start(self): self.create_board() player = 'X' if self.get_random_first_player() == 1 else 'O' while True: print(f"Player {player} turn") self.show_board() # taking user input row, col = list( map(int, input("Enter row and column numbers to fix spot: ").split())) print() # fixing the spot self.fix_spot(row - 1, col - 1, player) # checking whether current player is won or not if self.is_player_win(player): print(f"Player {player} wins the game!") break # checking whether the game is draw or not if self.is_board_filled(): print("Match Draw!") break # swapping the turn player = self.swap_player_turn(player) # showing the final view of board print() self.show_board() # starting the game tic_tac_toe = TicTacToe() tic_tac_toe.start()

تحقق من إخراج عينة من الكود.

 $ python tic_tac_toe.py Player X turn - - - - - - - - - Enter row and column numbers to fix spot: 1 1 Player O turn X - - - - - - - - Enter row and column numbers to fix spot: 2 1 Player X turn X - - O - - - - - Enter row and column numbers to fix spot: 1 2 Player O turn XX - O - - - - - Enter row and column numbers to fix spot: 1 3 Player X turn XXO O - - - - - Enter row and column numbers to fix spot: 2 2 Player O turn XXO OX - - - - Enter row and column numbers to fix spot: 3 3 Player X turn XXOOX - - - O Enter row and column numbers to fix spot: 3 2 Player X wins the game! XXO OX - - XO

بعض النقاط الرئيسية التي تساعدك على فهم بنية الكود.

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

لا تتردد في تكييف الهيكل وتحسينه بناءً على مشروعك. لا تقتصر هيكلة الكود.

الكلمات الأخيرة

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

ترميز سعيد!

بعد ذلك ، استكشف كيفية إنشاء لعبة تخمين الأرقام واختبار الوحدات باستخدام Python unittest Module.