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

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

نحوه حرکت دشمنان به روش های مختلف با استفاده از PyGame

حتی ابتدایی ترین دشمنان نیز باید به نحوی حرکت کنند، بنابراین در مورد نحوه مدیریت کدنویسی پشت الگوهای حمله الهام بگیرید.

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

در PyGame، شما به راحتی می توانید انواع رفتارهای حرکتی دشمن را برنامه ریزی کنید، مانند دنبال کردن بازیکن، حرکت به صورت تصادفی یا انتخاب مسیرهای خاص.

ایجاد یک بازی ساده

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

می توانید کد کامل را در این مخزن GitHub پیدا کنید.

با وارد کردن ماژول PyGame ضروری و مقداردهی اولیه آن شروع کنید.

import pygame

pygame.init()

در مرحله بعد، صفحه را تنظیم کنید و با استفاده از تابع pygame.Rect () پلیر و اشیاء دشمن را ایجاد کنید.

# Set up the screen
screen = pygame.display.set_mode((800, 600))

# Set up the colors
black = (0, 0, 0)
white = (255, 255, 255)

# Set up the player rectangle and the enemy object
player = pygame.Rect(350, 500, 50, 50)
enemy = pygame.Rect(350, 0, 50, 50)

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

# Set up the game loop
running = True

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # Fill the screen with white
    screen.fill(white)

    # Move the player rectangle
    keys = pygame.key.get_pressed()

    if keys[pygame.K_LEFT]:
        player.x -= 5

    if keys[pygame.K_RIGHT]:
        player.x += 5

   if keys[pygame.K_UP]:
       player.y -= 5

   if keys[pygame.K_DOWN]:
       player.y += 5

    # Check for collision between player and enemy
    if player.colliderect(enemy):
        running = False

    # Draw the player rectangle and the enemy object on the screen
    pygame.draw.rect(screen, black, player)
    pygame.draw.rect(screen, black, enemy)

    # Update the screen
    pygame.display.update()

# Quit the game
pygame.quit()

دشمنان را به سمت بازیکن هدایت کنید

برای حرکت دادن دشمن به سمت بازیکن باید فاصله بین این دو را محاسبه کنید که با استفاده از قضیه فیثاغورث می توانید این کار را انجام دهید. سپس می توانید از این فاصله برای تعیین سرعت و جهت حرکت دشمن به سمت بازیکن استفاده کنید.

مطلب مرتبط:   نحوه بهینه سازی عملکرد فرم در React با useRef و useCallback Hooks

برای پیاده سازی این، یک متغیر سرعت ایجاد کنید و از آن برای به روز رسانی موقعیت دشمن نسبت به بازیکن استفاده کنید.

# Calculate the distance between the enemy and the player
distance_x = player.x - enemy.x
distance_y = player.y - enemy.y
distance = (distance_x ** 2 + distance_y ** 2) ** 0.5

# Move the enemy toward the player
speed = 2

if distance != 0:
    enemy.x += speed * distance_x / distance
    enemy.y += speed * distance_y / distance

حرکت دشمن را تصادفی روی صفحه نمایش دهید

شما همچنین می توانید دشمن را به صورت تصادفی روی صفحه حرکت دهید تا بازی چالش برانگیزتر شود.

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

import random

# Move the enemy randomly on the screen
direction = random.choice(['left', 'right', 'up', 'down'])

if direction == 'left':
    enemy.x -= 5
elif direction == 'right':
    enemy.x += 5
elif direction == 'up':
    enemy.y -= 5
elif direction == 'down':
    enemy.y += 5

جنبش دشمن مبتنی بر مجاورت

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

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

# Move the enemy toward the player if the player is close
speed = 2

if distance < 300:
    if distance != 0:
        enemy.x += speed * distance_x / distance
        enemy.y += speed * distance_y / distance

دشمن از حملات بازیکن فرار می کند

شما همچنین می توانید دشمن را مجبور کنید از حرکت بازیکن طفره برود. دشمن با حرکت عمود بر موقعیت بازیکن سعی می کند از بازیکن دوری کند.

مطلب مرتبط:   مثال های پایه پایتون که به شما کمک می کند سریع یاد بگیرید

برای رسیدن به این هدف، بردار واحد را نسبت به بازیکن با استفاده از distance_x و distance_y که قبلا محاسبه شده بود، محاسبه کنید. سپس، بردار عمود را محاسبه کنید تا دشمن عمود بر بردار واحد حرکت کند. در نهایت حاصل ضرب نقطه ای بردار عمود بر و بردار واحد را محاسبه کنید تا جهت حرکت دشمن مشخص شود.

برای پیاده سازی این، قطعه کد زیر را پس از محاسبه فاصله اضافه کنید.

speed = 2

if distance < 400:
    if distance != 0:
        # Calculate the unit vector toward the player
        unit_vector_x = distance_x / distance
        unit_vector_y = distance_y / distance

        # Calculate the perpendicular vector
        perpendicular_vector_x = -unit_vector_y
        perpendicular_vector_y = unit_vector_x

        # Calculate the dot product of the perpendicular vector and the
        # unit vector
        dot_product = perpendicular_vector_x * unit_vector_x
           + perpendicular_vector_y * unit_vector_y

        # Move the enemy perpendicular to the unit vector
        if dot_product > 0:
            enemy.x += speed * perpendicular_vector_x
            enemy.y += speed * perpendicular_vector_y
        else:
            enemy.x -= speed * perpendicular_vector_x
            enemy.y -= speed * perpendicular_vector_y

با این تغییرات، دشمن سعی می کند از نزدیک شدن بیش از حد به بازیکن جلوگیری کند. این باعث می شود بازی چالش برانگیزتر و سرگرم کننده تر شود.

افزودن ویژگی های اضافی

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

می توانید از ماژول Clock برای تنظیم نرخ فریم بازی خود و اجرای روان تر آن استفاده کنید. در زیر اجرای آن آمده است:

# Add multiple enemies that move randomly on the screen
enemies = []

for i in range(5):
    enemy = pygame.Rect(random.randint(0, 750), random.randint(0, 550), 50,
       50)

    enemies.append(enemy)

# Add obstacles that the player needs to avoid
obstacle = pygame.Rect(200, 250, 50, 50)

# Set up the game loop
clock = pygame.time.Clock()
running = True

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # Fill the screen with white
    screen.fill(white)

    # Move the player rectangle
    keys = pygame.key.get_pressed()

    if keys[pygame.K_LEFT]:
        player.x -= 5
    if keys[pygame.K_RIGHT]:
        player.x += 5
    if keys[pygame.K_UP]:
        player.y -= 5
    if keys[pygame.K_DOWN]:
        player.y += 5

    # Move the enemies randomly on the screen
    for enemy in enemies:
        direction = random.choice(['left', 'right', 'up', 'down'])

        if direction == 'left':
            enemy.x -= 5
        elif direction == 'right':
            enemy.x += 5
        elif direction == 'up':
            enemy.y -= 5
        elif direction == 'down':
            enemy.y += 5

        # Check for collision between player and enemy
        if player.colliderect(enemy):
            running = False

    # Draw the player rectangle, the enemy objects, and the obstacle on
   # the screen
    pygame.draw.rect(screen, black, player)

    for enemy in enemies:
        pygame.draw.rect(screen, black, enemy)

    pygame.draw.rect(screen, black, obstacle)

    # Update the screen
    pygame.display.update()

    # Set the frame rate of the game
    clock.tick(60)

# Quit the game
pygame.quit()

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

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

مطلب مرتبط:   نحوه تبدیل Neovim به یک IDE تمام عیار در لینوکس