מסע אל העבר :: ארכיון פורום :: לכל מי ששיחק במפי ויכול לעזור לי באיזה שלב אשמח לקבל עזרה :)

פרטים הודעה
  • liran-1
  • 05.10.2004 01:10

לכל מי ששיחק במפי ויכול לעזור לי באיזה שלב אשמח לקבל עזרה :)

אני תקוע בשלב:
בעיר 6 (יש רקע כחול אם כוכבים כתומים ופחיות ירוקות *להזכיר)
השלב האחרון (בצד ימין בסוף הכי למתא מספר 15)
יש בשלב מלא חצים כאלה שניכנסים ויוצאים מהם וצריך לאכול כורסונים...
אני תקוע שמע איזה שבוע עברתי הכל רק זה נישאר לי ואני לא מצליח..
אשמח לקבל עזרה בבקשה.. :)
תודה מראש אחים שלי :) :wink: :lol:
  • Gabriel
  • 05.10.2004 10:10

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

1: left
2: up
3: up
4: left
5: left
6: up
7: left
8: down
9: down
10: right
11: down
12: left
13: left
14: left
15: up
16: left
17: down
18: right
19: up
20: right
21: up
22: left
23: left
24: up
25: right
26: up
27: right
28: right
29: up
30: right
31: right
32: down
33: down
34: right
35: right
36: up
37: up
38: left
39: down

end

עשיתי את הפעולות הללו ואכן הן הדרושות לעבירת השלב! :)
  • עכבר כחול מדבר
  • 05.10.2004 01:10

הרשה לי לברך אותך, אני מעריך אנשים כמוך.
  • Gordi
  • 09.10.2004 07:10

Gabriel כתב/ה:
הכנתי תוכנה רקורסיבית שבודקת מה המסלול שאפשר לאכול בו הכי הרבה עד לפסילה, אם אתה מעוניין אני יכול לתת לך גם את הקוד.

את זה אני חייב לראות :!:
אפשר?
  • Gabriel
  • 09.10.2004 08:10

כמובן :)
כתוב ב visual ++C:
http://planet.nana.co.il/gabrielsat/bumpy.cpp
  • Gabriel
  • 21.10.2004 09:10

גורדי, אני חושב שלא יצא לך לראות אז הקפצתי כמו שאומרים. :wink:
  • Gordi
  • 22.10.2004 01:10

תודה :-)
חבל רק שזה כתוב בשפה שאינני מבין, הייתי שמח להבין את המבנה של התוכנה.

יש מצב שתתן פה הסבר קצרצר עליה?
  • Gabriel
  • 22.10.2004 02:10

יש מצב:

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


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

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

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

פונקצית מסלול (x,y,c,d):
{כאשר (x,y) היא הקורדינטה בה באמפי נמצא, c מספר האכילות שלו עד כה, וd- רשימה מקושרת בה נמצאים כל המהלכים עד כה}

אם במשבצת (x,y) יש פריט הגדל את c ב-1
*הוסף את (x,y) ל-d
אם אתה לא יכול לזוז בשום כיוון אזי שמור מסלול
אם אתה יכול לזוז ימינה אזי בצע פונקציית מסלול (x+1,y,c,d)
אם אתה יכול לזוז שמאלה אזי בצע פונקציית מסלול (x-1,y,c,d)
אם אתה יכול לזוז למעלה אזי בצע פונקציית מסלול (x,y+1,c,d)
אם אתה יכול לזוז למטה אזי בצע פונקציית מסלול (x,y-1,c,d)

{סוף פונקציה}

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


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



ואכן ניתן לראות בתמונה את באמפי מסיים את השלב. 8)

*עריכה
  • Gordi
  • 22.10.2004 03:10

אהה - השלב הארור הזה...
אני זוכר שמישהו מהפורום נתקע בשלב הזה והלכתי לחבר שלי שצייר לי ב"צייר" את הפתרון על תמונת מסך של השלב...
הוא עדיין צריך להיות לי על המחשב, איפשהו...
יהיה מעניין לראות אם מדובר באותו פתרון.
  • Gabriel
  • 22.10.2004 03:10

אני לא חושב שיכול להיות פתרון אחר, שכן אז התוכנה הייתה שומרת גם אותו. אלא אם כן אפשר לסיים את השלב גם אם אוכלים פחות.
בכל אופן, איך חבר שלך סיים את השלב? זה שיגע אותי, ניסיתי כל דבר ופשוט לא הצלחתי. מתישהו חשבתי שאולי אי אפשר לעבור את השלב הזה, מה גם שהסיסמה למסך בו נמצא השלב היא WINNER ... :)
  • עכבר כחול מדבר
  • 22.10.2004 07:10

למה המתכנתים עשו שלב כזה חסר פיתרון?

הם הרי לא ציפו שיבוא מישהו ויכתוב תוכנה...
  • Gordi
  • 23.10.2004 02:10

עכשיו אני מבין למה אני זוכר ששמרתי את הקובץ כWINNER.GIF...
בכל מקרה - כפי שציינתי, ניתן לפתור את השלב גם בלי תוכנה, אך ידידי היקר מעיד שהדבר עלה לו בבריאותו ושפיותו :-)
  • עכבר כחול מדבר
  • 23.10.2004 02:10

ולמה עשו שלב כזה?
  • מאור מ
  • 28.10.2004 09:10

מצטער שאני מקפיץ את ההודעה...
ויותר מכך, מצטער שאני מזלזל...

אבל אין מצב שאתה כתבת את זה לבד בעצמך!!!

(אבל אם בכל זאת אולי כן כתבת... אז אני צריך כמה שיעורים ב C++ :))
למה הרמה שלי לא משתווה בכלל למה שיש פה...
ואני תוכניתן בממר"ם (סליחה על ההתנשאות)
  • Gabriel
  • 29.10.2004 12:10

לא יותר מרקורסיה פשוטה.
  • אופיר
  • 29.10.2004 12:10

מה ההיפך ממתנשא ?
אבל ממר"ם לא שווים כלום.
  • מאור מ
  • 29.10.2004 01:10

טוב... זה לא מתאים ממש לפורום הזה.. (נוכל להתווכח שעות באייסיק..)
אבל אתה ממש טועה :]
חזרה | לרשימת ההודעות | חיפוש