این که آیا یک برخورد باعث افزایش قدرت می شود یا به پایان بازی منجر می شود، باید بتوانید آن را تشخیص دهید. در اینجا نحوه انجام این کار با کتابخانه آرکید پایتون آمده است.
برخورد یک جنبه اساسی از گیم پلی در بسیاری از ژانرهای بازی های ویدیویی است. آنها لایهای از چالش و هیجان را به بازیها اضافه میکنند و از بازیکنان میخواهند که موانع را طی کنند، دشمنان را دور بزنند و جوایزی را جمعآوری کنند.
پیاده سازی تشخیص برخورد و مدیریت در بازی های شما برای ایجاد مکانیک های گیم پلی واقع گرایانه و پویا که بازیکنان را درگیر و سرگرم نگه می دارد بسیار مهم است. با استفاده از توابع داخلی آن، می توانید به راحتی برخورد با کتابخانه آرکید را تشخیص دهید.
ایجاد یک بازی ساده
قبل از شروع، مطمئن شوید که پیپ را روی دستگاه خود نصب کرده اید. برای نصب کتابخانه آرکید از این دستور استفاده کنید:
pip install arcade
پس از آن، یک بازی ایجاد کنید که در آن بازیکن می تواند به چپ و راست حرکت کند تا از برخورد با مستطیل دشمن جلوگیری کند. می توانید از تابع طراحی داخلی برای اسپرایت ها استفاده کنید.
می توانید کامل را پیدا کنید
کد در این مخزن GitHub
.
این هم کد بازی:
import arcade
SCREEN_WIDTH = 640
SCREEN_HEIGHT = 480
MOVEMENT_SPEED = 5
class MyGame(arcade.Window):
def __init__(self, width, height):
super().__init__(width, height, "My Game")
arcade.set_background_color(arcade.color.WHITE)
self.player = arcade.SpriteSolidColor(50, 50, arcade.color.BLUE)
self.player.center_x = SCREEN_WIDTH // 3
self.player.center_y = 50
self.enemy = arcade.SpriteSolidColor(50, 50, arcade.color.RED)
self.enemy.center_x = SCREEN_WIDTH // 2
self.enemy.center_y = 50
def on_draw(self):
arcade.start_render()
self.player.draw()
self.enemy.draw()
def on_key_press(self, key, modifiers):
if key == arcade.key.LEFT:
self.player.center_x -= MOVEMENT_SPEED
elif key == arcade.key.RIGHT:
self.player.center_x += MOVEMENT_SPEED
def update(self, delta_time):
if arcade.check_for_collision(self.player, self.enemy):
print("Game Over")
def main():
game = MyGame(SCREEN_WIDTH, SCREEN_HEIGHT)
arcade.run()
if __name__ == "__main__":
main()
ویژگی های تشخیص برخورد Arcade
کتابخانه Arcade یک راه ساده برای تشخیص برخورد بین جن ها ارائه می دهد. تابع check_for_collision دو sprite را به عنوان آرگومان می گیرد و یک مقدار Boolean برمی گرداند که نشان می دهد آیا sprites با هم برخورد کرده اند یا خیر. شما می توانید از این عملکرد برای تشخیص برخورد بین بازیکن و جن های دشمن در بازی خود استفاده کنید.
میتوانید روش بهروزرسانی را برای بررسی برخورد بین بازیکن و جنهای دشمن تغییر دهید. اگر کتابخانه برخوردی را تشخیص دهد، میتوانید Game Over را روی کنسول چاپ کنید.
این کد به روز شده است:
def update(self, delta_time):
if arcade.check_for_collision(self.player, self.enemy):
print("Game Over")
else:
self.player.update()
با این تغییر، بازی شما برخوردها را تشخیص داده و در صورت برخورد بازیکن با دشمن، متن Game Over را چاپ می کند.
افزودن ویژگی های بیشتر
برای جذابتر کردن بازی خود، میتوانید ویژگیهای اضافی مانند امتیاز دهی، افزایش قدرت و چندین دشمن را اضافه کنید.
به عنوان مثال، می توانید لیستی از دشمنان ایجاد کنید و بازی را به روز کنید تا پس از هر برخورد، دشمنان جدیدی در موقعیت های تصادفی ایجاد شوند. می توانید بازیکن را به چپ و راست حرکت دهید تا از دشمن دور شوید و امتیاز کسب کنید. در اینجا مثالی از نحوه پیاده سازی این ویژگی ها آورده شده است:
import random
class MyGame(arcade.Window):
def __init__(self, width, height):
super().__init__(width, height, "My Game")
arcade.set_background_color(arcade.color.WHITE)
self.player = arcade.SpriteSolidColor(50, 50, arcade.color.BLUE)
self.player.center_x = SCREEN_WIDTH // 2
self.player.center_y = 50
self.enemies = arcade.SpriteList()
self.score = 0
for i in range(3):
enemy = arcade.SpriteSolidColor(50, 50, arcade.color.RED)
enemy.center_x = random.randint(0, SCREEN_WIDTH)
enemy.center_y = random.randint(SCREEN_HEIGHT // 2, SCREEN_HEIGHT)
self.enemies.append(enemy)
def on_draw(self):
arcade.start_render()
self.player.draw()
self.enemies.draw()
arcade.draw_text(f"Score: {self.score}", 10, SCREEN_HEIGHT - 30, arcade.color.BLACK, 16)
def update(self, delta_time):
if arcade.check_for_collision_with_list(self.player, self.enemies):
print("Game Over")
arcade.close_window()
else:
self.player.update()
for enemy in self.enemies:
enemy.center_y -= MOVEMENT_SPEED / 2
if enemy.center_y < 0:
enemy.center_x = random.randint(0, SCREEN_WIDTH)
enemy.center_y = random.randint(SCREEN_HEIGHT // 2, SCREEN_HEIGHT)
self.score += 1
با این تغییرات، بازی شما اکنون دارای چندین دشمن است که در موقعیت های تصادفی تخم ریزی می کنند و به سمت پایین حرکت می کنند. بازیکن به ازای هر دشمنی که با موفقیت از آنها دور شده است، یک امتیاز کسب می کند و در صورت برخورد بازیکن با هر دشمنی، بازی به پایان می رسد.
بهبود تعامل کاربر با برخورد
با افزودن ویژگیهای تشخیص برخورد و مدیریت به بازیهای خود، میتوانید تجربههای گیمپلی فراگیرتر و چالشبرانگیزی را برای بازیکنان ایجاد کنید. از بازیهای ساده اجتناب و جمعآوری گرفته تا پلتفرمها و تیراندازهای پیچیدهتر، برخوردها نقش مهمی در ایجاد مکانیکهای گیمپلی جذاب و رضایتبخش دارند.
بنابراین، اگر میخواهید بازیهای جذابتر و همهجانبهتری بسازید که بازیکنان را به بازیهای بیشتری برمیگرداند، ویژگیهای تشخیص برخورد را در مکانیک گیمپلی خود بگنجانید.