פיתוח משחק ארבע בשורה ב-C: סקירה טכנית ואלגוריתמים
מדריך טכני על בניית משחק Connect 4 בשפת C: ניהול לוגיקת לוח, פונקציות AI, טיפול בשגיאות קלט ושמירת סטטיסטיקות לקבצים.
Connect 4: מאחורי הקוד
סקירה טכנית של משחק ארבע בשורה בשפת C לוגיקה, ניהול זיכרון ו-AI
מבנה הנתונים: הלוח והשחקנים
הלוח הוא מערך דו-ממדי (2D Array) בגודל קבוע: 6 שורות על 7 עמודות.
הערכים בלוח הם פשוטים: 0 (ריק), 1 (שחקן 1), 2 (שחקן 2 / מחשב).
Constants בקוד: השימוש ב-DEFINES כמו ROWS ו-COLS מאפשר שינוי גודל לוח בקלות בעתיד.
ניהול סטטיסטיקות: ה-Struct
כדי לשמור נתונים בצורה מסודרת, יצרנו מבנה (Struct) ייעודי שמאגד את כל המונים תחת 'חבילה' אחת.
הדמיה של מבנה הנתונים:
מכניקה: נפילת הדיסקית (Gravity)
הפונקציה dropPiece מדמה כבידה. היא לא סתם שמה דיסקית במקום שנלחץ, אלא מחפשת את 'הרצפה'.
1. מקבלים את מספר העמודה (Col).
2. לולאת for רצה מלמטה למעלה (ROWS-1 עד 0).
3. ברגע שמוצאים תא EMPTY, מציבים את השחקן ויוצאים (return true).
הגנה מקריסות: Input Validation
מה קורה אם המשתמש מכניס אות במקום מספר? scanf רגיל נתקע בלולאה אינסופית.
הפתרון: שימוש ב-scanf_s וניקוי הבאפר עם getchar. הלולאה while(getchar() != '\n') היא ה'מגב' שמנקה את הזבל מהזיכרון.
לוגיקת הניצחון: checkWin
בדיקת הניצחון בודקת 4 כיוונים עבור כל תא בלוח. האתגר העיקרי: לא לחרוג מגבולות המערך.
אופקי (-): רצים עד COLS-3.
אנכי (|): רצים עד ROWS-3.
אלכסון ראשי (\): בודקים למטה-ימינה.
אלכסון משני (/): בודקים למטה-שמאלה.
זיכרון לטווח ארוך (Files)
כדי שהסטטיסטיקה לא תמחק בסגירת התוכנית, אנו שומרים אותה בקובץ בינארי (.dat).
fwrite -> כתיבת כל ה-bytes של ה-struct לקובץ בבת אחת.
fread -> קריאת הנתונים ישירות לזיכרון בפתיחת המשחק.
בינה מלאכותית (AI)
רמה 1 - Easy: רנדומלי לחלוטין. המחשב מגריל עמודה תקנית (isValidMove) ומניח בה דיסקית. אין אסטרטגיה.
רמה 2 - Medium: המחשב 'חושב' צעד אחד קדימה. המטרות שלו מדורגות לפי סדר עדיפות קריטי.
AI Medium: אלגוריתם קבלת החלטות
1. בדיקת ניצחון מיידי (Win): האם יש מהלך שיגרום לי לנצח עכשיו? אם כן -> בצע אותו.
2. בדיקת חסימה (Block): האם היריב עומד לנצח בתור הבא? אם כן -> חסום אותו.
3. אחרת: בחר עמודה רנדומלית.
המחשב משתמש בפונקציה undoMove כדי 'לדמיין' מהלכים ולבטל אותם אם הם לא מובילים לתוצאה הרצויה.
דוגמה למהלך חסימה (Blocking)
בתרחיש זה, שחקן ה-X (האדם) יצר רצף של 3. המחשב (O) מזהה שאם לא יפעל בעמודה הרלוונטית, הוא יפסיד.
המחשת נתונים (Example Chart)
המשחק עוקב אחרי התוצאות לאורך זמן. להלן דוגמה ויזואלית לנתונים שניתן להפיק מהקובץ game_stats.dat לאחר סדרת משחקים:
לסיכום
פרויקט Connect 4 משלב לוגיקה אלגוריתמית (חיפוש ניצחון), ניהול זיכרון (Structs & Arrays), עבודה עם קבצים ובינה מלאכותית בסיסית אך יעילה.
- connect4
- c-programming
- game-logic
- artificial-intelligence
- coding-tutorial
- structs
- algorithms









