Cách tạo kẻ thù trong trò chơi điện tử Python
Kẻ thù đóng một vai trò quan trọng trong việc tạo ra các trò chơi hấp dẫn và đầy thử thách. Chúng cung cấp các chướng ngại vật và đối thủ cho người chơi, giúp trải nghiệm chơi trò chơi trở nên thú vị hơn. Thư viện Arcade của Python cung cấp một cách đơn giản để kết hợp kẻ thù 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 đó, hãy bắt đầu bằng cách tạo một trò chơi đơn giản trong đó người chơi có thể di chuyển sang trái và phải bằng các phím mũi tên.
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.
import arcade
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
PLAYER_RADIUS = 25
PLAYER_SPEED = 5
class GameWindow(arcade.Window):
def __init__(self, width, height):
super().__init__(width, height)
arcade.set_background_color(arcade.color.WHITE)
self.player_x = width // 2
def on_draw(self):
arcade.start_render()
arcade.draw_circle_filled(self.player_x, PLAYER_RADIUS, PLAYER_RADIUS, arcade.color.BLUE)
def on_key_press(self, key, modifiers):
if key == arcade.key.LEFT:
self.player_x -= PLAYER_SPEED
elif key == arcade.key.RIGHT:
self.player_x += PLAYER_SPEED
def update(self, delta_time):
pass
def main():
window = GameWindow(SCREEN_WIDTH, SCREEN_HEIGHT)
arcade.run()
if __name__ == "__main__":
main()
Tạo một kẻ thù đơn giản
Để tạo kẻ thù giết chết người chơi khi va chạm, hãy tạo một vòng tròn khác trên màn hình. bên trong on_draw chức năng, bạn có thể vẽ vòng tròn kẻ thù này và kiểm tra va chạm trong cập nhật phương pháp. Bạn cũng có thể sử dụng sprite cho kẻ thù.
class GameWindow(arcade.Window):
def __init__(self, width, height):
self.enemy_x = width // 2
self.enemy_y = height - PLAYER_RADIUS
self.enemy_radius = 20
def on_draw(self):
arcade.draw_circle_filled(self.enemy_x, self.enemy_y, self.enemy_radius, arcade.color.RED)
def update(self, delta_time):
if self.is_collision(self.player_x, self.player_y, self.enemy_x, self.enemy_y, PLAYER_RADIUS, self.enemy_radius):
print("Game Over!")
def is_collision(self, x1, y1, x2, y2, radius1, radius2):
distance_squared = (x1 - x2) ** 2 + (y1 - y2) ** 2
radius_sum_squared = (radius1 + radius2) ** 2
return distance_squared <= radius_sum_squared
Khiến kẻ thù đi theo người chơi
Trong một số trò chơi, kẻ thù có thể đuổi theo người chơi, thêm yếu tố động vào lối chơi. Để tạo kẻ thù tiếp theo, bạn cần cập nhật vị trí của nó dựa trên vị trí của người chơi. Bất cứ khi nào người chơi di chuyển, kẻ thù sẽ di chuyển theo cùng một hướng. Bạn có thể đạt được điều này bằng cách sửa đổi cập nhật phương pháp. Tạo một tệp mới có tên kẻ thù-theo-player.py và thêm mã với các bản cập nhật bên dưới:
class GameWindow(arcade.Window):
def update(self, delta_time):
if self.player_x < self.enemy_x:
self.enemy_x -= PLAYER_SPEED
elif self.player_x > self.enemy_x:
self.enemy_x += PLAYER_SPEED
if self.is_collision(self.player_x, self.player_y,
self.enemy_x, self.enemy_y,
PLAYER_RADIUS, ENEMY_RADIUS):
print("Game Over!")
def is_collision(self, x1, y1, x2, y2, radius1, radius2):
distance_squared = (x1 - x2) ** 2 + (y1 - y2) ** 2
radius_sum_squared = (radius1 + radius2) ** 2
return distance_squared <= radius_sum_squared
Dưới đây là đầu ra:
Thêm đạn kẻ thù
Để tạo kẻ thù bắn đạn, hãy tạo một Đạn lớp và một danh sách để theo dõi các viên đạn đang hoạt động. Kẻ thù sẽ định kỳ tạo một viên đạn mới và cập nhật vị trí của nó. Tạo một tệp mới có tên đạn.py và thêm mã với các bản cập nhật bên dưới:
class Bullet:
def __init__(self, x, y, radius, speed):
self.x = x
self.y = y
self.radius = radius
self.speed = speed
def update(self):
self.y -= self.speed
class GameWindow(arcade.Window):
def __init__(self, width, height):
self.bullets = []
self.bullet_radius = 5
self.bullet_speed = 3
self.bullet_cooldown = 60
self.bullet_timer = 0
def on_draw(self):
for bullet in self.bullets:
arcade.draw_circle_filled(bullet.x, bullet.y,
self.bullet_radius, arcade.color.BLACK)
def update(self, delta_time):
self.bullet_timer += 1
if self.bullet_timer >= self.bullet_cooldown:
self.bullets.append(Bullet(self.enemy_x, self.enemy_y - self.enemy_radius,
self.bullet_radius, self.bullet_speed))
self.bullet_timer = 0
for bullet in self.bullets:
bullet.update()
if self.is_collision(self.player_x, self.player_y, self.enemy_x,
self.enemy_y, PLAYER_RADIUS, ENEMY_RADIUS):
print("Game Over!")
def is_collision(self, x1, y1, x2, y2, radius1, radius2):
distance_squared = (x1 - x2) ** 2 + (y1 - y2) ** 2
radius_sum_squared = (radius1 + radius2) ** 2
return distance_squared <= radius_sum_squared
Dưới đây là đầu ra:
Thêm điểm sức khỏe cho kẻ thù
Trong nhiều trò chơi, kẻ thù có thể sở hữu điểm máu (HP), cho phép chúng chịu nhiều đòn đánh trước khi bị đánh bại. Thêm điểm sức khỏe cho kẻ thù có thể giới thiệu các yếu tố chơi trò chơi chiến lược và mang lại cảm giác tiến bộ và thử thách. Tạo một tệp mới có tên heath-point.py và thêm mã với các bản cập nhật bên dưới:
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
PLAYER_RADIUS = 25
PLAYER_SPEED = 5
ENEMY_RADIUS = 20
ENEMY_HEALTH = 100
class GameWindow(arcade.Window):
def __init__(self, width, height):
super().__init__(width, height)
arcade.set_background_color(arcade.color.WHITE)
self.player_x = width // 2
self.player_y = height // 2
self.enemy_x = width // 2
self.enemy_y = height - PLAYER_RADIUS
self.enemy_health = ENEMY_HEALTH
print(self.enemy_health)
def on_draw(self):
arcade.start_render()
arcade.draw_circle_filled(self.player_x,
self.player_y,
PLAYER_RADIUS,
arcade.color.BLUE)
if self.enemy_health > 0:
arcade.draw_circle_filled(self.enemy_x,
self.enemy_y,
ENEMY_RADIUS,
arcade.color.RED)
def update(self, delta_time):
if self.is_collision(self.player_x, self.player_y,
self.enemy_x, self.enemy_y,
PLAYER_RADIUS, ENEMY_RADIUS):
self.enemy_health -= 10
print(self.enemy_health)
Các ENEMY_HEALTH hằng số có giá trị 100 để biểu thị điểm máu ban đầu của kẻ thù. Khi người chơi va chạm với kẻ thù, bạn có thể trừ một số điểm từ sức khỏe của kẻ thù. Để hiển thị giá trị sức khỏe được cập nhật, bạn có thể in một đối tượng văn bản self.health_text điều đó cho thấy sức khỏe của kẻ thù hiện tại.
Bằng cách kết hợp điểm sức khỏe cho kẻ thù, bạn có thể đưa ra một lớp thử thách và chiến lược cho người chơi. Giá trị sức khỏe được hiển thị cung cấp phản hồi trực quan và cho phép người chơi theo dõi lượng máu còn lại của kẻ thù.
Ngoài ra, bạn có thể mở rộng mã bằng cách thêm logic và hình ảnh khác, chẳng hạn như hiển thị thanh sức khỏe hoặc thực hiện các điều kiện đánh bại khi sức khỏe của kẻ thù bằng không.
Các phương pháp hay nhất để tạo kẻ thù
Khi thiết kế kẻ thù cho trò chơi của bạn, điều quan trọng là phải xem xét một số phương pháp hay nhất để đảm bảo chúng góp phần tạo nên trải nghiệm chơi trò chơi đầy thử thách và thú vị. Dưới đây là một số nguyên tắc cần tuân theo khi tạo kẻ thù:
thuộc tính đa dạng
Tạo kẻ thù với các thuộc tính khác nhau như tốc độ, kích thước, sức khỏe và sức tấn công. Các loại kẻ thù khác nhau nên đặt ra các mức độ khó khác nhau, đòi hỏi người chơi phải điều chỉnh chiến lược của mình cho phù hợp. Bằng cách giới thiệu hỗn hợp các thuộc tính của kẻ thù, bạn có thể giữ cho lối chơi luôn mới mẻ và hấp dẫn.
Hành vi độc đáo
Cung cấp cho mỗi loại kẻ thù các mẫu hành vi độc đáo của riêng mình. Một số kẻ thù có thể di chuyển theo cách có thể đoán trước được, trong khi những kẻ khác có thể di chuyển phức tạp hơn hoặc thất thường hơn. Cân nhắc kết hợp các thuật toán AI của kẻ thù để làm cho hành vi của chúng trở nên thông minh và khó đoán hơn, tăng thêm một lớp thử thách cho người chơi.
Điểm sức khỏe (HP)
Thực hiện các điểm sức khỏe cho kẻ thù để mang lại cảm giác tiến bộ và bền bỉ. Điều này cho phép kẻ thù chịu nhiều đòn trước khi bị đánh bại. Bằng cách chỉ định lượng HP khác nhau cho các loại kẻ thù khác nhau, bạn có thể tạo hệ thống phân cấp độ khó và khuyến khích người chơi lập chiến lược và ưu tiên mục tiêu của họ.
Làm cho trò chơi thú vị hơn với kẻ thù
Thêm kẻ thù vào trò chơi của bạn có thể nâng cao đáng kể trải nghiệm chơi trò chơi. Họ giới thiệu những thách thức và thúc đẩy người chơi cải thiện kỹ năng của họ. Kẻ thù có thể xuất hiện dưới nhiều hình thức khác nhau, từ những chướng ngại vật đơn giản đến những kẻ thù phức tạp do AI điều khiển. Bằng cách triển khai kẻ thù một cách hiệu quả, bạn có thể khiến trò chơi của mình trở nên hấp dẫn và thú vị hơn đối với người chơi.