ראשית – מספר דגשים:
א. יש לבצע חלוקה לפונקציות.
ב. יש לבצע הפרדה בין פונקציות המבצעות חישובים לבין פונקציות המציגות מידע. כלומר פונקציה המבצעת חישוב לא תציג את תוצאת החישוב.
ג. נכון יהיה להשתמש במטריצה המכילה את ערכי הלוח (3X3). החישובים רצים על המטריצה, הצעדים נכתבים במטריצה, ההצגה פשוט מציגה את המטריצה.
ד. המשתמש מיוצג ע"י X והמחשב ע"י O. המשתמש תמיד מתחיל.
הכוונה לבניית המערכת:
א. בניית Enum המכיל שלושה קבועים: תא ריק (שווה ל-0), תא המכיל X והמייצג את המשתמש (שווה ל-1), תא המכיל O והמייצג את המחשב (שווה ל-2).
ב. בניית מטריצה בגודל 3X3 מסוג ה-Enum הנ"ל. על המטריצה להכיל בתור התחלה רק קבועים מסוג תא ריק. אם קבוע זה יהיה שווה לאפס, הוא אוטומטית יהיה בכל התאים.
ג. בניית פונקציה המקבלת את המטריצה ומציגה אותה על המסך. תא המכיל X יציג X, תא המכיל O יציג O, תא ריק יציג מספר רץ בכדי שהמשתמש ידע להכניס מספר המייצג את התא הזה.
ד. בניית פונקציה המבקשת מהמשתמש להכניס מיקום (לדוגמה מספר בין 1 ל-9 המייצג את תאי המטריצה) ומחזירה את המיקום שהוא הכניס.
ה. בניית פונקציה המקבלת את המטריצה ואת המיקום שהמשתמש הכניס, ומכניסה למיקום זה X המייצג את המשתמש.
ו. בניית פונקציה המקבלת את המטריצה ומחזירה את המיקום הנכון ביותר עבור המחשב. על פונקציה זו לבדוק האם היא יכולה לנצח ע"י הנוהל הבא:
· בדיקה ראשונה: האם יש שני O בשורה או בטור או באלכסון וניתן להכניס O נוסף באותה שורה או באותו טור או באותו אלכסון (כלומר התא הבא הינו ריק) וכך לנצח את המשתמש. אם כן – להחזיר מהפונקציה את המיקום הזה של התא הריק. אם לא – לעבור לבדיקה השנייה.
· בדיקה שנייה: האם המשתמש יכול לנצח בשלב הבא עקב כך שיש לו שני X בשורה או בטור או באלכסון והוא יכול להכניס X נוסף באותה שורה או באותו טור או באותו אלכסון (כלומר התא הבא הינו ריק) וכך לנצח את המחשב. אם כן – יש לחסום אותו ולכן יש להחזיר מהפונקציה את המיקום הזה של התא הריק. אם לא – לעבור לבדיקה השלישית.
· בדיקה שלישית: מציאת מיקום רנדומלי המכיל תא ריק במטריצה והחזרת מיקום זה.
ז. בניית פונקציה המקבלת את המטריצה ואת המיקום שהמחשב מצא ומכניסה למיקום זה O המייצג את המחשב.
ח. בניית פונקציה המקבלת את המטריצה ומחזירה true אם המשתמש ניצח, אחרת מחזירה false.
ט. בניית פונקציה המקבלת את המטריצה ומחזירה true אם המחשב ניצח, אחרת מחזירה false.
י. בניית פונקציה המקבלת את המטריצה ומחזירה true אם אין יותר תאים ריקים (אם אף אחד לא ניצח – זה אומר שהמצב הינו תיקו), אחרת מחזירה false.
יא. בניית פונקציה המבצעת את התורות עצמן:
· מנקה את המסך ומציגה את המטריצה (סעיף ג').
· מבקשת מהמשתמש מיקום (סעיף ד').
· מעדכנת את המטריצה במיקום שהמשתמש הכניס (סעיף ה').
· מנקה את המסך ומציגה את המטריצה כך שניתן לראות היכן המשתמש הכניס X (סעיף ג').
· בודקת האם המשתמש ניצח (סעיף ח'). אם כן – הצגת הודעה מתאימה וסיום המשחק. אם לא:
· בודקת האם יש תיקו (סעיף י'). אם כן – הצגת הודעה מתאימה וסיום המשחק. אם לא:
· מחשבת את הצעד הבא של המחשב (סעיף ו').
· מעדכנת את המטריצה (סעיף ז').
· בודקת האם המחשב ניצח (סעיף ט') . אם כן – הצגת הודעה מתאימה וסיום המשחק. אם לא:
· חזרה להתחלת הלולאה בו היא מנקה את המסך ומציגה את המטריצה.
בהצלחה 😊