Made byBobr AI

פיתוח משחק ארבע בשורה ב-C: סקירה טכנית ואלגוריתמים

מדריך טכני על בניית משחק Connect 4 בשפת C: ניהול לוגיקת לוח, פונקציות AI, טיפול בשגיאות קלט ושמירת סטטיסטיקות לקבצים.

#connect4#c-programming#game-logic#artificial-intelligence#coding-tutorial#structs#algorithms

Connect 4: מאחורי הקוד

סקירה טכנית של משחק ארבע בשורה בשפת C
לוגיקה, ניהול זיכרון ו-AI
Made byBobr AI

מבנה הנתונים: הלוח והשחקנים

  • הלוח הוא מערך דו-ממדי (2D Array) בגודל קבוע: 6 שורות על 7 עמודות.
  • הערכים בלוח הם פשוטים: 0 (ריק), 1 (שחקן 1), 2 (שחקן 2 / מחשב).
  • Constants בקוד: השימוש ב-DEFINES כמו ROWS ו-COLS מאפשר שינוי גודל לוח בקלות בעתיד.
Made byBobr AI

ניהול סטטיסטיקות: ה-Struct

כדי לשמור נתונים בצורה מסודרת, יצרנו מבנה (Struct) ייעודי שמאגד את כל המונים תחת 'חבילה' אחת.

Chart
typedef struct {
  int p1Wins;
  int p2Wins;
  int computerWins;
  int draws;
  int totalGames;
} GameStats;
Made byBobr AI

מכניקה: נפילת הדיסקית (Gravity)

הפונקציה dropPiece מדמה כבידה. היא לא סתם שמה דיסקית במקום שנלחץ, אלא מחפשת את 'הרצפה'.

1. מקבלים את מספר העמודה (Col).

2. לולאת for רצה מלמטה למעלה (ROWS-1 עד 0).

3. ברגע שמוצאים תא EMPTY, מציבים את השחקן ויוצאים (return true).

Made byBobr AI

הגנה מקריסות: Input Validation

הבעיה

מה קורה אם המשתמש מכניס אות במקום מספר? scanf רגיל נתקע בלולאה אינסופית.


הפתרון

הפתרון: שימוש ב-scanf_s וניקוי הבאפר עם getchar. הלולאה while(getchar() != '\n') היא ה'מגב' שמנקה את הזבל מהזיכרון.

Made byBobr AI

לוגיקת הניצחון: checkWin

בדיקת הניצחון בודקת 4 כיוונים עבור כל תא בלוח. האתגר העיקרי: לא לחרוג מגבולות המערך.

אופקי (-): רצים עד COLS-3.
אנכי (|): רצים עד ROWS-3.
אלכסון ראשי (\): בודקים למטה-ימינה.
אלכסון משני (/): בודקים למטה-שמאלה.
Made byBobr AI

זיכרון לטווח ארוך (Files)

כדי שהסטטיסטיקה לא תמחק בסגירת התוכנית, אנו שומרים אותה בקובץ בינארי (.dat).

  • fwrite -> כתיבת כל ה-bytes של ה-struct לקובץ בבת אחת.
  • fread -> קריאת הנתונים ישירות לזיכרון בפתיחת המשחק.
Made byBobr AI

בינה מלאכותית (AI)

EASY MODE

רמה 1 - Easy: רנדומלי לחלוטין. המחשב מגריל עמודה תקנית (isValidMove) ומניח בה דיסקית. אין אסטרטגיה.

MEDIUM MODE

רמה 2 - Medium: המחשב 'חושב' צעד אחד קדימה. המטרות שלו מדורגות לפי סדר עדיפות קריטי.

Made byBobr AI

AI Medium: אלגוריתם קבלת החלטות

1. בדיקת ניצחון מיידי (Win): האם יש מהלך שיגרום לי לנצח עכשיו? אם כן -> בצע אותו.
2. בדיקת חסימה (Block): האם היריב עומד לנצח בתור הבא? אם כן -> חסום אותו.
3. אחרת: בחר עמודה רנדומלית.

💡 המחשב משתמש בפונקציה undoMove כדי 'לדמיין' מהלכים ולבטל אותם אם הם לא מובילים לתוצאה הרצויה.

Made byBobr AI

דוגמה למהלך חסימה (Blocking)

בתרחיש זה, שחקן ה-X (האדם) יצר רצף של 3. המחשב (O) מזהה שאם לא יפעל בעמודה הרלוונטית, הוא יפסיד.

Made byBobr AI

המחשת נתונים (Example Chart)

המשחק עוקב אחרי התוצאות לאורך זמן. להלן דוגמה ויזואלית לנתונים שניתן להפיק מהקובץ game_stats.dat לאחר סדרת משחקים:

Chart
Made byBobr AI

לסיכום

פרויקט Connect 4 משלב לוגיקה אלגוריתמית (חיפוש ניצחון), ניהול זיכרון (Structs & Arrays), עבודה עם קבצים ובינה מלאכותית בסיסית אך יעילה.

Made byBobr AI
Bobr AI

DESIGNER-MADE
PRESENTATION,
GENERATED FROM
YOUR PROMPT

Create your own professional slide deck with real images, data charts, and unique design in under a minute.

Generate For Free

פיתוח משחק ארבע בשורה ב-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