צור הומאז' ל-Excitebike באמצעות Python

צור הומאז' ל-Excitebike באמצעות Python

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





נינטנדו השיקה לראשונה את משחק המירוצים BMX הזה עבור ה-NES. משם, החברה עיצבה את Excitebike ושחררה אותו ב-N64 ובסופו של דבר, ב-Wii.





כבר לא קיימות הרבה קונסולות NES, מה שהופך את המשחק ב-Excitebike שוב לקשה להשיג. הודות לכמה מעריצי רטרו במגזין Wireframe, קטע קוד של Python יכול ליצור מחדש את הקלאסיקה הזו של NES לשעות של כיף על ה-Raspberry Pi או המחשב הביתי שלך.





כיצד להגדיל את ייעוץ הווידיאו RAM ייעודי ל- Windows 10
איפור של סרטון היום

קבלת הקוד והגדרה

למרות שאתה יכול להשתמש בננו או ב-vim כדי לערוך את קוד הפיתון שלך, תרצה לנצל את התכונות המלאות עורך טקסט או IDE .

תצטרך להתקין את Pygame Zero כדי לתמוך בתכונות שנבנו בתוך ההומאז' הזה ל-Excitebike. Pygame Zero מכיל מודולי Python עבור יוצרי המשחקים להתמקד מבלי לחזור על יסודות פשוטים.



אם אין לך python3 מותקן במחשב שלך, אתה יכול להוריד את הגרסה האחרונה מ-Python ישירות. אתה גם תרצה ודא שמותקן PIP גַם.

כשהגרסה העדכנית ביותר של Python ו-PIP מותקנת, פתח את מסוף PowerShell או Linux שלך והקלד:





pip3 install pgzero 

לבסוף, תצטרך לאסוף עותק של קוד Python ממאגר GitHub של מגזין Wireframe. הקלד את הפקודה הבאה בטרמינל:

git clone https://github.com/Wireframe-Magazine/Wireframe-66.git

לחילופין, אתה יכול הורד את הקוד המכווץ ישירות מדף Wireframe GitHub.





פירוק הקוד

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

cd Wireframe-66/source-code-excitebike/ 
pgzrun exitebike.py

לאחר מכן תוכל לפתוח את הקובץ exitebike.py עם עורך טקסט כדי להציג את הקוד.

  קטע קוד של excitebike python

ה לצייר הפונקציה מציירת את הרקע כאשר תמונת האופניים זזה. א ' שָׁהוּת ' מתייחס לבלוק שמצויר על המסך. המילה ' רקע כללי,' מתייחס לתמונת הרקע (קישור התמונות לבלוק הרקע הוא הודות למודולי Pygame Zero המיובאים).

היכן אוכל להדפיס בחינם
def draw(): 
screen.blit("background", (0, 0))
drawTrack()
bike.draw()
screen.draw.text("LAP TIME: "+str(int(time.time() - startTime)), (20, 555),color=(255,255,255) , fontsize=50)
screen.draw.text("LAST LAP: "+str(lastLap), topright = (780, 555),color=(255,255,255) , fontsize=50)

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

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

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

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

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

screen.blit("crowd1", ((t*100)+trackOffset-100, 0)) 
screen.blit("rock1", ((t*100)+trackOffset-100, 270))
screen.blit("rock1", ((t*100)+trackOffset-50, 270))

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

כל מה שאתה צריך לעשות הוא לצייר תמונה בגודל 50x50px (עם רקע שקוף). לאחר מכן, הצב את הקובץ הזה (picture.png) ב-' תמונות ' תיקייה (בתוך קוד מקור-excitebike תיקייה). תרצה ליצור שתי תמונות (אחת עם גובה מעט מוגדל) כדי להוסיף קצת ריאליזם. כל מה שאתה צריך לעשות הוא לשנות את ההפניה ל' תעשה את זה כאן:

bike = Actor('bike0', center=(150, 350), anchor=('center', 'bottom'))
  משחק פיתון excitebike עם משאית

הקפידו גם לבצע פעולת חיפוש והחלפה בשם התמונה (ללא סיומת התמונה).

checkBikeRamp() היא הפונקציה שעושה את העבודה כדי לחשב את ציר ה-Y כך שהאופנוע שלך (או המשאית) יעלה במעלה הרמפה (ונקבל קצת אוויר רציני אם יתמזל מזלך). ה מקלדת.מימין ו מקלדת.שמאל פרמטרים מוגדרים ב- עדכון() פוּנקצִיָה.

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

לרוחב, ה on_key_down(key) הפונקציה תשלח את האופנוע שלך לצלילה.

if key.name == "DOWN": 
bike.direction = 1
bike.laneY = limit(bike.laneY + 50, 375, 525)
bike.y += bike.direction

ה muckLane פרמטר יאט את קצב האופנוע שלך באמצעות החישוב הבא:

בקר xbox one מהבהב פעמיים ואז נכבה
muckLane = int((bike.laneY-375)/50)+1

שורה 66 של הקוד קובעת מתי להציג את תמונת ה'זבל' על המסך. כעת, כשהמחשב יודע מתי האופנוע שלך יעבור על הבוץ, הוא יאט את מהירות האופנוע שלך לחצי כשאתה עובר על הבוץ על המסלול. שנה את ערך muckLane מ-/50 ל-/25 או /75 כדי לראות מה יקרה אחר כך.

רייסרים (אהמ, מתכנתי פייתון)! תפעיל את המנועים שלך!

גם אם לא נוח לך לתכנת את ההומאז' הזה ל-Excitebike מאפס, הקוד הזה הוא עדיין פרימר נהדר. על ידי כוונון והבנת ההשפעה החזותית של השינויים, תוכל ללמוד הרבה. האם תנסה להוסיף עוד תכונות או רוסי AI במשחק שלך? לך על זה!

עם קצת תרגול Python מתחת לחגורה, רעיון נוסף שתוכל לנסות הוא הוספת רמות שונות ברגע שאתה עובר את קו הסיום לאחר 4 או 5 פעמים. כמו כן, ייתכן שתרצה להוסיף תגמולים עבור המקום הראשון, השני והשלישי. אם אתה במקום הראשון, הוסף גם קובץ אודיו מעודד קהל! יש כל כך הרבה אפשרויות.

כשאתה מרוצה מהשיפורים שלך ב-Excitebike, למה שלא תתמודד עם יצירת משחק הרפתקאות טקסט? יש הרבה יצירות שונות שיבטיחו שתלמד משהו מרגש במשך שעות, ימים או אפילו שבועות!