חפצים זזים אקראיים הופכים את המשחקים למלהיבים ומאתגרים יותר. למד כיצד לשלב אותו בפרויקטי Pygame שלך.

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

צור משחק פשוט

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

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

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

הוסף מספר אובייקטים נעים

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

object_width, object_height = 30, 30
object_speed_range = (2, 7)
objects = []

defcreate_random_object():
return {
'x': random.randint(0, screen_width - object_width),

instagram viewer

'y': random.randint(0, screen_height - object_height),
'speed': random.randint(*object_speed_range)
}

for _ in range(5):
objects.append(create_random_object())

defdraw_object(obj):
obj_dim = (obj['x'], obj['y'], object_width, object_height)
pygame.draw.rect(screen, WHITE, obj_dim)

# Game loop
while running:
screen.fill((0, 0, 0))

#... (previous code)

for obj in objects:
obj['x'] += obj['speed']
if obj['x'] > screen_width:
obj['x'] = -object_width

draw_object(obj)

pygame.display.update()
clock.tick(60)

pygame.quit()

להלן הפלט:

יישום אלגוריתם תנועה אקראית

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

# Random Movement Algorithm
defupdate_random_movement(obj):
# Change the direction randomly
if random.random() < 0.01:
obj['speed'] = -obj['speed']

# Game loop
while running:
#... (previous code)

for obj in objects:
obj['x'] += obj['speed']
if obj['x'] > screen_width:
obj['x'] = -object_width

update_random_movement(obj)
draw_object(obj)

pygame.display.update()
clock.tick(60)

pygame.quit()

לגרום לאובייקטים לנוע לעבר הנגן

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

import math

# Objects Moving Towards Player
defmove_towards_player(obj):
player_center_x = player_x + player_width // 2
player_center_y = player_y + player_height // 2
object_center_x = obj['x'] + object_width // 2
object_center_y = obj['y'] + object_height // 2

angle1 = player_center_y - object_center_y
angle2 = player_center_x - object_center_x

angle = math.atan2(angle1, angle2)
obj['x'] += obj['speed'] * math.cos(angle)
obj['y'] += obj['speed'] * math.sin(angle)

# Game loop
while running:
#... (previous code)

for obj in objects:
obj['x'] += obj['speed']
if obj['x'] > screen_width:
obj['x'] = -object_width

move_towards_player(obj)
draw_object(obj)

pygame.display.update()
clock.tick(60)

pygame.quit()

לגרום לאובייקטים לזוז רק כאשר הנגן נכנס לסביבה

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

# Objects Start to Move When Player Enters Surroundings
surrounding_distance = 150

defshould_start_moving(obj):
surrounded1 = abs(obj['x'] - player_x) < surrounding_distance
surrounded2 = abs(obj['y'] - player_y) < surrounding_distance
return surrounded1 or surrounded2

# Game loop
while running:
#... (previous code)

for obj in objects:
if should_start_moving(obj):
obj['x'] += obj['speed']
if obj['x'] > screen_width:
obj['x'] = -object_width

update_random_movement(obj)
move_towards_player(obj)

draw_object(obj)

pygame.display.update()
clock.tick(60)

pygame.quit()

זיהוי התנגשות ואינטראקציה

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

# Collision Detection and Interaction
defis_collision(obj):

condition1 = player_x + player_width > obj['x']
condition2 = player_x < obj['x'] + object_width
condition3 = player_y + player_height > obj['y']
condition4 = player_y < obj['y'] + object_height
return ( condition1 and condition2 and condition3 and condition4)

# Game loop
while running:
#... (previous code)

for obj in objects:
if should_start_moving(obj):
obj['x'] += obj['speed']
if obj['x'] > screen_width:
obj['x'] = -object_width

update_random_movement(obj)
move_towards_player(obj)

if is_collision(obj):
objects.remove(obj)

draw_object(obj)

pygame.display.update()
clock.tick(60)

pygame.quit()

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

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

ניקוד והתקדמות

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

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

כוח-אפים ובונוסים

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

היו יצירתיים עם ההשפעות של הכוח-אפים האלה כדי להוסיף עומק אסטרטגי למשחק.

AI והתנהגות של האויב

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

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

פריטי אספנות ותגמולים

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

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

בעת שילוב עצמים נעים אקראיים לתוך Pygame שלך, ביצוע שיטות עבודה מומלצות אלה יעזור לך ליצור חווית משחק מאוזנת ומלוטשת היטב:

קושי באיזון

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

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

אופטימיזציה לביצועים

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

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

בדיקה והתאמה

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

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

אקראיות עם שליטה

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

אקראיות מבוקרת מבטיחה שהמשחק יישאר מאתגר ומהנה מבלי להיות כאוטי מדי.

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

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