עד כה עסקנו בתכנות של פונקציות בלבד, ומבני הנתונים היחידים
שהתייחסנו אליהם היו אלו המוגדרים מראש בשפה (משתנים, רשימות וכו').
כפי שאתם יודעים, כדי להרחיב את השפה, ולהקל על התכנות, אנו משתמשים
בהגדרת מחלקות משלנו. כמעט לכל אלמנט בתכנית, גם אם יש לו רק מופע אחד,
כדאי לכתוב מחלקה המממשת את הפעולות שלו, וזאת כדי להקל על כתיבת
התכנית, כדי לאפשר שימוש נוסף באותו קוד, להקל על תחזוקה וכן
הלאה.
אחד האוביקטים הבסיסיים בתכנית שלנו הוא תא על לוח המשחק.
אפילו לתא בלוח המשחק כדאי לממש מחלקה, ולא לממש ישירות מחלקה ללוח
שלם. כפי שנראה בהמשך, מחלקה המייצגת תא בלוח יכולה לשמש אחר כך גם
בהגדרת מחלקת של צוללת, ולפשט מספר משימות
מורכבות.
ממשו מחלקה של תא על לוח המשחק. משתני האוביקט של המחלקה יהיו
כדלהלן: קואורדינטת x של התא על לוח
המשחק קואורדינטת y של התא על לוח
המשחק מהו המצב של התא (כפי שנתקלנו בו בסעיפים
קודמים). משתנה בשם sub שיכיל הצבעה
לצוללת הנמצאת בתא זה (מחלקת הצוללת תמומש
בהמשך).
הוסיפו למחלקה זו את המתודה ToString כמו שמומשה בשלב
ב , ואת המתודות
הבאות: מתודה בשם SetSub המקבלת כארגומנט
צוללת, ומעדכנת את מצב התא ואת המצביע לצוללת
בהתאם. מתודה בשם Hit שבודקת מהי תוצאה
של "יריה" על התא, מעדכנת את מצבו בהתאם ומחזירה 0 או 1 בהתאם להאם
היתה פגיעה. מתודה או מתודות לעדכון כפוי של מצב התא בהתאם לקלט, ולהחזרת
המצב הנוכחי של התא. מתודה בשם isAdjacent המקבלת כארגומנט
תא נוסף ובודקת האם התאים הם שכנים (לבדיקת חוקיות מיקום
צוללות).