Cách thêm đối tượng chuyển động ngẫu nhiên bằng thư viện Arcade của Python
Các đối tượng chuyển động ngẫu nhiên có thể mang lại sự phấn khích và khó đoán cho trò chơi. Nó làm cho chúng trở nên hấp dẫn và thử thách hơn cho người chơi. Thư viện Arcade của Python cung cấp một cách đơn giản và hiệu quả để kết hợp các đối tượng chuyển động ngẫu nhiên vào trò chơi của bạn.
Mục Lục
Tạo một trò chơi đơn giản
Trước khi bắt đầu, hãy đảm bảo rằng bạn đã cài đặt pip trên thiết bị của mình. Sử dụng lệnh này để cài đặt giải trí thư viện:
pip install arcade
Sau đó, tạo một cửa sổ bằng cách sử dụng arcade.Window class và đặt màu nền thành màu trắng.
Mã được sử dụng trong bài viết này có sẵn trong kho lưu trữ GitHub này và bạn được sử dụng miễn phí theo giấy phép MIT.
Đặt vị trí của người chơi ở giữa màn hình theo chiều ngang và thêm một khoảng cách nhỏ từ trên xuống. Bạn có thể điều khiển chuyển động của người chơi bằng các phím mũi tên.
Đây là mã cho trò chơi cơ bản của chúng tôi:
import arcadeSCREEN_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()
Thêm nhiều đối tượng
Để thêm các đối tượng chuyển động ngẫu nhiên vào trò chơi của bạn, hãy tạo một danh sách để lưu trữ các vị trí của đối tượng và cập nhật chúng trong mỗi khung hình. Bạn cũng có thể sử dụng sprite làm đối tượng.
Trong mã trò chơi của bạn, hãy thêm một danh sách có tên các đối tượng để lưu trữ vị trí của các đối tượng chuyển động ngẫu nhiên. Sau đó, tạo số lượng đối tượng (NUM_ĐỐI TƯỢNG) với tọa độ x và y ngẫu nhiên trong ranh giới màn hình. Các đối tượng được vẽ dưới dạng các vòng tròn màu đỏ bằng cách sử dụng arcade.draw_circle_fill chức năng.
import arcade
import randomSCREEN_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()
Dưới đây là đầu ra:
Thực hiện thuật toán chuyển động ngẫu nhiên
Để làm cho các đối tượng di chuyển ngẫu nhiên, hãy cập nhật vị trí của chúng trong cập nhật phương pháp sử dụng một thuật toán chuyển động ngẫu nhiên.
Lặp lại qua từng đối tượng và tạo các giá trị ngẫu nhiên cho dx Và đê, đại diện cho sự thay đổi trong tọa độ x và y. Sau đó cập nhật vị trí của đối tượng bằng cách thêm các giá trị này. Đây là mã sửa đổi:
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)
Dưới đây là đầu ra:
Đối tượng di chuyển về phía người chơi
Để thêm nhiều tương tác hơn, hãy làm cho các đối tượng di chuyển về phía người chơi. Bạn có thể đạt được điều này bằng cách tính toán vectơ chỉ hướng giữa đối tượng và trình phát và điều chỉnh vị trí của đối tượng cho phù hợp.
Đối với điều này, hãy tính toán sự khác biệt về tọa độ x và y giữa đối tượng và trình phát. Bằng cách chuẩn hóa các giá trị này, bạn có được một vectơ chỉ hướng. Sau đó, nhân vectơ này với hệ số tốc độ (3 trong trường hợp này) và thêm nó vào vị trí của đối tượng. Đây là bản cập nhật cập nhật phương pháp:
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)
Dưới đây là đầu ra:
Các đối tượng bắt đầu di chuyển khi người chơi bước vào khu vực xung quanh
Để thêm động lực hơn nữa, hãy sửa đổi mã để các đối tượng chỉ bắt đầu di chuyển khi người chơi đi vào khu vực xung quanh chúng. Thêm mã cho chuyển động của người chơi và xác định bán kính trong đó các đối tượng hoạt động.
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:
dx /= distance
dy /= distance
x += dx * 3
y += dy * 3
self.objects[i] = (x, y)
Phát hiện va chạm và tương tác
Bây giờ, thêm tính năng phát hiện va chạm giữa người chơi và các đối tượng, đồng thời xác định hành vi khi xảy ra va chạm. Sửa đổi cập nhật phương pháp xử lý va chạm:
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
x += dx * 3
y += dy * 3
self.objects[i] = (x, y)
Cân bằng ngẫu nhiên
Để tạo trải nghiệm chơi trò chơi cân bằng, điều quan trọng là tinh chỉnh chuyển động ngẫu nhiên và sinh sản của các đối tượng. Dưới đây là một vài ví dụ về cách bạn có thể điều chỉnh mã để đạt được sự cân bằng tốt hơn trong trò chơi của mình:
Giới hạn tốc độ tối đa
Để ngăn các đối tượng di chuyển quá nhanh, bạn có thể đưa ra giới hạn tốc độ tối đa. Sửa đổi cập nhật phương pháp bao gồm các ràng buộc tốc độ:
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
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)
Kiểm soát tỷ lệ đẻ trứng
Bạn cũng có thể kiểm soát tốc độ các đối tượng mới xuất hiện trong trò chơi. Điều chỉnh mã để bao gồm độ trễ giữa các đối tượng mới sinh sản:
import timeclass 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):
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)
Điều chỉnh SPAWN_DELAY Và MAX_ĐỐI TƯỢNG các giá trị để tìm sự cân bằng phù hợp cho trò chơi của bạn. Độ trễ dài hơn hoặc số lượng đối tượng tối đa nhỏ hơn sẽ khiến trò chơi bớt đông đúc hơn. Trong khi đó, độ trễ ngắn hơn hoặc mức tối đa lớn hơn sẽ làm tăng độ khó.
Làm cho trò chơi thú vị hơn bằng cách sử dụng các đối tượng chuyển động
Việc thêm các đối tượng chuyển động ngẫu nhiên vào trò chơi có thể nâng cao đáng kể trải nghiệm tổng thể. Chúng mang đến tính khó đoán và thử thách, khiến lối chơi trở nên hấp dẫn và năng động hơn. Người chơi sẽ phải thích nghi và phản ứng nhanh để tránh va chạm hoặc bắt đồ vật, và điều đó sẽ mang lại cảm giác phấn khích và thành tựu.