لعبة إكس أو (X O) أحادية البعد (One-dimensional tic-tac-toe)

ستلعب لعبة إكس أو (X O) أحادية البعد على لوحة تحتوي على صف واحد به 20 خانة.

هناك لاعبان. يقوم اللاعب الأول بوضع علامة x في خانة فارغة. يضع اللاعب الثاني علامة o. ثم يلعب اللاعب الأول مرة أخرى.

على سبيل المثال:

  1. الدور 1 : ----------x---------
  2. الدور 2 : -------x--o---------
  3. الدور 3 : -------xx-o---------
  4. الدور 4 : -------xxoo---------
  5. الدور 5 : ------xxxoo---------

يفوز اللاعب الذي يضع ثلاث علامات خاصة به بجوار بعضها البعض.

مهمتك هي برمجة اللعبة!

الخطوة 1 (Step 1)

اكتب دالة evaluate تقبل نصا يمثل لوحة لعبة إكس أو أحادية البعد كـ قيمة (argument) وتعيد حرفًا واحدًا بناءً على حالة اللعبة:

  • "x" – فاز اللاعب الذي يستخدم علامات الإكس (Xs) (تحتوي اللوحة على xxx)
  • "o" – فاز اللاعب الذي يستخدم علامات الأو (Os) (تحتوي اللوحة على ooo)
  • "!" – تعادل (اللوحة ممتلئة ولكن لم يفز أحد)
  • "-" – استراحة (أي أن اللعبة لم تنته بعد)

الخطوة 2 (Step 2)

اكتب دالة (function) move تقبل النص (string) الذي يمثل لوحة اللعبة ، ورقم الموضع (position number) (0-19) وعلامة (mark) (x أو o) وتعيد لوحة اللعبة (game board) (أي نص (string) يحتوي على العلامة (mark) المحددة في الموضع (position) المحدد). قد يبدو رأس الدالة (function header) شيئًا كهذا:

def move(board, mark, position):
    # Returns the game board with the given mark in the given position.
    # تُرجع لوحة اللعبة مع العلامة المحددة في الموضع المحدد.
    ...

الخطوة 3 (Step 3)

اكتب دالة (function) player_move تقبل نص (string) يمثل لوحة اللعبة ، وتسأل اللاعب (player) عن الموضع (position) الذي يريد اللعب فيه وتعيد لوحة اللعبة (game board) المحدثة بحركة اللاعب (player's move). يجب أن ترفض الدالة (function) الأرقام السالبة أو الكبيرة جدًا أو التحركات إلى موضع مشغول. إذا أدخل المستخدم (user) قيمة (argument) خاطئة ، يجب أن تسأل الدالة (function) مرة أخرى (للحصول على إجابة صحيحة).

الخطوة 4 (Step 4)

اكتب دالة (function) pc_move تقبل نص (string) يمثل لوحة اللعبة. ستختار الدالة (function) موضعًا (position) للعب ، وتعيد لوحة اللعبة (game board) مع حركة الكمبيوتر (computer's move).
استخدم "إستراتيجية" (strategy) عشوائية بسيطة:

  • حدد رقمًا عشوائيًا (random number) من 0 إلى 19.
  • إذا كان الموضع (position) فارغًا ، ضع علامة الكمبيوتر (computer's mark) هناك.
  • إذا لم يكن كذلك ، كرر من الخطوة الأولى (حدد رقمًا عشوائيًا آخر). يجب أن يبدو رأس الدالة (function header) شيئًا كهذا:
def pc_move(board):
    # Returns a game board with the computer's move.
    # تُرجع لوحة اللعبة مع حركة الكمبيوتر.
    ...

الخطوة 5 (Step 5)

اكتب دالة (function) tictactoe_1d تنشئ نص (string) يمثل لوحة اللعبة (game board) وتستدعي بالتناوب الدالتين (functions) player_move و pc_move حتى يفوز شخص ما أو يتعادل (draws). لا تنس التحقق من حالة اللعبة (status of the game) بعد كل دور (turn).

تلميح (Hint): تعريف دالة (function) باسم يبدأ برقم غير ممكن. لهذا السبب لا نستخدم اسم الدالة (function name) 1d_tictactoe.

الخطوة 6 - اختياري (Step 6 - Optional)

هل يمكنك التفكير في إستراتيجية (strategy) أفضل لجهاز الكمبيوتر الخاص بك؟ أخبرنا بأفكارك أو حاول برمجتها مباشرة.