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

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


SubX

Recommended Posts

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

(1)

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


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

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

(2)

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

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

תודה.

קישור לתוכן
שתף באתרים אחרים

  • תגובות 44
  • נוצר
  • תגובה אחרונה

ברקורסיה. אתה עולה אחד למעלה, למטה ועובד לצדדים עד שיש כאלה עם מוקשים לידם(המספר שלהם שונה מ-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 מאוד מוגבל, ושטח גדול שהייתי צריך למלא.

קישור לתוכן
שתף באתרים אחרים

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

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

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

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

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

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

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

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

קישור לתוכן
שתף באתרים אחרים

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

קישור לתוכן
שתף באתרים אחרים

חחח

לא אשמתי

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

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

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

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

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

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

קישור לתוכן
שתף באתרים אחרים

ארכיון

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


×
  • צור חדש...