משחק החיים
בוקר טוב
יש לי שאלה ממטלה לקורס בג'אווה שאני צריך לעשות- משחק החיים. מי שלא מכיר, משחק החיים זה סימולציה כמודל חקר מחזור החיים של האורגניזם החי. הרעיון הוא שהמשחק משוחק על מטריצת ענק שאיבריה מהווים אתרי מחייה (קיום) אפשריים: בכל אתר ייתכן אחד משני מצבים: 1- "יש חיים" 2- "אין חיים" הייתי מראה דוגמא, אבל זה בעייתי פה..
תחשבו על מטריצה בוליאנית. עכשיו, בכל מחזור חיים, כל תא במטריצה משנה את המצב שלו לפי השכנים שלו: 1.לידה- בכל אתר בו "אין חיים" שיש לו בדיוק 3 שכנים חיים, תהיה לידה בדור הבא. אחרת התא נשאר "ללא חים"- ריק. 2.מוות- בכל אתר בו "יש חיים" שלו 0 או 1 שכנים חיים יתרחש מוות בדור הבא כתוצאה מבדידות. בכל אתר בו "יש חיים" ולו 4 שכנים חיים ומעלה, יתרחש מוות בדור הבא כתוצאה מ"פיצוץ אוכלוסין". 3.קיום- כל אתר בו "יש חיים" והינו בעל 2 או 3 שכנים, ימשיך להתקיים בדור הבא. שכנים כוללים גם באלכסון, דרך אגב. אוקיי, אז בכל מחזור חיים צריך לעדכן כל תא במטריצה- עם ריבוי תהליכים. אז כמובן שאני רוצה ליצור אובייקט לכל תא במטריצה(Cell), שמממש את Runnable, ובזמן הריצה שלו הוא יבדוק את השכנים שלו ויעדכן את עצמו אחרי שכולם בדקו את כולם (בעזרת סינכרון כמובן). הבעיה היא שלפי OOP, צריך כמובן שכל תא יהיה נפרד מהשכנים שלו, ולא תלוי בהם. גם לשלוח ייחוס של מטריצה בוליאנית שתכלול את מצבי כל התאים נראה לי מסורבל מדי.. ואני לא יכול לשלוח ייחוס של התהליך שמנהל הכל (ויש לו את המטריצה) כי המחלקה הזאת בעצם מורכבת מכל התאים שעדיין לא יצרתי... למישהו יש רעיון?
בוקר טוב