1 of 18

מעבדה בהנדסת חשמל 1א’ �פרויקט סיום� משחק DONKEY KONG JR�

מיראל חולי, ביאן נגמי

מדריך: אברהם קפלן

2 of 18

אפיון הפרויקט

דרישות:

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

​

3 of 18

יצירתיות:

  • איבוד החיים האחרון יוביל להפסד
  • הוספת אויבים שנעים במרחב המשחק הלוך וחזור באופן רנדומלי ובכיוון אנכי ואופקי. פגיעה בו מובילה לאיבוד חיים.
  • גרביטציה
  • עוד אוצרות אשר מופיעות במקומות רנדומליים על המסך, ולא בהכרח רק על החבלים.
  • הוספת חבל באופן אופקי שנע ימינה ושמאלה / אורכו גדל וקטן בטווח מסוים.
  • האוצרות נעלמות כאשר הקוף אוסף אותן.
  • הוספת אדמה שנעה בכיוון אופקי על המסך.
  • תצוגת לבבות, אשר קיום כל לב מציין הזדמנות נוספת לשחק את המשחק עוד פעם.
  • צלילים
  • הגברת מהירות הטיימר והיכולת לעצור אותו.
  • מסך התחלה שאומר PRESS START
  • מסכי הפסד וניצחון מהבהבים שאומרים GAME OVER , YOU WIN! בהתאם.

​

4 of 18

ארכיטקטורה וחיבורים

מקלדת מספרים

DE10

Display

Sound

5 of 18

חוקי המשחק

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

6 of 18

צילום מסכי המשחק

מסך התחלה

מסך כישלון מהבהב

מסך ניצחון מהבהב

מסך משחק

7 of 18

איבוד לב ראשון

טיימר + מונה ניקוד

איבוד לב ראשון + הגעה למפתח עם ניקוד שהוא פחות מ 12

8 of 18

הוראות הפעלה

תנועה ימינה

תנועה שמאלה

קפיצה

תנועה למעלה

תנועה למטה

התחלת המשחק

9 of 18

טורבו: הגברת מהירות הטיימר

reset

הצגת מספר המקש שלוחצים

עוצר זמן: עצירת הטיימר כל עוד המפסק דלוק.

הצגת הזמן הנותר עד סיום המשחק

הצגת הניקוד של הקוף

הוראות הפעלה - המשך

10 of 18

סכמת מלבנים

Enemy

Monkey

HIT

Keys (Inputs)

Graphics

VGA Controller

Random

Timer

7 Segs

MSS

Lives and Score

Game Controller

VGA output

Mux

11 of 18

הירארכיה עליונה

כחיים

12 of 18

תיאור מודול ראשון – MONKEY BLOCK [מיראל]

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

הבלוק הראשון יזהה את התנגשויות שהקוף עשה ויטפל בתנועתו בהתאם.

הבלוק השני יקבל את תנועת הקוף ומייצר את ווקטור המיקום שיש לשים בו הקוף על המסך.

הבלוק השלישי יקבל את המיקום המבוקש ויוצא צבע מתאים לתמונת הקוף.

​

13 of 18

תיאור מודול שני – GAME CONTROLLER[ביאן]

  • המודול מנהל את המשחק בכללי, את החוקיות שלו ואת התנהגות כל האובייקטים במשחק.
  • המודול מנהל את המעבר בין כל שלב ושלב במשחק, למשל: העברה ממסך הפתיחה למסך המשחק בלחיצה על מקש ENTER.
  • נבנה מכונת מצבים שמורכבת מחמשה מצבים וכל מצב מעביר את המשחק למצב הבא אחריו ע"י זיהוי פקודות מהשחקן (מקשים) וגם סיגנלים פנימיים שאחראיים על ספירת זמן המשחק, מספר החיות של הקוף ומספר הניקוד שהקוף צבר.
  • המכונה תתחיל במצב אידיאלי שבו היא מוציאה סיגנל שמודיע שאנו נמצאים בפתיחה ובכך נזהה מתי להציג את מסך הפתיחה. כשמצב זה מזהה עליה במקש ENTER המכונה עוברת למצב start .
  • מצב start מודיע שצריך להציג את מסך המשחק ובודק את הטיימר ומספר הלבבות, ומוציא פקודות בהתאם.
  • מצב got_key שמזהה שהקוף לקח את המטרה וכשהוא יגיע לנקוד הנדרש נעבור למסך winner .
  • מצב gameOver שמודיע שהמשחק הסתיים בכישלון ושצריך להציג את המסך המתאים.
  • מצב winGame שמודיע שהמשחק הסתיים בהצלחה ושצריך להציג את המסך המתאים.

14 of 18

מכונת מצבים (MEALY)

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

IDLE

WIN GAME

START GAME

GAME OVER

Enter

reset

lives_num=0

|| time=0

|| no score

Score>=12

&& get_to_key=1

15 of 18

SIGNAL TAP - זיהוי באג

בעיה: אי- זיהוי של התנגשות בין הקוף לבין הפירות.

הסבר הבעיה: וכפי שרואים ה drawing request של הקוף ו ה drawing request של fruit1 עולים ל ״1״ לוגי בצורות פולסים, למשך זמן מסויים. אבל collision_with_fruit1 שמציין התנגשות של הקוף עם fruit1 נשאר על ״0״ .

16 of 18

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

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

17 of 18

סיכום ומסקנות

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

ME ON COMPILATION TIME

18 of 18

תודה על ההקשבה