返回
小白也可以看得懂的 pygame 完整游戏开发指南
前端
2023-11-16 07:15:08
前言
pygame 是一个功能强大的 Python 游戏开发框架,它可以帮助你轻松创建各种各样的游戏。本文将向你展示如何使用 pygame 创建一个完整的游戏,包括角色、敌人、子弹、按钮、主业务逻辑和执行效果。
游戏概述
在本教程中,我们将创建一个简单的射击游戏。玩家将控制一个角色,在屏幕上移动并射击敌人。敌人也会向玩家射击,玩家需要躲避敌人的子弹并消灭敌人。
游戏角色
首先,我们需要创建一个角色类。角色类将包含角色的位置、速度和生命值等信息。
class Hero(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.image.load("hero.png")
self.rect = self.image.get_rect()
self.rect.center = (SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2)
self.speed = 5
self.life = 100
敌机类
接下来,我们需要创建一个敌机类。敌机类将包含敌机的生命值和速度等信息。
class Enemy(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.image.load("enemy.png")
self.rect = self.image.get_rect()
self.rect.x = random.randint(0, SCREEN_WIDTH - self.rect.width)
self.rect.y = -self.rect.height
self.speed = 3
self.life = 100
子弹类
子弹类将包含子弹的速度和伤害等信息。
class Bullet(pygame.sprite.Sprite):
def __init__(self, x, y):
super().__init__()
self.image = pygame.Surface((10, 10))
self.image.fill((255, 0, 0))
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
self.speed = 10
self.damage = 10
按钮类
按钮类将包含按钮的位置和大小等信息。
class Button(pygame.sprite.Sprite):
def __init__(self, x, y, width, height, text):
super().__init__()
self.image = pygame.Surface((width, height))
self.image.fill((0, 0, 255))
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
self.text = text
self.font = pygame.font.SysFont("Arial", 30)
self.text_surface = self.font.render(text, True, (255, 255, 255))
self.text_rect = self.text_surface.get_rect()
self.text_rect.center = (self.rect.width / 2, self.rect.height / 2)
def draw(self, screen):
screen.blit(self.image, self.rect)
screen.blit(self.text_surface, self.text_rect)
主业务逻辑
主业务逻辑将包含游戏的主要逻辑,例如角色移动、敌人移动、子弹发射等。
def main():
pygame.init()
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("飞机大战")
hero = Hero()
enemy = Enemy()
bullets = pygame.sprite.Group()
buttons = pygame.sprite.Group()
start_button = Button(SCREEN_WIDTH / 2 - 100, SCREEN_HEIGHT / 2 - 50, 200, 100, "开始游戏")
buttons.add(start_button)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONDOWN:
if start_button.rect.collidepoint(event.pos):
start_button.kill()
hero.alive = True
enemy.alive = True
# 检查键盘输入
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
hero.rect.x -= hero.speed
if keys[pygame.K_RIGHT]:
hero.rect.x += hero.speed
if keys[pygame.K_UP]:
hero.rect.y -= hero.speed
if keys[pygame.K_DOWN]:
hero.rect.y += hero.speed
if keys[pygame.K_SPACE]:
bullet = Bullet(hero.rect.centerx, hero.rect.top)
bullets.add(bullet)
# 移动敌机
enemy.rect.y += enemy.speed
if enemy.rect.top > SCREEN_HEIGHT:
enemy.rect.x = random.randint(0, SCREEN_WIDTH - enemy.rect.width)
enemy.rect.y = -enemy.rect.height
# 子弹移动
for bullet in bullets:
bullet.rect.y -= bullet.speed
if bullet.rect.bottom < 0:
bullets.remove(bullet)
# 碰撞检测
for bullet in bullets:
if pygame.sprite.collide_rect(bullet, enemy):
bullets.remove(bullet)
enemy.life -= bullet.damage
if enemy.life <= 0:
enemy.kill()
# 绘制游戏画面
screen.fill((0, 0, 0))
buttons.draw(screen)
hero.draw(screen)
enemy.draw(screen)
bullets.draw(screen)
# 更新游戏状态
pygame.display.update()
pygame.quit()
if __name__ == "__main__":
main()
执行效果
当您运行本程序时,您将看到一个飞机大战游戏。您可以使用键盘控制角色移动和射击。当您击中敌人时,敌人的生命值会减少。当敌人的生命值降为0时,敌人将被消灭。您需要消灭所有敌人才能赢得游戏。
完整代码地址
您可以通过以下链接获取完整代码:
https://github.com/ouyangsuo/plane
结语
以上就是如何使用 pygame 创建一个完整游戏。我希望本教程对您有所帮助。如果您有任何问题,请随时给我留言。