با اضافه کردن اجسام متحرک تصادفی، بازی های آرکید خود را لذت بخش تر و هیجان انگیزتر کنید.
اجسام متحرک تصادفی می توانند هیجان و غیرقابل پیش بینی بودن را برای بازی ها به ارمغان بیاورند. آنها را برای بازیکنان جذاب تر و چالش برانگیزتر می کند. کتابخانه Arcade Python یک راه ساده و کارآمد برای گنجاندن اجسام متحرک تصادفی در بازیهای شما ارائه میکند.
یک بازی ساده بسازید
قبل از شروع، مطمئن شوید که پیپ را روی دستگاه خود نصب کرده اید. برای نصب کتابخانه آرکید از این دستور استفاده کنید:
pip install arcade
پس از آن با استفاده از کلاس arcade.Window یک پنجره ایجاد کنید و رنگ پس زمینه را سفید قرار دهید.
کد استفاده شده در این مقاله در این مخزن GitHub موجود است و برای استفاده شما تحت مجوز MIT رایگان است.
موقعیت پخش کننده را به صورت افقی روی وسط صفحه تنظیم کنید و فاصله کمی از بالا اضافه کنید. شما می توانید حرکت بازیکن را با استفاده از کلیدهای جهت دار کنترل کنید.
در اینجا کد بازی اصلی ما آمده است:
import arcade
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
PLAYER_RADIUS = 15
class MyGame(arcade.Window):
def __init__(self, width, height):
super().__init__(width, height)
arcade.set_background_color(arcade.color.WHITE)
self.player_x = SCREEN_WIDTH // 2
self.player_y = PLAYER_RADIUS + 10
def on_draw(self):
arcade.start_render()
arcade.draw_circle_filled(self.player_x, self.player_y, PLAYER_RADIUS, arcade.color.BLUE)
def update(self, delta_time):
pass
def on_key_press(self, key, modifiers):
if key == arcade.key.LEFT:
self.player_x -= 5
elif key == arcade.key.RIGHT:
self.player_x += 5
if __name__ == "__main__":
game = MyGame(SCREEN_WIDTH, SCREEN_HEIGHT)
arcade.run()
اضافه کردن چندین شی
برای اضافه کردن اجسام متحرک تصادفی به بازی خود، فهرستی برای ذخیره موقعیت های جسم ایجاد کنید و آنها را در هر فریم به روز کنید. همچنین می توانید از اسپرایت به عنوان اشیا استفاده کنید.
در کد بازی خود، لیستی به نام اشیا اضافه کنید تا موقعیت اشیاء متحرک تصادفی را ذخیره کنید. پس از آن، تعداد اشیاء (NUM_OBJECTS) با مختصات تصادفی x و y را در داخل مرزهای صفحه ایجاد کنید. اشیاء با استفاده از تابع arcade.draw_circle_filled به صورت دایره های قرمز ترسیم می شوند.
import arcade
import random
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
PLAYER_RADIUS = 15
OBJECT_RADIUS = 10
NUM_OBJECTS = 10
class MyGame(arcade.Window):
def __init__(self, width, height):
super().__init__(width, height)
arcade.set_background_color(arcade.color.WHITE)
self.player_x = SCREEN_WIDTH // 2
self.player_y = PLAYER_RADIUS + 10
self.objects = []
for _ in range(NUM_OBJECTS):
x = random.randint(0, SCREEN_WIDTH)
y = random.randint(0, SCREEN_HEIGHT)
self.objects.append((x, y))
def on_draw(self):
arcade.start_render()
arcade.draw_circle_filled(self.player_x, self.player_y, PLAYER_RADIUS, arcade.color.BLUE)
for obj in self.objects:
x, y = obj
arcade.draw_circle_filled(x, y, OBJECT_RADIUS, arcade.color.RED)
def update(self, delta_time):
pass
def on_key_press(self, key, modifiers):
if key == arcade.key.LEFT:
self.player_x -= 5
elif key == arcade.key.RIGHT:
self.player_x += 5
if __name__ == "__main__":
game = MyGame(SCREEN_WIDTH, SCREEN_HEIGHT)
arcade.run()
در زیر خروجی است:
پیاده سازی الگوریتم حرکت تصادفی
برای اینکه اجسام به صورت تصادفی حرکت کنند، با استفاده از یک الگوریتم حرکت تصادفی، موقعیت آنها را در روش به روز رسانی به روز کنید.
در هر شیء تکرار کنید و مقادیر تصادفی برای dx و dy ایجاد کنید که نشان دهنده تغییر مختصات x و y است. سپس با افزودن این مقادیر موقعیت شی را به روز کنید. این کد اصلاح شده است:
def update(self, delta_time):
for i in range(NUM_OBJECTS):
x, y = self.objects[i]
dx = random.randint(-5, 5)
dy = random.randint(-5, 5)
x += dx
y += dy
self.objects[i] = (x, y)
در زیر خروجی است:
حرکت اجسام به سمت بازیکن
برای افزودن تعامل بیشتر، اشیاء را به سمت پخش کننده حرکت دهید. شما می توانید با محاسبه بردار جهت بین جسم و پخش کننده و تنظیم موقعیت جسم بر این اساس به این هدف برسید.
برای این کار، تفاوت مختصات x و y بین جسم و بازیکن را محاسبه کنید. با نرمال کردن این مقادیر، یک بردار جهت بدست می آورید. سپس این بردار را در یک ضریب سرعت ضرب کنید (در این مورد 3) و آن را به موقعیت جسم اضافه کنید. در اینجا روش به روز رسانی به روز شده است:
def update(self, delta_time):
for i in range(NUM_OBJECTS):
x, y = self.objects[i]
dx = self.player_x - x
dy = self.player_y - y
distance = math.sqrt(dx ** 2 + dy ** 2)
dx /= distance
dy /= distance
x += dx * 3
y += dy * 3
self.objects[i] = (x, y)
در زیر خروجی است:
هنگامی که بازیکن وارد محیط اطراف می شود، اشیاء شروع به حرکت می کنند
برای افزودن پویایی بیشتر، کد را طوری تغییر دهید که اشیا فقط زمانی شروع به حرکت کنند که بازیکن وارد منطقه اطراف خود شود. کد حرکت بازیکن را اضافه کنید و یک شعاع مشخص کنید که در آن اشیا فعال می شوند.
def update(self, delta_time):
for i in range(NUM_OBJECTS):
x, y = self.objects[i]
dx = self.player_x - x
dy = self.player_y - y
distance = math.sqrt(dx ** 2 + dy ** 2)
if distance < 100: # Adjust the radius as needed
dx /= distance
dy /= distance
x += dx * 3
y += dy * 3
self.objects[i] = (x, y)
تشخیص برخورد و تعامل
اکنون، تشخیص برخورد بین بازیکن و اشیا را اضافه کنید و رفتار زمانی که برخورد رخ می دهد را تعریف کنید. روش به روز رسانی را برای رسیدگی به برخوردها تغییر دهید:
def update(self, delta_time):
for i in range(NUM_OBJECTS):
x, y = self.objects[i]
dx = self.player_x - x
dy = self.player_y - y
distance = math.sqrt(dx ** 2 + dy ** 2)
if distance < PLAYER_RADIUS + OBJECT_RADIUS:
# if collision occurred, handle it here
self.objects.pop(i)
self.objects.append((random.randint(0, SCREEN_WIDTH), random.randint(0, SCREEN_HEIGHT)))
elif distance < 100:
dx /= distance
dy /= distance
x += dx * 3
y += dy * 3
self.objects[i] = (x, y)
تعادل تصادفی
برای ایجاد یک تجربه گیم پلی متعادل، تنظیم دقیق حرکت تصادفی و تخم ریزی اشیا بسیار مهم است. در اینجا چند نمونه از نحوه تنظیم کد برای دستیابی به تعادل بهتر در بازی خود آورده شده است:
محدود کردن حداکثر سرعت
برای جلوگیری از حرکت خیلی سریع اجسام، می توانید حداکثر سرعت را معرفی کنید. روش بهروزرسانی را طوری تغییر دهید که محدودیتهای سرعت را شامل شود:
def update(self, delta_time):
for i in range(NUM_OBJECTS):
x, y = self.objects[i]
dx = self.player_x - x
dy = self.player_y - y
distance = math.sqrt(dx ** 2 + dy ** 2)
if distance < PLAYER_RADIUS + OBJECT_RADIUS:
self.objects.pop(i)
self.objects.append((random.randint(0, SCREEN_WIDTH), random.randint(0, SCREEN_HEIGHT)))
elif distance < 100:
dx /= distance
dy /= distance
speed = 3 # Adjust the speed value as needed
dx = min(max(dx * speed, -MAX_SPEED), MAX_SPEED)
dy = min(max(dy * speed, -MAX_SPEED), MAX_SPEED)
x += dx
y += dy
self.objects[i] = (x, y)
کنترل نرخ تخم ریزی
شما همچنین می توانید سرعت تخم ریزی اشیاء جدید در بازی را کنترل کنید. کد را طوری تنظیم کنید که تاخیر بین تولید اشیاء جدید را شامل شود:
import time
class MyGame(arcade.Window):
def __init__(self, width, height):
super().__init__(width, height)
arcade.set_background_color(arcade.color.WHITE)
self.player_x = SCREEN_WIDTH // 2
self.player_y = PLAYER_RADIUS + 10
self.objects = []
self.last_spawn_time = time.time()
def update(self, delta_time):
# control the spawning rate here
if time.time() - self.last_spawn_time > SPAWN_DELAY:
if len(self.objects) < MAX_OBJECTS:
self.objects.append((random.randint(0, SCREEN_WIDTH), random.randint(0, SCREEN_HEIGHT)))
self.last_spawn_time = time.time()
for i in range(len(self.objects)):
x, y = self.objects[i]
dx = self.player_x - x
dy = self.player_y - y
distance = math.sqrt(dx ** 2 + dy ** 2)
if distance < PLAYER_RADIUS + OBJECT_RADIUS:
self.objects.pop(i)
self.objects.append((random.randint(0, SCREEN_WIDTH), random.randint(0, SCREEN_HEIGHT)))
elif distance < 100:
dx /= distance
dy /= distance
x += dx * 3
y += dy * 3
self.objects[i] = (x, y)
مقادیر SPAWN_DELAY و MAX_OBJECTS را برای یافتن تعادل مناسب برای بازی خود تنظیم کنید. تاخیر بیشتر یا حداکثر تعداد اشیاء کمتر باعث شلوغی بازی می شود. در حالی که تاخیر کوتاه تر یا حداکثر بیشتر، سختی را افزایش می دهد.
با استفاده از اجسام متحرک، بازی ها را سرگرم کننده تر کنید
افزودن اجسام متحرک تصادفی به بازی ها می تواند تجربه کلی را به میزان قابل توجهی افزایش دهد. آنها غیرقابل پیش بینی بودن و چالش را معرفی می کنند و باعث می شود گیم پلی جذاب تر و پویاتر شود. بازیکنان باید برای جلوگیری از برخورد یا گرفتن اشیاء، خود را تطبیق دهند و سریع واکنش نشان دهند، و این باعث ایجاد حس هیجان و موفقیت می شود.