ספריית Arcade של Python מציעה דרך פשוטה ויעילה ליישם רמות משחק בפרויקטים שלך.

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

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

צור משחק פשוט

לפני שמתחילים, ודא שיש לך pip מותקן במכשיר שלך. השתמש בפקודה זו כדי להתקין את מִקמֶרֶת סִפְרִיָה:

ארקייד להתקין pip

צור משחק בסיסי שבו השחקן יכול לנוע ימינה ושמאלה.

הקוד המשמש במאמר זה זמין כאן מאגר GitHub והוא בחינם עבורך לשימוש תחת רישיון MIT.

נצל את היכולות של ספריית ארקייד כדי לטפל בקלט משתמש ולעדכן את מצב המשחק בהתאם. צור קובץ חדש בשם simple-game.py והוסיפו את הקוד הבא:

יְבוּא מִקמֶרֶת

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

מעמדהמשחק שלי(מִקמֶרֶת. חַלוֹן):
def__init__(עצמי):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "המשחק שלי")
arcade.set_background_color (arcade.color. לבן)
self.player_x = SCREEN_WIDTH // 2

defon_draw(עצמי):


arcade.start_render()
arcade.draw_rectangle_filled (self.player_x, 50, 50, 50, arcade.color. כְּחוֹל)

defon_key_press(עצמי, מפתח, משנה):
אם key == arcade.key. שמאלה:
self.player_x -= 10
אליף key == arcade.key. ימין:
self.player_x += 10

defon_key_release(עצמי, מפתח, משנה):
אם key == arcade.key. שמאלה אוֹ key == arcade.key. ימין:
לַעֲבוֹר

defרָאשִׁי():
משחק = MyGame()
arcade.run()

אם __שם__ == "__רָאשִׁי__":
רָאשִׁי()

להלן הפלט:

צור רמות מרובות

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

מעמדLevelOne:
def__init__(עצמי):
self.player_x = SCREEN_WIDTH // 2

defעדכון(עצמי):
לַעֲבוֹר

defלצייר(עצמי):
arcade.draw_rectangle_filled (self.player_x, 50, 50, 50, arcade.color. כְּחוֹל)

מעמדרמה שתיים:
def__init__(עצמי):
self.player_x = SCREEN_WIDTH // 2

defעדכון(עצמי):
לַעֲבוֹר

defלצייר(עצמי):
arcade.draw_rectangle_filled (self.player_x, 50, 50, 50, arcade.color. אָדוֹם)

מעמדהמשחק שלי(מִקמֶרֶת. חַלוֹן):
def__init__(עצמי):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "המשחק שלי")
arcade.set_background_color (arcade.color. לבן)
self.levels = [LevelOne(), LevelTwo()]
self.current_level = 0

defon_draw(עצמי):
arcade.start_render()
self.levels[self.current_level].draw()

defon_key_press(עצמי, מפתח, משנה):
אם key == arcade.key. שמאלה:
self.levels[self.current_level].player_x -= 10
אליף key == arcade.key. ימין:
self.levels[self.current_level].player_x += 10

defon_key_release(עצמי, מפתח, משנה):
אם key == arcade.key. שמאלה אוֹ key == arcade.key. ימין:
לַעֲבוֹר

defעדכון(עצמי, זמן_דלתא):
self.levels[self.current_level].update()

defרָאשִׁי():
משחק = MyGame()
arcade.run()

אם __שם__ == "__רָאשִׁי__":
רָאשִׁי()

מעבר בין רמות

כדי ליצור מעבר חלק בין רמות, זהה מתי השחקן חוצה גבול מסוים. אתה יכול לעקוב אחר תנועת השחקן, וברגע שהשחקן חצה את הגבול, אתה יכול לעבור לשלב הבא. צור קובץ חדש בשם transition-between-levels.py והוסיפו את הקוד עם העדכונים הבאים:

מעמדהמשחק שלי(מִקמֶרֶת. חַלוֹן):
# ...

defעדכון(עצמי, זמן_דלתא):
self.levels[self.current_level].update()

# בדוק אם השחקן חצה את הגבול
אם self.levels[self.current_level].player_x < 0:
self.current_level += 1
self.current_level %= len (self.levels)
self.levels[self.current_level].player_x = SCREEN_WIDTH
אליף self.levels[self.current_level].player_x > SCREEN_WIDTH:
self.current_level += 1
self.current_level %= len (self.levels)
self.levels[self.current_level].player_x = 0

# ...

להלן הפלט:

כולל תכונות נוספות

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

יעדים

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

מעמדמַטָרָה:
def__init__(עצמי, x, y):
self.x = x
self.y = y
self.radius = 20

defלצייר(עצמי):
arcade.draw_circle_filled (self.x, self.y, self.radius, arcade.color. ירוק)

מעמדLevelOne:
def__init__(עצמי):
self.objective = Objective(600, 400)
# ...

defעדכון(עצמי):
# בדוק אם השחקן מגיע ליעד
אם arcade.check_for_colision (self.player, self.objective):
self.complete_objective()

defלצייר(עצמי):
self.objective.draw()
# ...

defאובייקט_שלם(עצמי):
# קוד לטיפול בהשלמה אובייקטיבית
לַעֲבוֹר

פריטי אספנות

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

מעמדפריט אספנות:
def__init__(עצמי, x, y):
self.x = x
self.y = y
self.radius = 10
self.is_collected = שֶׁקֶר

defלצייר(עצמי):
אםלֹא self.is_collected:
arcade.draw_circle_filled (self.x, self.y, self.radius, arcade.color. תפוז)

defלאסוף(עצמי):
self.is_collected = נָכוֹן
# קוד לטיפול בהשפעת האספנות על השחקן

מעמדLevelOne:
def__init__(עצמי):
self.collectible = Collectible(300, 300)
# ...

defעדכון(עצמי):
# בדוק אם השחקן אוסף את הפריט
אם arcade.check_for_collision (self.player, self.collectible):
self.collectible.collect()

defלצייר(עצמי):
self.collectible.draw()
# ...

מכשולים

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

מעמדמִכשׁוֹל:
def__init__(עצמי, x, y, רוחב, גובה):
self.x = x
self.y = y
self.width = רוחב
self.height = גובה

defלצייר(עצמי):
arcade.draw_rectangle_filled (self.x, self.y, self.width, self.height, arcade.color. אפור)

מעמדLevelOne:
def__init__(עצמי):
self.obstacles = [מכשול(400, 200, 100, 50), מכשול(600, 500, 80, 120)]
# ...

כוח-אפים

כוח-אפים יכולים לשפר את היכולות של השחקן או לספק יתרונות זמניים. הנה דוגמה ליישום תכונת הפעלה:

מעמדPowerUp:
def__init__(עצמי, x, y):
self.x = x
self.y = y
self.radius = 10
self.is_active = נָכוֹן

defלצייר(עצמי):
אם self.is_active:
arcade.draw_circle_filled (self.x, self.y, self.radius, arcade.color. צהוב)

defactive_power_up(עצמי):
self.is_active = נָכוֹן

defdeactivate_power_up(עצמי):
self.is_active = שֶׁקֶר

מעמדLevelOne:
def__init__(עצמי):
self.power_up = PowerUp(200, 200)
# ...

defעדכון(עצמי):
# בדוק אם הנגן מתנגש עם ההפעלה
אם arcade.check_for_collision (self.player, self.power_up):
self.player.activate_power_up()
self.power_up.deactivate_power_up()

defלצייר(עצמי):
self.power_up.draw()
# ...

שיטות עבודה מומלצות לעיצוב ברמה

עיצוב הרמה ממלא תפקיד מכריע ביצירת חוויות משחק מרתקות ומהנות. הנה כמה שיטות עבודה מומלצות שכדאי לקחת בחשבון בעת ​​עיצוב רמות למשחק שלך:

מטרות ברורות

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

עקומת קושי הדרגתית

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

בהירות חזותית

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

בדיקות משחק ואיטרציה

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

איזון תגמול ואתגר

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

הפוך את המשחקים למעניינים יותר עם רמות

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