经典回顾:用pygame模块做一个飞机大战

目录


前言

Pygame 是一个专门用来开发游戏的 Python 模块,主要为开发、设计 2D 电子游戏而生,它是一个免费、开源的第三方软件包,支持多种操作系统,具有良好的跨平台性(比如 Windows、Linux、Mac 等)。Pygame 是 Pete Shinners 在 SDL(Simple DirectMedia Layer,一套开源的跨平台多媒体开发库)基础上开发而来,其目的是取代 PySDL。

用pygame做飞机大战之前,我们要学会pygame模块提供的一些功能,下面只对于今天程序要用到的进行简单的讲解


提示:以下是本篇文章正文内容,下面案例可供参考

一、安装pygame:

        1.用pip包管理器安装:

        键盘win+R调出运行窗口输入cmd在命令行输入以下内容回车即可

pip install pygame

         2.二进制安装包安装:

        Python 第三方库官网 PyPI点击前往下载)提供了不同操作平台的 Pygame 安装包,如下所示:

二、学习pygame的内置模块:

        1.初始化:

        1.pygame.init()  pygame 模块的初始化

        2.pygame.display.set_caption('名称')    pygame运行时的窗口名称

        3.screen = pygame.display.set_mode((480, 700))  创建一个窗口对象(大小为(480,700))

        4.pygame.font.Font(None, 20)  创建字体对象

        2.精灵组:

        1.pygame.sprite.Sprite 内置精灵组 在创建精灵类时重写:

class class_name(pygame.sprite.Sprite):
    def __init__(self, y):
        super().__init__()

        2.精灵组内提供了updata()方法:

def update(self, *args: Any, **kwargs: Any) -> None: 

    pass

        3.精灵组内提供了很多属性:

例如:

self.image = pygame.image.load(file)
self.rect = self.image.get_rect()

        4. self.kill() 摧毁精灵个体,释放内存

        3.页面的渲染和刷新

三、使用步骤

1.准备游戏素材:

        在我的资源中有上传详细:pygame 飞机大战资源

2.引入库

import csv
import re
from typing import Any
import random
import pygame
import copy
import sprite_file

3.game_main.py (完整代码)

import random
import pygame
import sprite_file

# 定义事件
BULLENT_EVENT = pygame.USEREVENT + 1
BULLENT_EVENT1 = pygame.USEREVENT + 2
BOSS_EVENT = pygame.USEREVENT + 3
BULLENT_EVENT2 = pygame.USEREVENT + 4
TIME_EVENT = pygame.USEREVENT + 5
TIME_EVENT1 = pygame.USEREVENT + 6


class Game:
    def __init__(self, game_difficult, gamer_info):
        self.gamer_nick = gamer_info[0]  # 获取玩家info参数
        # 游戏初始化
        self.object_speed = {  # 难度对速度的列表
            '简单': (5, 40, 5, 5, 0),
            '一般': (10, 70, 10, 10, 0),
            '困难': (15, 100, 15, 15, 1),
            '噩梦': (20, 150, 20, 20, 2)
        }
        self.game_speed = self.object_speed[game_difficult]  # 当前游戏难度对应的速度参数列表
        self.my0_b_speed = 15  # 我放飞机的子弹速度
        self.random_speed = [60, 400, 60, 60]  # 随机生成的time参数
        self.equipment = 0  # 拾取装备的次数
        self.file = sprite_file.File(file_loc='score_data.csv', encoding='utf_8')  # 创建文件操作对象
        # print(self.file_data)
        pygame.init()  # pygame 初始化
        pygame.display.set_caption('飞机大战2')  # 窗口名称
        self.prop = 0  # 强化道具参数初始化
        self.score = 0  # 总分数初始化
        self.bomb_num = 10  # 炸弹的个数
        self.score_list = list()  # 分数列表
        self.my0_speed = 5  # 战机的移动速度
        self.font = pygame.font.Font(None, 20)  # 创建字体对象
        self.root = pygame.display.set_mode((480, 700))  # 创建窗口大小的对象
        # bug 修复
        self.time_speed = 5
        self.time_bug_j = [i for i in range(0, self.time_speed)]
        self.time_bug_i = 0
        # 背景加载
        self.bj1 = sprite_file.Background(0)
        self.bj2 = sprite_file.Background(-700)
        # 创建自己的飞机
        self.my0 = sprite_file.Our_fighter()
        self.bullet_m = pygame.sprite.Group()
        # 创建敌机
        self.enemy = pygame.sprite.Group()
        self.boss1 = pygame.sprite.Group()
        self.enemy_b = pygame.sprite.Group()
        self.big_boss = pygame.sprite.Group()
        self.big_boss_bullet = pygame.sprite.Group()
        # 创建游戏道具
        self.game_props_b = pygame.sprite.Group()
        # 游戏帧数
        self.game_zl = 60
        # 创建时间事件
        pygame.time.set_timer(BULLENT_EVENT, 100)
        pygame.time.set_timer(BULLENT_EVENT1, 500)
        pygame.time.set_timer(BOSS_EVENT, 50000)
        pygame.time.set_timer(TIME_EVENT1, 50000)
        pygame.time.set_timer(BULLENT_EVENT2, 20000)
        pygame.time.set_timer(TIME_EVENT, 1)

    # 游戏事件
    def handle_event(self):

        # 退出事件
        for event in pygame.event.get():
            # print(event)
            if event.type == pygame.QUIT:
                pygame.quit()
                exit(0)

            # 时间事件
            if event.type == BULLENT_EVENT:
                self.bullet_m.add(sprite_file.Bullet_M(self.my0.rect.x, self.my0.rect.y, speed=self.my0_b_speed))
                if self.equipment == 1:
                    self.bullet_m.add(sprite_file.Bullet_M(self.my0.rect.x, self.my0.rect.y, mode='b', speed=self.my0_b_speed))
                    self.bullet_m.add(sprite_file.Bullet_M(self.my0.rect.x, self.my0.rect.y, mode='c', speed=self.my0_b_speed))
                if self.equipment >= 2:
                    self.bullet_m.add(sprite_file.Bullet_M(self.my0.rect.x, self.my0.rect.y, mode='b', speed&
  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值