ROB אודן: היי. אני רוב. תוהה כיצד ליישם את המשחק הזה? ובכן, בואו נפרוץ פתרון צוות. לכן, הניח לראשו הראשון של אל init פונקציות שאמרנו לך ליישם ראשון. ראשון אנחנו נסתכל על זה היא ההנעה init. בסדר, אז תזכרו שאנחנו רוצים לחתור להיות מרוכז בדיוק ב ציר ה-x. אז אנחנו צריכים להבין שבו שצריך ללכת. בהתחשב ברוחב של הלוח - אשר גם חשיש העליון הגדיר את - אנחנו צריכים להחסיר את רוחב ההנעה ולחלק ל -2, כך ש מרכז ההנעה הוא ב מרכז הלוח. זכור כי קואורדינטת x מתייחסת הפינה השמאלית העליונה של ההנעה, ואז זה בדיוק איפה אנחנו רוצים שזה יהיה. קואורדינטת y לא משנה באותה מידה, כי אנחנו יכולים למקם זה בכל מקום שאנחנו רוצים. אז אנחנו יצירת מופע ההנעה, אנו קובעים הצבע השחור, אנו קובעים למלא לנכון כך שזה מילא במלבן, ואנחנו לאחר מכן להוסיף אותו לחלון ותמורה ההנעה. וזהו זה לאתחול ההנעה. זה הולך להיות דומה ללוח תוצאות init. אז אנחנו הולכים לאתחל את התווית, אנחנו הולכים להגדיר את הצבע ל בצבע אפור בהיר - אתה יכול לבחור מה שאתה רוצה - אנחנו הולכים להגדיר את הגופן כדי sans serif 48 - גם יכול לבחור מה שאתה רוצה - אנו נוסיף אותו לחלון. עכשיו לשלוח את זה אל הגב הוא לא ממש הכרחי, זה רק במקרה שמשהו אחר קורה לחפוף את התווית. ואז, כאשר אנו משתמשים בזיהוי התנגשות, זיהוי ההתנגשות תאתר אחרת דבר לפני שהוא מזהה את התווית. אבל זה באמת לא אמור להשפיע לנו בתכנית זו. לבסוף, יש לנו עדכון לוח תוצאות זה פונקציה שאנחנו כתבנו. אז בואו נסתכל על זה. עכשיו, הנה אנחנו רואים משהו שהוא כמעט זהה למה שראינו בlabel.c. אז יש לנו תווית - חיץ אופי 12 תווים, וזה מספיק כדי להתמודד עם כל מספר שלם, חיובי או שלילי. לאחר מכן אנו משתמשים sprintf להעתיק מצביע למאגר זה. אז ים זה מכיל מחרוזת המייצגת את מספר הנקודות. לבסוף, אנו קובעים את התווית למחרוזת ש. ואז אנחנו צריכים למרכז את התווית במקרה שעברנו מתשעה עד 10 מצביע ואנחנו כבר עברנו את זה. אז אנו מחשבים את x ו-y-קואורדינטות של התווית אשר יהיה לקבל רוחב והגובה של החלון. אמנם, אנחנו יכולים גם פשוט להשתמש קבועי רוחב וגובים חשיש שהוגדר למעלה. כמו כן, אנו מקבלים את הרוחב וגובה של התווית ומתחלקים כי על ידי 2 עד מרכז. ולאחר מכן אנו משתמשים במיקום הגדר למעשה לשים אותו במיקום זה. אז זהו זה ללוח תוצאות init. על אישור. כדור אז init הולך להיות דומה מאוד לinit משוטים גם כן. אנו רואים כאן שאנחנו משתמשים newgoval על מנת להפעלת כדור חדש. וכאן אנו משתמשים 2 פעמים הרדיוס כרוחבו של הכדור, ו2 פעמים הרדיוס כמו גובו של הכדור. עכשיו, גם לnewgoval, x ו קואורדינטת y שאנו עוברים בהולכים כדי להתייחס לפינה השמאלית העליונה של כדור, שהוא למעשה מחוץ לכדור עצמו. אז על מנת לקבל את הכדור בדיוק מרוכז בלוח, אנחנו צריכים לעבור רוחב חלקי 2 למרכז, ו אחר כך להפחית את הרדיוס כדי לדחוף המרכז בפועל את הכדור לתוך מרכז הלוח. ואנחנו עושים את אותו דבר בדיוק עבור ציר ה-Y, למעט באמצעות גובה במקום רוחב. כך שממקם את הכדור במרכז. וזה יוצר מופע הכדור, קבע את צבע שחור, מלא את הכדור, לבסוף להוסיף אותו ל חלון ולהחזיר אותו. וזהו זה לאתחול את הכדור. אז עכשיו בואו נסתכל על init לבנים שהוא מעט יותר מסובך, אבל זה די בדומה להנעת init. עכשיו, ראשון שאנחנו צריכים להבין רוחבו של כל לבנים. זכור שיש לנו קבוע הנקרא שיחות המפרטת את מספר העמודות של לבנים שיש לנו. אז, אנחנו הולכים כדי לקבוע את הרוחב בלבנה אחת על ידי לקיחה את הרוחב של הלוח כולו, הפחתה את גודלו של הפער שלנו - שחשיש מוגדר למעלה ומתייחס למספר הפיקסלים ש צריך להיות בין כל לבנה - וכך אנחנו הולכים לקבל סכום כולל של פעמים פער קוראים פיקסלים ריקים ב שורה אחת. וזה יהיה גם להתייחס לכמה ריק פיקסלים לימין ומהשמאל עזב את הטור ולבנים עמודה ימני. אז לחסר את פיקסלים ריקים אלה משאיר אותנו עם מספר הפיקסלים ש לבנים בעצם שימוש. ולאחר מכן אנו מחלקים בשיחות כדי לקבל מספר פיקסלים ללבנים. אז הנה אנחנו מגדירים מערך שרק מציין את הצבעים שאנחנו רוצים עבור כל שורה של לבנים. אם היו לנו יותר שורות של לבנים מ צבעים שאנו שצוינו, נראים שאנחנו פשוט לולאה חזרה סביב ו להשתמש באדום שוב, ואז כתום ו צהוב וכן הלאה. אז, כפי שרמזי המפרט להגדיר p-, אנחנו הולך לולאה על כל השורות ו עמודות של הלבנים. אבל לפני שהלולאה על העמודות, אנחנו רואה כאן שאנחנו מפרטים את מיקום Y של כל לבנה בשורה מסוימת. אנחנו יכולים גם להעביר את זה לשנייה ללולאה, אבל אז היינו רק להיות עושה את החישוב שוב ושוב שוב, כאשר אנו לא צריכים. אז את מיקום Y של הלבנים הולך להיות שולי, שהוא חשיש הגדיר למעלה ופשוט מתייחס ל חלל שבין החלק העליון של הלוח ו תחילתו של כל הלבנים. ואנחנו הולכים להוסיף לזה את השורה שאנחנו בזמני השיא לבנים בודדים בתוספת הפער כלומר בין כל לבנים. אז זה גם אנכי פער בין כל לבנה. אז זה נותן לנו את הקואורדינטה y של הלבנים. אז הנה אנחנו הולכים כדי לחשב קואורדינטת x של הלבנים. עכשיו, יש לנו פער מחולק 2 מאז, זוכר את העבר, אמרתי כי ב בצד השמאלי של הלוח, אנחנו הולכים להשאיר רווח קטן. אז הפער חלקי 2 הוא שטח זה. ולאחר מכן אנחנו מוסיפים לזה את העמודה שאנחנו בזמנים בתוספת רוחב פער, שבו רוחב הוא כמות השטח שלבנה אחת לוקחת ו אז פער הוא המרחב בין כל לבנים. כך שמחשב את קואורדינטת x של הלבנים. עכשיו אנחנו רק צריכים להפעלת בהתחשב בכך שלבנים x ו-y-לתאם שימוש ברוחב שאנחנו חושב לכל גובה לבנים, והפסקה שהוא חשיש העליון שהוגדר למעלה. אנו קובעים את הצבע הלבנה. שים לב שאנחנו משתמשים במערך הצבעים שלנו ו אנחנו עוברים בשורה שהיו על צבעי mod num שהוא הולך לעשות שלנו לעטוף חזרה סביב לאדום אם יש יותר שורות מצבעים. לבסוף, אנו נמלאים בלבנים לצבוע ולהוסיף אותו לחלון. וזהו זה. אז, זהו זה לכולנו שיטות אתחול. עכשיו אנחנו צריכים להסתכל בעת ש לולאה שהייתה עליך למלא פנימה אז הנה אנו רואים שזה בזמן שלנו לולאה כי הוא הולך להמשיך עד משחק נגמר, שגם אמצעים גמר חיי או גמר של לבנים. דבר אז קודם כל יש לנו הוא חכה ללחץ. אז את המשחק מחכה לנו בעצם לחץ לפני שהכדור מתחיל לנוע. ואז אנחנו הולכים להפחת חיים. אז אם היו לנו שלושה חייהם, עכשיו אנחנו עד שתי ניפשות, אנחנו משתמשים חיים שלישיים. אנחנו הולכים למרכז הכדור. אז עכשיו, זה לא ממש הולך לעזור לנו בחיים הראשונים שאנחנו משחקים מאז את הכדור כבר הולך כבר מרוכז מכשאנו מופעיו. אבל אנחנו רואים כאשר אנחנו בסופו של דבר לאבד את חיים ולולאה בחזרה בסביבה, אז אנחנו הולך רוצה recenter את הכדור מ החלק התחתון של הלוח חזרה ל המרכז. אז, עכשיו כאן אנחנו צריכים לייצר מהירות x של הכדור. וגם, כמו לכל המפרט, אנחנו משתמשים ברנד ד 48 ליצור כמה מספרים אקראיים כדי לציין את המהירות. אנחנו מוסיפים אחד לכי מאז שאנחנו פשוט רוצה את המהירות בטווח של אחד לשני במקום אפס לאחד. לבסוף, אנו משתמשים ברנד ד 48 שוב ב על מנת לקבוע אם הכדור הוא הולך לעבור לשמאל או הנכון להתחיל. rand אז ד 48 מחזיר מספר אקראי בין אפס ואחד, וזאת על ידי שואל אם זה פחות מ 0.5, יש לנו 50 50 סיכוי של מיתוג המהירות של הכדור להיות שלילי. לבסוף, אנו קובעים את המהירות האנכית של את הכדור רק כדי להיות חלק קבוע. אנחנו בוחרים שלוש. ועכשיו יש לנו לולאה אחרת. אז לולאה פנימית זה היא הולך להמשיך. שים לב כאן, בעוד שלבנים הוא גדול מאפס - כך שאם אנחנו נגמרים של לבנים, יש לנו ניצחתי את המשחק ואנחנו יכולים לפרוץ את המעגל הזה - וכל קבל כדור y פחות מגובה מינוס 2 פעמים הרדיוס. אז מה זה הוא ההכרה הוא אם כדור קורה ללכת בעבר ההנעה, ב אשר למקרה שאיבדת את חייו. מחפש בתוך זה ללולאה שיש לנו הבדיקה לאירוע עכבר. וכך, אם יש אירוע עכבר, כי אומר שאנחנו רוצים לבדוק כדי לראות אם העכבר התרגש, ואם העכבר התרגש, אנו רוצים לקבל את ההנעה לשמור על קשר עם העכבר. לכן, כדי לעשות את זה, אנו מחשבים חדשים עמדתה של ההנעה, אשר עומדת כדי לתפוס את עמדתו של העכבר - אשר תופס את העמדה באמצעות אירוע שהועברנו - ואז אנחנו הולכים להחסיר את רוחב ההנעה חלקי 2, ולכן נשאר ההנעה מרוכזת על העכבר במקום בצד השמאל של ההנעה להישאר מרוכז. אז עכשיו אנחנו גם רוצים להיות בטוחים שאנחנו לא יעבור על צד השמאל או ימין הצד השני של הלוח. ואז הנה אנחנו רק בודקים אם ההנעה תהיה מהצד השמאלי של הלוח, פשוט מקל אותו לצד השמאל. וכאן אנחנו בודקים אם ההנעה יהיה על צד ימין של לוח, פשוט לתקוע אותו לצד ימין. ולבסוף, אנו למעשה להגדיר מיקומו של המשוט. עכשיו, אם לא הייתה תנועת עכבר, זה אומר שאנחנו הולכים רוצה להזיז את הכדור. וכך כבר יש לנו x ומהירות y של הכדור וכך אנחנו עוברים את זה. אבל עכשיו אנחנו רוצים לזהות כמה דברים. אז הנה אנחנו מזהים אם פגעו או בצד השמאל או ימין של לוח, אנחנו רוצים את הכדור כדי להקפיץ. וכך, במקרה זה, אנו קובעים מהירות x למהירות x שלילית. אם הכדור פגע בחלק העליון של הלוח, אז אנחנו גם רוצים להקפיץ הכדור. אבל עכשיו אנחנו רוצים לשנות מהירות y. שים לב שאין לנו תנאים ל הכדור פגע בחלק התחתון של לוח מאז שכבר נתפס עד כאן ובאילו לולאה זו. לבסוף, ברצוננו לגלות כמה התנגשויות שבו אם פגע הכדור גם ההנעה או הלבנים, אנחנו רוצים לעשות כמה דברים מקרה מיוחדים. אז אם לא הייתה התנגשות, שבו מקרה אובייקטים לא יהיו ריקים, ולאחר מכן, אם האובייקט פגע ההנעה, הייתי עושה זאת רק רוצה להקפיץ את הכדור. והנה, גם, אנו קובעים את מיקומו של את הכדור בדיוק מעל להנעה. שים לב שאנחנו לוקחים את מיקום x של את הכדור ופשוט שימוש חוזר זה. אבל כאן אנחנו מקבלים את מיקום Y של ההנעה והזזת הכדור מעל להנעה. מדובר במקרה מיוחד, כך שהכדור לא פגע בהנעה ולאחר מכן, לפני שיהיה מסוגל להעביר את ההנעה, עוד לולאה הולכת מסביב ו הוא חושב שהוא עדיין בלוח ו כך מהירות y מקבל להגדיר חזרה ל שלילי ולאחר מכן את הכדור רק סוג מקלות מקפצים על ההנעה. לכן, אם אנחנו לא פגעו בהנעה, אז אנחנו גם רוצים לבדוק אם פגע בלבנה. ואז זה איך אנחנו יכולים לבדוק כדי לראות אם פגעו לבנה. אנחנו צריכים לבדוק את זה כי אנחנו יכולים למעשה פגע בתווית ואנחנו לא רוצה להסיר את התווית. אז אם פגע לבנים, אנחנו יכולים להסיר את זה לבנים מהחלון, המפחית הספירה של הלבנים שלנו, להגדיל שלנו מספר הנקודות, ועכשיו אנחנו צריכים לעדכן את לוח תוצאות וזה בדיוק אותו הדבר כמו שראינו קודם לכן, כאשר ראינו לוח תוצאות init. אבל עכשיו אנחנו רק מעדכנים לוח תוצאות מאז ששינינו את מספר הנקודות. ואת זה צריך עכשיו להציג כי אנחנו פוגעים הפסקה נוספת. ולבסוף, אם פגעו לבנים אנחנו גם רוצים להקפיץ. אז לבסוף, אנחנו עוצרים רק כדי ש הכדור לא זז סופר מהיר ואנחנו למעשה יכול להכות אותו עם ההנעה שלנו. וזה פחות או יותר אותו. אז עכשיו אנחנו היית עושה לולאה חזרה לחלק העליון של הלולאה בזמן הזה וימשיך עד או שאנחנו מאבדים חיים או גמר של לבנים. מה קורה אם אנחנו מאבדים את חיים? ואז אנחנו הולכים לצאת בזמן הזה לולאה, ואנו רואים את רצון לולאה לגבות לחלק העליון של תוך הלולאה החיצונית. במקרה כזה, אנחנו הולכים לבצע זה להגדיר שוב. וזה להגדיר הולך להיות לנו לחכות עבור קליק, פחת המספר שלנו של חיי, recenter הכדור, לחשב מחדש מהירות x ו-y, ו לאחר מכן לחדש את המשחק. וכך, שיימשך עד שני לבנים בסופו להיות פחות מ או שווה לאפס - ובמקרה זה שנצחנו את המשחק - או חיי הוא פחות מאפס, שבו למקרה שאיבדנו את המשחק. אז, ברגע שזה המצב, אנחנו נפרוץ של כי בעוד לולאה, ואנו מגיעים לכאן לאן אנחנו הולכים לחכות ללחיצה לפני היציאה למשחק, כך ש משחק לא רק באופן מיידי סוגר עלינו. ולבסוף נסגור חלון וזהו זה. השם שלי הוא רוב, וזו הייתה בריחה.