ستلعب لعبة إكس أو (X O) أحادية البعد على لوحة تحتوي على صف واحد به 20 خانة.
هناك لاعبان.
يقوم اللاعب الأول بوضع علامة x
في خانة فارغة.
يضع اللاعب الثاني علامة o
. ثم يلعب اللاعب الأول مرة أخرى.
على سبيل المثال:
----------x---------
-------x--o---------
-------xx-o---------
-------xxoo---------
------xxxoo---------
يفوز اللاعب الذي يضع ثلاث علامات خاصة به بجوار بعضها البعض.
مهمتك هي برمجة اللعبة!
اكتب دالة evaluate
تقبل نصا يمثل لوحة لعبة إكس أو أحادية البعد كـ قيمة (argument)
وتعيد حرفًا واحدًا بناءً على حالة اللعبة:
"x"
– فاز اللاعب الذي يستخدم علامات الإكس (Xs) (تحتوي اللوحة على xxx
)"o"
– فاز اللاعب الذي يستخدم علامات الأو (Os) (تحتوي اللوحة على ooo
)"!"
– تعادل (اللوحة ممتلئة ولكن لم يفز أحد)"-"
– استراحة (أي أن اللعبة لم تنته بعد)اكتب دالة (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.
# تُرجع لوحة اللعبة مع العلامة المحددة في الموضع المحدد.
...
اكتب دالة (function) player_move
تقبل نص (string) يمثل لوحة اللعبة ، وتسأل اللاعب (player)
عن الموضع (position) الذي يريد اللعب فيه
وتعيد لوحة اللعبة (game board) المحدثة بحركة اللاعب (player's move). يجب أن ترفض الدالة (function)
الأرقام السالبة أو الكبيرة جدًا أو التحركات إلى موضع مشغول. إذا أدخل المستخدم (user)
قيمة (argument) خاطئة ، يجب أن تسأل الدالة (function) مرة أخرى (للحصول على إجابة صحيحة).
اكتب دالة (function) pc_move
تقبل نص (string) يمثل لوحة اللعبة.
ستختار الدالة (function) موضعًا (position) للعب ، وتعيد
لوحة اللعبة (game board) مع حركة الكمبيوتر (computer's move).
استخدم "إستراتيجية" (strategy) عشوائية بسيطة:
def pc_move(board):
# Returns a game board with the computer's move.
# تُرجع لوحة اللعبة مع حركة الكمبيوتر.
...
اكتب دالة (function) tictactoe_1d
تنشئ نص (string) يمثل لوحة اللعبة (game board) وتستدعي بالتناوب الدالتين (functions) player_move
و
pc_move
حتى يفوز شخص ما أو يتعادل (draws).
لا تنس التحقق من حالة اللعبة (status of the game) بعد كل دور (turn).
تلميح (Hint): تعريف دالة (function) باسم يبدأ برقم غير ممكن. لهذا السبب لا نستخدم اسم الدالة (function name) 1d_tictactoe
.
هل يمكنك التفكير في إستراتيجية (strategy) أفضل لجهاز الكمبيوتر الخاص بك؟ أخبرنا بأفكارك أو حاول برمجتها مباشرة.