Excitebike הוא משחק גלילה צדדי בו אתה מנווט עם אופנוע מעל קפיצות, מתמרן סביב מכשולים ומאיץ לעבר קו הסיום.
נינטנדו השיקה לראשונה את משחק המירוצים BMX הזה עבור ה-NES. משם, החברה עיצבה את Excitebike ושחררה אותו ב-N64 ובסופו של דבר, ב-Wii.
כבר לא קיימות הרבה קונסולות NES, מה שהופך את המשחק ב-Excitebike שוב לקשה להשיג. הודות לכמה מעריצי רטרו במגזין Wireframe, קטע קוד של Python יכול ליצור מחדש את הקלאסיקה הזו של NES לשעות של כיף על ה-Raspberry Pi או המחשב הביתי שלך.
קבלת הקוד והגדרה
למרות שאתה יכול להשתמש בננו או ב-vim כדי לערוך את קוד הפיתון שלך, תרצה לנצל את התכונות המלאות עורך טקסט או IDE.
תצטרך להתקין את Pygame Zero כדי לתמוך בתכונות שנבנו בתוך ההומאז' הזה ל-Excitebike. Pygame Zero מכיל מודולי Python עבור יוצרי המשחקים להתמקד מבלי לחזור על יסודות פשוטים.
אם אין לך python3 מותקן במחשב שלך, אתה יכול להוריד את הגרסה האחרונה מ-Python ישירות. אתה גם תרצה ודא שמותקן PIP גַם.
כשהגרסה העדכנית ביותר של Python ו-PIP מותקנת, פתח את מסוף PowerShell או Linux שלך והקלד:
pip3 להתקין pgzero
לבסוף, תצטרך לאסוף עותק של קוד Python ממאגר GitHub של מגזין Wireframe. הקלד את הפקודה הבאה בטרמינל:
git שיבוט https://github.com/Wireframe-Magazine/Wireframe-66.git
לחילופין, אתה יכול הורד את הקוד המכווץ ישירות מדף Wireframe GitHub.
פירוק הקוד
כדי להבין מה הקוד עושה, תחילה הפעל את משחק Excitebike. עשה זאת על ידי ניווט לקוד המקור ולאחר מכן הפעלתו באמצעות Pygame Zero:
CD Wireframe-66/מָקוֹר-קוד-excitebike/
pgzrunexitebike.py
לאחר מכן תוכל לפתוח את הקובץ exitebike.py עם עורך טקסט כדי להציג את הקוד.
ה לצייר הפונקציה מציירת את הרקע כאשר תמונת האופניים זזה. א"בליט" מתייחס לבלוק שמצויר על המסך. המילה, "רקע כללי," מתייחס לתמונת הרקע (קישור התמונות לבלוק הרקע הוא הודות למודולי Pygame Zero המיובאים).
defלצייר():
screen.blit("רקע כללי", (0, 0))
drawTrack()
אופניים.לצייר()
screen.draw.text("זמן הקפה: "+str (int (time.time() - startTime)), (20, 555),color=(255,255,255), fontsize=50)
screen.draw.text("הקפה אחרונה: "+str (lastLap), למעלה מימין = (780, 555),color=(255,255,255), fontsize=50)
תבחין גם בחישובים של זמן ההקפה וההקפה האחרונה (זה מיוצג על ידי מונה הזמן בתחתית המסך). זמן ההקפה מחשב כל הזמן את ההפרש בין הלחיצה הראשונית על מקש החץ הימני (שעת התחלה) לבין השעה הנוכחית.
ההקפה האחרונה היא חישוב דומה. במקום שעת ההתחלה, הזמן מחושב מרגע שהאופנוע עובר מיקום מסלול מוגדר מראש (מוזכר כ trackPos < -4800 בקוד). הפריטים הבאים במרכאות מייצגים תמונה.
קוד זה מצייר בלוקי תמונה על המסך במרווחים מסוימים ובמיקומים מסוימים על המסך. תמונת הקהל שסופקה ברוחב 100 פיקסלים בלבד. עם זאת, הקוד שלמטה אומר למחשב מתי לצייר את התמונה כך שתיראה כאילו יש קהל מדומה מאחורי האופנוע בזמן שהוא נע.
תמונות הסלע מוצגות על המסך בשני חלקים. שורת הקוד השנייה והשלישית, להלן, פועלות יחד כדי לדמות את הנוף בצורה מסודרת.
לאחר שתיצור עותק גיבוי של קוד הפיתון, נסה לשנות את המספרים שלהלן כדי לראות מה קורה לסלעים על המסך!
screen.blit("קהל1", ((t*100)+trackOffset-100, 0))
screen.blit("סלע1", ((t*100)+trackOffset-100, 270))
screen.blit("סלע1", ((t*100)+trackOffset-50, 270))
האם אתה רוצה להחליף את האופנוע שלך במונסטר משאית, ארבע גלגלים או רכב אחר? אולי אתה רוצה לרוץ עם חד קרן עד קו הסיום?
כל מה שאתה צריך לעשות הוא לצייר תמונה בגודל 50x50px (עם רקע שקוף). לאחר מכן, הצב את הקובץ הזה (picture.png) ב-'תמונות' תיקייה (בתוך קוד מקור-excitebike תיקייה). תרצה ליצור שתי תמונות (אחת עם גובה מעט מוגדל) כדי להוסיף קצת ריאליזם. כל מה שאתה צריך לעשות הוא לשנות את ההפניה ל'אופניים0' כאן:
אופניים = שחקן('אופניים 0', מרכז=(150, 350), עוגן=('מֶרְכָּז', 'תַחתִית'))
הקפידו גם לבצע פעולת חיפוש והחלפה בשם התמונה (ללא סיומת התמונה).
checkBikeRamp() היא הפונקציה שעושה את העבודה כדי לחשב את ציר ה-Y כך שהאופנוע שלך (או המשאית) יעלה במעלה הרמפה (ונקבל קצת אוויר רציני אם יתמזל מזלך). ה מקלדת.מימין ו מקלדת.שמאל פרמטרים מוגדרים ב- עדכון() פוּנקצִיָה.
סיביות קוד אלו אומרים למחשב להאט את האופנוע או להאיץ (בהתאם לאיזה מקש המשתמש לוחץ במקלדת). תרגום: ככל שהאופנוע שלך נע מהר יותר, כך מספר ציר ה-Y גבוה יותר (או קפיצה גדולה מאוד).
לרוחב, ה on_key_down (מפתח) הפונקציה תשלח את האופנוע שלך לצלילה.
אם key.name == "מטה":
bike.direction = 1
bike.laneY = לְהַגבִּיל(bike.laneY + 50, 375, 525)
bike.y += bike.direction
ה muckLane פרמטר יאט את קצב האופנוע שלך באמצעות החישוב הבא:
muckLane = int((bike.laneY-375)/50)+1
שורה 66 של הקוד קובעת מתי להציג את תמונת ה'זבל' על המסך. כעת, כשהמחשב יודע מתי האופנוע שלך יעבור על הבוץ, הוא יאט את מהירות האופנוע שלך לחצי כשאתה עובר על הבוץ על המסלול. שנה את ערך muckLane מ-/50 ל-/25 או /75 כדי לראות מה יקרה אחר כך.
רייסרים (אהמ, מתכנתי פייתון)! תפעיל את המנועים שלך!
גם אם לא נוח לך לתכנת את ההומאז' הזה ל-Excitebike מאפס, הקוד הזה הוא עדיין פרימר נהדר. על ידי כוונון זה, והבנת ההשפעה החזותית של השינויים, אתה יכול ללמוד הרבה. האם תנסה להוסיף עוד תכונות או רוסי AI במשחק שלך? לך על זה!
עם קצת תרגול פייתון מתחת לחגורה, רעיון נוסף שתוכל לנסות הוא הוספת רמות שונות ברגע שאתה עובר את קו הסיום לאחר 4 או 5 פעמים. כמו כן, ייתכן שתרצה להוסיף תגמולים עבור המקום הראשון, השני והשלישי. אם אתה במקום הראשון, הוסף גם קובץ אודיו מעודד קהל! יש כל כך הרבה אפשרויות.
כשאתה מרוצה מהשיפורים שלך ב-Excitebike, למה שלא תתמודד עם יצירת משחק הרפתקאות טקסט? יש הרבה יצירות שונות שיבטיחו שתלמד משהו מרגש במשך שעות, ימים או אפילו שבועות!