You are on page 1of 27

‫פרויקט‬

‫סיום‬
‫אסמבלי‬
‫טיפים‬
‫קרדיט‪:‬‬
‫דנה שמחה אבן חיים‬
‫עומר דוידי‬
‫ברק גונן‬
‫‪Random‬‬
‫הצורך‪ :‬קוביות משחק‪ ,‬הטלת מטבע‪ ,‬ערבוב קלפים‪ ,‬גלגול רולטה וכדומה‪.‬‬
‫נדרשת רמת דיוק גבוהה בכל הקשור לסטטיסטיקה מדעית או קריפטוגרפיה‪.‬‬
‫האם ניתן לייצר מספרים רנדומליים באמצעות המחשב?‬
‫מספרים פסאודו אקראיים‬
‫מהו גרעין)‪?(seed‬‬
‫‪RANDOM‬‬
‫סוגי גרעינים שימושיים‪:‬‬
‫שעון המערכת‬
‫קואורדינטות העכבר‬
‫הפרשי זמן בין הקשות מקלדת‬
‫קלט משתמש‬
‫נתוני ניהול זיכרון‬
‫‪RANDOM - Algorithm‬‬
‫‪:‬הגרעין‬
‫נקרא את ערך מונה‬
‫הטיימר בכתובת‬
‫השעון מתעדכן כל ‪ 55‬מילי שניות‪,‬‬ ‫‪0040:006Ch‬‬
‫אם נרצה ליצור מספרים שונים בפרק‬
‫זמן קצר‪ ,‬לא נקבל גיוון בתוצאות‪ .‬או‬ ‫‪:‬לדוגמה‬
‫שמיד נבחין בקשר בין המספרים‪...‬‬ ‫‪ -‬לעשות לבתים שהתקבלו‬
‫ביצוע אלגוריתם מתמטי על‬
‫פעולת ‪ xor‬עם ביטים‬
‫הגרעין‬
‫כלשהם מהזיכרון‪.‬‬

‫עדכון המספר שהתקבל‬


‫מהאלגוריתם לטווח הרצוי‬
RANDOM - Code
DATASEG
Clock EQU es:6Ch
RandomNum db ?
CODESEG
Start: ….
mov ax, 40h
mov es, ax ; setting the extra segment to point the clock counter
xor bx, bx
mov ax, [Clock] ; read timer counter – SEED
mov ah, [byte ptr cs:bx] ; read one byte from memory ‫נלקח מעמודים‬
xor al, ah ; xor memory and counter ‫ בספר‬294-297
and al, 15 ; get a result between 0 - 15 ‫הלימוד‬
inc bx
mov [RandomNum], al
‫אופס‪ ...‬נפסלתי‬

‫איך אדע שתפסתי את האוכל?‬ ‫איך אדע שנפסלתי?‬

‫לעיתים‪ ,‬שימוש בקריאת ערך הפיקסל מהמסך יכול להיות מאוד נוח לשימושים‬
‫כאלה‪.‬‬
‫הפיקסל הבא איננו שחור? נפסלתי‪.‬‬
‫הפיקסל מעט מעל הראש איננו כחול?‬
‫נפסלתי‪/‬הפיקסל במיקום הבא הוא ורוד? אכלתי!‬
‫אנימציה‬
mov bx, offset pic1 :‫מה צריך‬
push bx
‫פסיקה של שיהוי זמן‬
call print
call delay
‫פסיקת הדפסה‬
mov bx, offset pic2 ‫ כל אחת‬:‫תמונות שמורות בתיקייה‬
push bx ‫בפוזיציה שונה‬
call print
call delay
……
‫תנועה‬
‫איך נזיז תמונה על רקע קבוע?‬

‫הבעיה‪:‬‬
‫אם נדפיס את סופר מריו‬
‫במיקום ‪,X+1‬‬
‫הוא "יימרח" על פני המסך‬

‫אפשרויות‪:‬‬
‫א‪ .‬להדפיס את כל המסך מחדש‪ ,‬כאשר סופר מריו במיקום ‪ - X+1‬עלול לגרום לריצוד מסך‪.‬‬
‫( ואז להדפיס אותו שוב במיקום ‪.X+1‬‬ ‫ב‪ .‬להדפיס ריבוע בצבע הרקע במיקום הישן של סופר מריו )‬
‫קוד בתנועה‬
Move Mario left
proc MoveLeft
push [MarioX]
push [MarioY]
push [MarioWidth]
push [MarioHeight]
push [bgColor]
call PrintBg
add cx, 1
push offset MarioDraw
call PrintLeftMario
ret
endp MoveLeft
‫‪MOVEMENT - ADVANCED‬‬
‫איך להזיז תמונה על פני רקע לא אחיד?‬
‫שיטת המיסוך‬
‫מסיכה‪:‬‬ ‫דמות‪:‬‬
‫בכל ערכי הדמות יש פיקסלים שחורים)‪ (00‬והרקע שמסביבה הוא לבן)‪(15‬‬ ‫דמות צבעונית שמסביבה יש פיקסלים שחורים )‪(00‬‬

‫חלק ראשון‬ ‫חלק שני‬


‫‪ AND‬בין המסכה לבין הרקע‪:‬‬ ‫‪ OR‬בין תוצר חלק א'‪ ,‬לבין הדמות שלנו‬
‫מותיר אותנו עם דמות שחורה על גבי הרקע‬ ‫)‪ OR‬בין מספר כלשהו לבין ‪)00‬הפיקסלים‬
‫)מאחר ו‪ AND-‬בין מספר כלשהו לבין ‪15‬‬ ‫השחורים( – נותן את המספר עצמו‪.‬‬
‫שזה ‪ 1111‬בינארי‪-‬לבן‪ ,‬נותן לנו את המספר‬
‫עצמו(‬
‫‪MOVEMENT - ADVANCED‬‬
‫איך להזיז תמונה על פני רקע לא אחיד?‬
‫שיטת המיסוך‬
‫מסיכה‪:‬‬ ‫דמות‪:‬‬
‫בכל ערכי הדמות יש פיקסלים שחורים )‪(00‬‬ ‫דמות צבעונית שמסביבה יש‬
‫והרקע שמסביבה הוא לבן )‪(15‬‬ ‫פיקסלים שחורים )‪(00‬‬
‫‪MOVEMENT – ADVANCED - CODE‬‬
‫איך להזיז תמונה על פני רקע לא אחיד?‬
‫שיטת המיסוך‬
‫מקביליות‬
‫אם עברה חצי שנייה – להוריד את הבלוק‬
‫הנוכחי למטה‪.‬‬
‫תוך כדי שהמחשב סופר את הזמן הזה‪ ,‬שלא‬
‫"ייתקע“‪ ,‬אלא שגם יתאפשר לשחקן להזיז‬
‫את הבלוק שמאלה וימינה‪.‬‬

‫בעיית תכנון תוכנה‬


‫קלאסית‬

‫הצורך‪ :‬לגרום לחלקים בתוכנית להיראות כאילו הם מתרחשים במקביל‪.‬‬


‫מקביליות‬
‫‪Repeat:‬‬
‫‪call MoveBlockDown‬‬
‫‪call GetKeyFromUser‬‬
‫‪call WaitHalfSecond‬‬
‫…‬
‫קופא במשך‬
‫…‬
‫חצי שנייה עד שהפרוצדורה‬
‫‪jmp Repeat‬‬
‫‪.‬תסתיים‬
‫אי אפשר להזיז בינתיים כלום‬

‫בעיית תכנון תוכנה‬


‫קלאסית‬

‫הצורך‪ :‬לגרום לחלקים בתוכנית להיראות כאילו הם מתרחשים במקביל‪.‬‬


‫‪mov cx, HalfSecond‬‬

‫כן‬
‫הלולאה הסתיימה?‬

‫לא‬

‫קרא את ערך השעון‬


‫תוריד את הלבנה מטה‬

‫כן‬
‫נריץ לולאה שבודקת אם עברה חצי שנייה‪.‬‬ ‫הערך השתנה?‬
‫אם פרק הזמן עבר ‪ -‬אז מבצעים משהו )מפילים בלוק(‪ .‬אם פרק הזמן‬ ‫לא‬
‫האם המשחק נגמר?‬
‫עדיין לא עבר‪ ,‬אז מריצים קטע קוד אחר )בדיקה אם השחקן הזיז את‬ ‫לא‬
‫הבלוק(‪.‬‬
‫לא‬ ‫כן‬
‫האם הוקש על‬
‫המקלדת?‬
‫לא נותנים למעבד לחכות עד שהזמן יעבור‪,‬‬
‫אלא נותנים לו משימות אחרות ובלולאה בודקים אם הזמן עבר‪.‬‬ ‫כן‬

‫הזז לפי הקלט‬

‫צא מהמשחק והדפס ניקוד‬


‫מקביליות‬
‫משך משחק מקסימלי ‪ 3‬דקות ‪ -‬אח"כ הוא נגמר‬
‫אוטומטית‬
‫הזזת בולי העץ ימינה‬
‫הזזת הדולפין ימינה‬
‫הזזת התנין‬
‫קליטת מקש מהמשתמש על מנת להזיז את הצפרדע‬
‫מקביליות‬
‫‪mov cx, ThreeMinutes‬‬

‫קרא את ערך השעון‬

‫הערך‬ ‫כן‬ ‫הלולאה‬ ‫כן‬


‫השתנה?‬ ‫הסתיימה?‬

‫לא‬
‫לא‬

‫לא‬ ‫האם הוקש על‬ ‫כן‬


‫המקלדת?‬

‫הזז ימינה את‬ ‫הזז את הצפרדע‬


‫עצמי המסך‬ ‫למיקום ‪Y-10‬‬

‫האם טבעה?‬

‫כן‬

‫הדפסת מסך סיום‬


GOOD LUCK!
99 little bugs in the code,
99 bugs in the code,
1 bug fixed … compile again,
100 little bugs in the code.
‫ספר הפרויקט‬
‫הספר יוגש בפורמט של ‪.PDF‬‬
‫פתיחה‪ :‬שם הפרויקט‪ ,‬שם התלמיד‪ ,‬שמות‬
‫המנחים‬
‫רפלקציה‬
‫מה הקשיים שנתקלתי בהם בפרויקט‬ ‫מדריך למשתמש ‪ -‬איך מפעילים‪ ,‬מה‬
‫המסכים‪ ,‬האפשרויות‬
‫כיצד התגברתי עליהם‬
‫מה ביצוע תרם לי הפרויקט מעבר ללימוד של השפה‪.‬‬ ‫תרשים זרימה‬

‫רשימת מקורות חיצוניים‬ ‫רשימת הפרוצדורות‪ .‬עבור כל אחת‪:‬‬


‫מה היא מבצעת‬
‫אין צורך להדפיס קוד‬ ‫קלט‬
‫פלט‬
‫דגשים להגשת הפרויקט‬

‫דגשים להגשת פרויקט‬


‫דרישות בסיסיות‬
‫יש להגיש גרסה מתקמפלת‬
‫האם מגיש הפרויקט השיג את יעדו?‬
‫האם הקוד עובד חלקית?‬
‫נראות הקוד‬
‫קונבנציות‬

‫שמות‬ ‫אינדנטציה )הזחה(‬


‫משמעותיים‬
‫הוראות לאסמבלר צמודות לשמאל‬
‫נראות הקוד‬
‫תיעוד‬

‫אין תיעוד‬

‫תיעוד מועמס יתר על‬


‫המידה‬
‫נראות הקוד‬
‫תיעוד‬
‫שם פונקציה‬
‫ערכי קבלה‬
‫ערכי החזרה‬
‫מה מבצעת‬
‫תיעוד פנימי לפי‬
‫צורך‬
‫חלוקה לפרוצדורות‬
‫עקרון המודולאריות ‪ -‬נמנע מכפל קוד מיותר ונתכנן את הקוד כך שיהיו בו משימות קטנות יותר ועצמאיות‬

‫הפתרון‪ :‬פונקציה שמקבלת‬


‫הפתרון‪ :‬פונקציה שמקבלת‬
‫כפרמטרים את מאפייני התמונה‬
‫כפרמטר מספר שניות רצוי‬
‫)‪ ,offset‬רוחב‪ ,‬גובה‪(X,Y ,‬‬
‫ומחכה אותו‬
‫שימוש באלמנטים‬
‫מתקדמים‬
‫גרפיקה‬
‫סאונד‬
‫ממשק משתמש‬
‫שימוש בשעון‬

You might also like