当前位置: 首页 > article >正文

Python 的 Pygame 库来开发一个游戏

import pygame
import random

# 初始化 Pygame
pygame.init()

# 设置屏幕大小
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))

# 设置标题
pygame.display.set_caption("飞机大战")

# 加载图片
player_img = pygame.image.load("player.png").convert_alpha()
enemy_img = pygame.image.load("enemy.png").convert_alpha()
bullet_img = pygame.image.load("bullet.png").convert_alpha()
background_img = pygame.image.load("background.png").convert()

# 定义颜色
white = (255, 255, 255)

# 定义玩家类
class Player(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = player_img
        self.rect = self.image.get_rect()
        self.rect.centerx = screen_width // 2
        self.rect.bottom = screen_height - 10
        self.speed = 5

    def update(self):
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            self.rect.x -= self.speed
        if keys[pygame.K_RIGHT]:
            self.rect.x += self.speed
        if keys[pygame.K_UP]:
            self.rect.y -= self.speed
        if keys[pygame.K_DOWN]:
            self.rect.y += self.speed

        # 保持玩家在屏幕内
        self.rect.left = max(0, self.rect.left)
        self.rect.right = min(screen_width, self.rect.right)
        self.rect.top = max(0, self.rect.top)
        self.rect.bottom = min(screen_height, self.rect.bottom)

    def shoot(self):
        bullet = Bullet(self.rect.centerx, self.rect.top)
        bullets.add(bullet)

# 定义子弹类
class Bullet(pygame.sprite.Sprite):
    def __init__(self, x, y):
        super().__init__()
        self.image = bullet_img
        self.rect = self.image.get_rect()
        self.rect.centerx = x
        self.rect.bottom = y
        self.speed = 10

    def update(self):
        self.rect.y -= self.speed
        # 删除超出屏幕的子弹
        if self.rect.top < 0:
            self.kill()

# 定义敌人类
class Enemy(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = enemy_img
        self.rect = self.image.get_rect()
        self.rect.x = random.randint(0, screen_width - self.rect.width)
        self.rect.y = random.randint(-100, -50)
        self.speed = random.randint(1, 3)

    def update(self):
        self.rect.y += self.speed
        # 删除超出屏幕的敌人
        if self.rect.top > screen_height:
            self.kill()

# 创建游戏精灵组
all_sprites = pygame.sprite.Group()
player = Player()
all_sprites.add(player)
bullets = pygame.sprite.Group()
enemies = pygame.sprite.Group()

# 游戏循环
running = True
clock = pygame.time.Clock()
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                player.shoot()

    # 更新游戏逻辑
    all_sprites.update()
    enemies.update()

    # 检查碰撞
    hits = pygame.sprite.groupcollide(enemies, bullets, True, True)

    # 添加敌人
    if len(enemies) < 5:
        new_enemy = Enemy()
        enemies.add(new_enemy)
        all_sprites.add(new_enemy)

    # 渲染游戏画面
    screen.blit(background_img, (0, 0))
    all_sprites.draw(screen)
    bullets.draw(screen)
    enemies.draw(screen)

    # 更新屏幕
    pygame.display.flip()

    # 控制游戏帧率
    clock.tick(60)

# 退出 Pygame
pygame.quit()

使用说明:

  1. 创建游戏素材:
    • 创建名为 player.pngenemy.pngbullet.png 和 background.png 的图像文件。
  2. 将代码保存为 game.py 将代码保存为名为 game.py 的文件。
  3. 运行游戏: 打开终端或命令提示符,导航到代码保存的目录,并运行命令 python game.py

游戏玩法:

  • 使用方向键控制飞机移动。
  • 按空格键发射子弹。
  • 躲避敌机。
  • 消灭敌机获得分数。

注意:

  • 确保已安装 Pygame 库。如果没有安装,请运行 pip install pygame 进行安装。
  • 将代码中的图片文件名替换为实际文件名。
  • 可以根据需要调整游戏参数,例如敌机速度、数量等。

http://www.kler.cn/a/375197.html

相关文章:

  • Linux RAID 技术详解:原理、配置、管理及故障处理
  • 大模型学习笔记------什么是大模型
  • 无人机救援系统基本组成
  • 文心一言 VS 讯飞星火 VS chatgpt (381)-- 算法导论24.5 1题
  • openpnp - 在openpnp中单独测试相机
  • Leaflet查询矢量瓦片偏移的问题
  • 关于使用雷池社区版需要知道,什么是 IPv4 地址?
  • Linux Kernel Programming (个人读书笔记)
  • WSGI、uwsgi、uWSGI与Nginx
  • 练习LabVIEW第三十二题
  • 在Python中实现一个简单的社交媒体应用
  • Spring Boot 与 EasyExcel 携手:复杂 Excel 表格高效导入导出实战
  • 基于 SM3 的密钥派生函数 (KDF):国密合规的安全密钥生成方案
  • 低代码用户中心:简化开发,提升效率的新时代
  • es(1)(仅供自己参考)
  • 前端安全:构建坚不可摧的Web应用防线
  • redis的set如何实现的
  • 【WPF】BackgroundWorker类
  • 龙迅#LT8668EX显示器图像处理芯片 适用于HDMI1.4+VGA转4PORT LVDS,支持4K30HZ分辨率,可做OSD菜单亮度调节!
  • 什么是继电器干接点输出
  • 功能测试:方法、流程与工具介绍
  • 20万高薪专业-网络安全(非常详细)零基础入门到精通,收藏这一篇就够了
  • 【源码+文档】基于SpringBoot+Vue旅游网站系统【提供源码+答辩PPT+参考文档+项目部署】
  • 基于企业微信与开源 AI 智能名片 2 + 1 链动模式 S2B2C 商城小程序的客户运营模型优化研究
  • docker file容器化部署Jenkins(一)
  • 【笔面试常见题:三门问题】用条件概率、全概率和贝叶斯推导