עבור לתוכן

בקשת עזרה בתכנות ב++C , משחק שולה המוקשים. (עדכון בעמוד 4)

Featured Replies

פורסם
  • מחבר

פתרתי את כל הבעיות שציינתי עד עכשיו, עכשיו לשאלות הבאות:

(1)

יש את הפונקציה BAR שהתחביר שלה הוא כזה:


setfillstyle(1, setmaxcolor());
bar(x,y,x+15,y+15);

הבעייה שלא הצלחתי לפתור איתה שהיא צובעת רק בצבע לבן , יש דרך לצבוע בצבע אחר?

(2)

כשאני מגלה מוקש ("10") אני מראה אותו , כשאני מגלה מס' שמייצג מוקשים (מ1 עד 8) מסביב אני מראה את המספר -> עד לפה הכל בסדר.

כשאני לוחץ על משבצת ריקה ("0") אני אמור לחשוף את כל המשבצות הריקות שבאזור עד למוקשים (לא כולל) - איך אני עושה את הסריקה הזו ?

תודה.

  • תגובות 44
  • צפיות 10.6k
  • נוצר
  • תגובה אחרונה
פורסם

ברקורסיה. אתה עולה אחד למעלה, למטה ועובד לצדדים עד שיש כאלה עם מוקשים לידם(המספר שלהם שונה מ-0).

ורשמתי לך שם פתרון בהודעה הקודמת שלי על החישוב של מס המוקשים. למה אתה לא משתמש בזה?

פורסם
  • מחבר

מה זה רקורסיה ?

המקומות הריקים (0) יכולים להיות גם בפינות  וגם רחוקים בכמה תאים ובצורות שונות ( :o ) , רקורסיה מטפלת בדברים כאלו?

הפתרון שלך לא מובן לי (כאילו התנאי המקוצר) והוא לא כל כך עובד  :-\

צירפתי תמונה שלחצתי על איזור ריק (ללא מוקשים ומספרים שמייצגים מוקשים) ונפתחו כל המשבצות הריקות בטווח של המספרים המייצגים מסביב.

זה רק אני או שזה נראה מסובך?

[attachment deleted by admin]

פורסם

רקורסיה היא בעצם פונקציה החוזרת על עצמה עד לתנאי עצירה מסויים. לדוגמא אתה רוצה להדפיס את כל המספרים מ 0 עד N אז אתה יכול לעשות ככה

void printt(int n)

{

if (n>0)

{

printt(n-1);

printf(.....,n);

}

}

מה שהרקורסיה טובה בה היא עבודה עם דברים שקל להתקדם קדימה אבל לחזור אחורה קשה.

לדוגמא: עץ בינארי

את מה ששאלת אם זה מקום ריק אז שיפתח את הכל סביבו אפשר לפתור עם רקורסיה.

מה שאתה צרי לעשות זה דבר כזה: בתחילת הפונקציה אתה צריך לבדוק אם המקום שאתה נמצא עליו עכשיו הוא מקום ריק. אם כן אתה קורא לפונקציה שוב שתסרוק את כל התאים שסביבו(במקרה שהוא ריק שהיא תסמן אותו כלחוץ).ברגע שהגעת למספר הפונקציה פותחת אותו ומסתיימת. כך בעצם אתה עובר על כולם בצורה הכי פשוטה. נכון אוליי זה לא הכי יעיל אבל באמת.. למי אכפת ? זה יעבוד .. :) (הייתי רושם לך אלג' אבל לצערי אני יודע רק C ולא C++ ולא למדתי גרפיקה :\)

פורסם

אלגוריתם_שפותר(אני_תא_שלום_לך_בן_אדם)

(אם אני מסומן החזר 0)

1. צייר אותי(סמן אותי)

2. אם אני ריק אזי

2.1 החזר לך לזה שיושב עלי, זה שאני יושב עליו ואלה שאני מחזיק להם ידיים.

3. אחרת

3.1 החזר 1

זהו האלגוריתם. הוא סוכם לך גם כמה נפתחו לך בצדדים. אתה יכול לעשות את זה יעיל יותר אם תסמן את אלה שכבר ביקרת בהם.(בסוגריים)

פורסם

אתה משתמש בBORLAND?

כי ניסיתי ב DEVCPP ולא עשה לי COMPILE בין השאר בגלל CLRSCR שזה כמה שידוע לי BORLAND

יש מצב שזה יהיה קוד תקני ולא רק לCOMPLIER אחד?

פורסם
ש מצב שזה יהיה קוד תקני ולא רק לCOMPLIER אחד?

BGI זה כבר ספציפי לבורלנד.

לקטע של "פתיחת התאים" רקורסיה נשמעת כמו הפיתרון הכי פשוט. אופציה קצת יותר מורכבת היא סריקת BFS -

אתה מחזיק תור של התאים שאתה רוצה להרחיב, ובלולאה מוציא תא, פותח אותו, ומוסיף את השכנים שלו אם עוד לא פתחת אותם.

זה קצת יותר יעיל, כי אין כ"כ הרבה קריאות לפונקציות, ואם אתה מצייר כל תא אחרי שאתה פותח אותו ייצא לך אפקט נחמד.

פורסם

האפקט יהייה באמת נחמד יותר, לגבי היעילות אני לא בטוח.

פורסם

הקטע של היעילות זה בעיקר בגלל קריאות מרובות לפונקציה. שימוש בטיפוס נתונים שמאפשר הכנסה/הוצאה inline מאפשר לעשות את זה בלי קריאות לפונקציה.

לפני שנתיים נאלצתי לעשות מימוש כזה ל- floodfill בגלל שהיה לי stack מאוד מוגבל, ושטח גדול שהייתי צריך למלא.

פורסם

אבל כאן אתה בעצם מממ את הSTACK בעצמך. השאלה היא איזה STACK יעיל יותר(הקריאה לפונ או שמירת האיברים).

פורסם

טוב היה לי משעמם וחיפשתי קצת אתגרים

אז עשיתי את המשחק בעצמי

זה לא מושלם לגמרי אבל כרגע אפשר לשים דגלים , לפתוח משבצות

אבל הקטע שמעצבן זה הלפתוח אוטומטים אזורים ריקים

כאילו זה לא מסובך אבל לא יודע למה לא עובד

פשוט לעשות בדיקה לכל התאים

ובכל בדיקה לבדוקה עם התא שווה ל 0 אז לפתוח את התאים שמסביבו

השתמשתי בשני מערכים , אחד "אמיתי" עם כל הפתרון והשני של מה שרואים על המסך

פורסם

בשני אתה יכול לשמור רק 1 או 0, כלומר, האם הוא מוצג על המסך או לא(אם לא עשית ככה).

פורסם

חחחחח נחמד אהבתי אבל קצת מבלבל בהתחלה.. יש לך גם באג שאפשר לשים דגל על משבצת שהיא כבר פתוחה ושאתה פותח אותה מחדש היא מגלה עוד כמה משבצות בדרך. (אם המורה שלי למבנה נתונים היה רואה את התוכנית שלך הוא היה משמיד אותה ואותך במקום :P.)

פורסם

חחח

לא אשמתי

90% מהתוכנית זה קוסמטיקה

זה לא קל לתת אשליה של "תוכנה אמיתית" רק מ PRINTF....

אני יודע שיש באגים , אבל ממש לא ניראה שאני הולך לתקן שם משהו כי זה היה סתם משהו משעמום

גם החלק של הבחירת תא היה צריך להיות בפונקציה משלו (חוזר 3 פעמים) אבל התעצלתי

בקיצור הייתי אומר לא רע בשביל מישהו שלפני שלושה שבועות לא ידע לעשות HELLO WORLD

במיוחד ששאר הכתה עדיין תקועים ב FOR... חחח

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים