סתם רעיון...
ויש לה גם קואורדינאטות שמייצגות את המרכז שלה. קבוצה של קוביות באותו צבע תהיה רשימה של מבנים כאלה. וכל הלוח שלך יהיה רשימה של כל הקבוצות. בנוסף לכל הקוביות יש אורך צלע מסויים. נקרא לו SIZE. בהנתן קוביה A נגדיר: A.x ו- A.y יהיו קואורדינאטות שלה בעולם. בדיקה האם A שכנה של B:
neighbours(A,B) if (|A.x - B.x| <= SIZE) and (|A.y - B.y <= SIZE) then return TRUE else return FALSE
בדיקה האם A צריכה להבלם על ידי B שנמצאת מעליה:
collides(A,B) if (|A.y - B.y| <= SIZE) the return TRUE else return FALSE
הקוביה שלך נעה עד שהיא נבלמת על ידי אחת הקוביות. ברגע שהיא נבלמת אתה יוצר קבוצה חדשה שמכילה רק את הקוביה החדשה שהגיעה. אחר-כך אתה בודק מיהם השכנים שלה שבעלי אותו צבע כמוה ומאחד את כל הקבוצות של השכנים שמצאת עם הקבוצה שיצרת בשביל הקוביה שהגעיה. כמובן שאם לא מצאת אף שכן באותו צבע, אז הקוביה נשארת בקבוצה משלה לבד. אפשר לייעל את הרעיון על ידי חלוקה של העולם שלך לרמות אנכיות. אופקית הקוביות יכולות לעמוד איפה שהן רוצות. אנכית המרחק שלהן מהתקרה היא כפולה של אורך הצלע של הקוביה. אז כאשר מגיעה קוביה, אתה בודק האם היא שכנה של הקוביות ברמה שלה, ברמה שמעליה וברמה שמתחתיה, ולא של כל הקוביות בעולם.