בשיעור הקודם בנינו את הקוד הבסיסי של המשחק שלנו, ובשיעור הזה נוסיף פיצ'רים חדשים ונשפר את הקוד הקיים.
בואו נזכר בקוד שלנו עד כה:
שכפול קוד#
בקוד הנוכחי שלנו, אנו בונים את מחרוזת current_state
פעמיים: פעם אחת לפני ופעם אחת אחרי שמבקשים את הניחוש של השחקן. זה לא יעיל ומשכפל קוד.
- סבירות מוגברת לבאגים: כאשר קוד משוכפל בפרויקט, יש סיכוי גבוה יותר להכנסת שגיאות. דמיינו לעצמכם תיקון באג/ שינוי קטנטן בחלק אחד של הקוד אבל שוכחים מקטע אחר זהה או דומה. הבאג הזה יימשך בקטע שהתעלמנו ממנו, מה שהופך את בסיס הקוד ללא עקבי ולא אמין. נקודה זו חיונית במיוחד עבור מפתחים זוטרים להבין, מכיוון שהם עלולים לזלזל בהשפעה של השארת קוד כפול במקום.
- קריאה ומורכבות: קוד כפול יכול להקשות על קריאה והבנה של בסיס קוד. עבור מישהו שחדש בקוד או אפילו עבור המחבר המקורי המבקר את הקוד מאוחר יותר, קשה להבין איזה חלק בקוד עושה מה. המורכבות הנוספת הזו יכולה להגדיל את הזמן שלוקח להבין, לעדכן או להרחיב את הקוד. עבור מפתחים זוטרים, התמקדות בכתיבת קוד נקי יכול להיות צעד משמעותי לקראת הפיכתך למתכנת יעיל יותר.
אופטימיזציה של הקוד שלנו#
כדי לבצע אופטימיזציה, נוכל להעביר את בדיקת הסיום למשחק מיד לאחר שנבנה את current_state
בפעם הראשונה.
על ידי כך, אנו מבטלים את הצורך לשכפל קוד.
במבט ראשון, בדיקת סיום המשחק בתחילת התור עשויה להיראות מנוגדת לאינטואיציה. בדרך כלל, אתה מצפה שבדיקת סיום המשחק תהיה בסוף הלולאה, לאחר ביצוע כל הפעולות. עם זאת, במקרה הספציפי הזה, הגיוני לבדוק מיד לאחר שנבנה את current_state
ומכיוון שזו הפעולה הראשונה המודפסת בתחילת כל תור, השחקן רואה זאת כהדפסה ששייכת לתור הקודם.
מצב הפסד#
בואו נוסיף פיצ'ר חדש לקוד שיתחום את כמות הניחושים השגויים של המשתמש. נאתחל משתנה בשם MAX_NUM_MISSES
למספר הניחושים השגויים המקסימלי שאנחנו מאשרים לשחקן לבצע (בגלל שהמספר הזה קבוע לאורך המשחק הוא יהיה constant
- קבוע, ויכתב באותיות גדולות כנהוג). נוסיף משתנה שני שיספור את כמות הניחושים השגויים ונאתחל אותו ל0.
כל פעם שהניחוש של השחקן שגוי, נוסיף 1 למספר הניחושים השגויים ונבדוק האם הגענו למקסימום.
בחירת מילה רנדומלית#
הפיצ'ר האחרון שנוסיף בשביל להשלים את המשחק המלא הוא להוסיף מילה רנדומלית באמת! מחיפוש מהיר בגוגל או chatGPT אפשר למצוא איך לבחור מילה רנדומלית מתוך רשימת מילים שנבנה (או נבקש מchatGPT לבנות לנו במקום). בפרקים הבאים נלמד יותר לעומק על import
, אבל בשלב שלנו זה כבר מתבקש לדעת לחפש דברים בגוגל אפילו אם לא למדנו את זה בדיוק- ככה עושים כל המתכנתים!
הקוד הסופי שלנו#
נחבר את כל הפיצ'רים החדשים בשביל הקוד הסופי שלנו:
תרגיל- רמת קושי#
הוסיפו בתחילת הקוד קבלה מהמשתמש את רמת הקושי שבה הוא רוצה לשחק. עבור הרמה הקלה (1) נבחר רנדומלית מילה עד 4 אותיות באורך מתוך הרשימה המקורית. עבור הרמה הקשה (2) נוכל לבחור מכל המילים מהרשימה.
כמובן שגם כאן נצטרך לבצע ולידציה לאינפוט של בחירת הקושי.
דוגמאת הרצה:
Welcome to the Word Guessing Game!
Choose a difficulty level:
1. Easy
2. Hard
Enter your choice (1 for easy, 2 for hard): k
Invalid choice. Try again.
Enter your choice (1 for easy, 2 for hard): 3
Invalid choice. Try again.
Enter your choice (1 for easy, 2 for hard): 1
Current state: $$$
Used letters bank: []
...