目录
前言
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&