اجسام متحرک تصادفی بازی ها را هیجان انگیزتر و چالش برانگیزتر می کنند. یاد بگیرید که چگونه آن را در پروژه های Pygame خود بگنجانید.
Pygame، یک کتابخانه محبوب پایتون برای توسعه بازی، به شما امکان می دهد بازی های هیجان انگیز و تعاملی را به راحتی ایجاد کنید. یکی از راههای تقویت خلاقیتهای Pygame، اضافه کردن اشیاء متحرک تصادفی است. این اشیاء می توانند موانع، دشمنان، قدرت ها یا هر چیز دیگری باشند که به دنیای بازی شما پویایی می بخشد.
یک بازی ساده بسازید
با راهاندازی یک پنجره اصلی Pygame و اضافه کردن یک شی بازیکن به همراه چند پلتفرم شروع کنید. همچنین میتوانید با استفاده از کلیدهای جهتدار یا با استفاده از ورودیهای لمسی، حرکات اولیه بازیکن را اجرا کنید.
کد استفاده شده در این مقاله در این مخزن GitHub موجود است و برای استفاده شما تحت مجوز MIT رایگان است.
یک فایل جدید با نام simple-game.py ایجاد کنید و کد بازی اصلی خود را اضافه کنید.
چند شیء متحرک اضافه کنید
حالا که یک بازی ساده با یک شی بازیکن و پلتفرم دارید، چندین شی متحرک تصادفی را به بازی اضافه کنید. این اشیاء به صورت افقی در سراسر صفحه با سرعت های مختلف حرکت می کنند.
object_width, object_height = 30, 30
object_speed_range = (2, 7)
objects = []
def create_random_object():
return {
'x': random.randint(0, screen_width - object_width),
'y': random.randint(0, screen_height - object_height),
'speed': random.randint(*object_speed_range)
}
for _ in range(5):
objects.append(create_random_object())
def draw_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
def update_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
def move_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
def should_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
def is_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 شما باشد. در اینجا چند ایده اضافی برای ارتقای بازی خود به سطح بعدی وجود دارد:
امتیاز دهی و پیشرفت
بر اساس سطح دشواری یا نادر بودن اشیا، امتیازات مختلفی را به آنها اختصاص دهید. شما می توانید یک سیستم امتیازدهی ایجاد و نمایش دهید که به بازیکنان برای پیمایش موفقیت آمیز در میان اشیاء متحرک یا جمع آوری آیتم های خاص پاداش می دهد.
یک ردیاب پیشرفت را اجرا کنید که با دستیابی بازیکنان به امتیازات بالاتر، دشواری بازی را افزایش می دهد و آنها را درگیر و انگیزه برای پیشرفت نگه می دارد.
پاور آپ ها و جوایز
اشیاء ویژه ای ایجاد کنید که هنگام جمع آوری به بازیکن مزیت های موقتی بدهد. این قدرتها میتواند شامل افزایش سرعت، شکست ناپذیری یا حتی توانایی یخ زدن یا نابود کردن موقت سایر اشیاء باشد.
برای افزودن عمق استراتژیک به گیم پلی، با افکت های این قدرت-آپ ها خلاق باشید.
هوش مصنوعی و رفتار دشمن
الگوهای حرکتی پیچیده تری را برای اشیاء دشمن طراحی کنید تا اجتناب از آنها برای بازیکنان چالش برانگیزتر شود. الگوریتم های ساده هوش مصنوعی را پیاده سازی کنید تا دشمنان را وادار کنید که بازیکن را هوشمندانه تعقیب کنند یا در الگوهای هماهنگ حرکت کنند.
رفتارهای متفاوت دشمن، بازیکنان را سرپا نگه می دارد و از یکنواخت شدن بازی جلوگیری می کند.
کلکسیونی و جوایز
اقلام کلکسیونی را در سراسر دنیای بازی پراکنده کنید. اینها می توانند سکه، جواهرات یا هر آیتم موضوعی دیگری باشند. وقتی بازیکن تعداد مشخصی از این آیتم ها را جمع آوری می کند، می تواند سطوح، شخصیت ها یا حتی ویژگی های مخفی جدیدی را در بازی باز کند.
بهترین روش ها برای اضافه کردن اشیاء متحرک تصادفی
هنگام استفاده از اجسام متحرک تصادفی در Pygame خود، پیروی از این بهترین روش ها به شما کمک می کند تا یک تجربه بازی متعادل و صیقلی ایجاد کنید:
دشواری تعادل
الگوهای سرعت و حرکت اجسام متحرک تصادفی باید به دقت متعادل شوند تا چالشی منصفانه ارائه شود. از حرکت دادن خیلی سریع یا نامنظم اجسام خودداری کنید، زیرا ممکن است بازیکنان را ناامید کند و باعث شود بازی احساس ناعادلانه کند.
از سوی دیگر، اشیاء بسیار آهسته می توانند بازی را بسیار آسان و کمتر جذاب کنند.
بهینه سازی برای عملکرد
اگر بازی شما شامل تعداد زیادی اجسام متحرک تصادفی یا الگوریتم های حرکتی پیچیده است، برای بهبود عملکرد، کد را بهینه کنید. از ساختارهای داده و الگوریتم های کارآمد برای رسیدگی به برخوردها و محاسبات حرکتی استفاده کنید.
محاسبات غیر ضروری را به حداقل برسانید تا از گیم پلی روان و پاسخگو، به ویژه در دستگاه های قدیمی تر یا کم قدرت اطمینان حاصل کنید.
تست و اصلاح
بازی خود را به طور کامل با سناریوهای مختلف آزمایش کنید تا مطمئن شوید که اشیاء متحرک تصادفی به درستی با سایر عناصر بازی تعامل دارند. برای برخورد، تعامل با بازیکن و هرگونه رفتار حرکتی خاص تست کنید.
برای دستیابی به تجربه گیم پلی بهینه، سرعت، رفتار و الگوهای اشیا را بر اساس بازخورد تست بازی تنظیم کنید.
تصادفی با کنترل
اگرچه از اصطلاح “تصادفی” برای این اجسام متحرک استفاده می شود، داشتن تصادفی کامل ممکن است همیشه مطلوب نباشد. ترکیب تصادفی کنترل شده را در نظر بگیرید، جایی که حرکات یا الگوهای خاصی در محدوده یا مجموعه ای از احتمالات تعریف می شوند.
تصادفی بودن کنترل شده تضمین می کند که بازی بدون هرج و مرج بیش از حد چالش برانگیز و لذت بخش باقی می ماند.
جذابتر کردن بازیها با اشیاء متحرک تصادفی
اجسام متحرک تصادفی یک عنصر شگفتانگیز و غیرقابل پیشبینی به بازی شما اضافه میکنند و آن را پویاتر و جذابتر میکنند. آنها بازیکنان را روی انگشتان خود نگه می دارند و به بازتاب سریع و تفکر استراتژیک نیاز دارند. علاوه بر این، تنوع حرکات و تعاملات با این اشیا تضمین می کند که هیچ دو تجربه گیم پلی یکسان نیستند.