خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

نحوه اضافه کردن اشیاء متحرک تصادفی با استفاده از کتابخانه Arcade Python

با اضافه کردن اجسام متحرک تصادفی، بازی های آرکید خود را لذت بخش تر و هیجان انگیزتر کنید.

اجسام متحرک تصادفی می توانند هیجان و غیرقابل پیش بینی بودن را برای بازی ها به ارمغان بیاورند. آنها را برای بازیکنان جذاب تر و چالش برانگیزتر می کند. کتابخانه 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()

در زیر خروجی است:

مطلب مرتبط:   با GitHub Actions یک React Application را در Firebase اجرا کنید

چندین اشیاء به طور تصادفی با بازیکن در بازی قرار می گیرند

پیاده سازی الگوریتم حرکت تصادفی

برای اینکه اجسام به صورت تصادفی حرکت کنند، با استفاده از یک الگوریتم حرکت تصادفی، موقعیت آنها را در روش به روز رسانی به روز کنید.

در هر شیء تکرار کنید و مقادیر تصادفی برای 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)

تعادل تصادفی

برای ایجاد یک تجربه گیم پلی متعادل، تنظیم دقیق حرکت تصادفی و تخم ریزی اشیا بسیار مهم است. در اینجا چند نمونه از نحوه تنظیم کد برای دستیابی به تعادل بهتر در بازی خود آورده شده است:

مطلب مرتبط:   نحوه ساخت اپلیکیشن Pomodoro Timer با استفاده از پایتون

محدود کردن حداکثر سرعت

برای جلوگیری از حرکت خیلی سریع اجسام، می توانید حداکثر سرعت را معرفی کنید. روش به‌روزرسانی را طوری تغییر دهید که محدودیت‌های سرعت را شامل شود:

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 را برای یافتن تعادل مناسب برای بازی خود تنظیم کنید. تاخیر بیشتر یا حداکثر تعداد اشیاء کمتر باعث شلوغی بازی می شود. در حالی که تاخیر کوتاه تر یا حداکثر بیشتر، سختی را افزایش می دهد.

مطلب مرتبط:   کار با متغیرهای محیطی در زنگ

با استفاده از اجسام متحرک، بازی ها را سرگرم کننده تر کنید

افزودن اجسام متحرک تصادفی به بازی ها می تواند تجربه کلی را به میزان قابل توجهی افزایش دهد. آنها غیرقابل پیش بینی بودن و چالش را معرفی می کنند و باعث می شود گیم پلی جذاب تر و پویاتر شود. بازیکنان باید برای جلوگیری از برخورد یا گرفتن اشیاء، خود را تطبیق دهند و سریع واکنش نشان دهند، و این باعث ایجاد حس هیجان و موفقیت می شود.