python学习笔记1-黑马项目实战飞机大战第一篇---pygame入门

1. pygame入门

(1) 游戏的初始化和退出

init方法pygame.init():初始化pygame所有模块,使用其他模块时必须先调用,游戏时开始调用;
quit方法pygame.quit():卸载pygame所有模块,在游戏结束前调用
游戏代码框架:

import pygame
pygame.init()
# 游戏代码...
pygame.quit()

(2) 游戏界面的创建

坐标计算:Rect类pygame.Rect(x,y,width,height)
在这里插入图片描述

注:以屏幕左上角为原点创造坐标轴来定义x和y

创建游戏主窗口
 Display模块pygame.display:用于创建、管理窗口

方法说明
pygame.display.set_mode()初始化游戏显示窗口
pygame.display.update()刷新屏幕内容显示,稍后使用

注:set_mode(resolution=(0,0), flags=0, depth=0)
• resolution 指定屏幕的 宽 和 高,默认创建的窗口大小和屏幕大小一致
• flags 参数指定屏幕的附加选项,例如是否全屏等等,默认不需要传递
• depth 参数表示颜色的位数,默认自动匹配

注:set_mode方法返回的是一个游戏界面窗口,但由于程序会马上运行完直接终止,所以返回的界面会马上消失,这时可以添加一个死循环(游戏循环)让游戏界面不要马上消失
代码演示:

Screen(窗口名) = pygame.display.set_mode((480, 700))		# 创建游戏主窗口
while True:											# 游戏循环
    pass

 给窗口添加图像

  1. 加载图像:图像名=pygame.image.load("图像存储位置")
  2. 绘制在窗口:screen.blit(图像名, (x, y))
  3. 更新显示:pygame.display.update() 注:可以在添加所有以后做统一的更新操作

(3) 游戏循环:保证游戏不会直接退出,变化图像位置,检测用户的交互事件

游戏时钟clock类pygame.time.Clock:设置屏幕绘制速度,刷新屏幕变化图像位置
1) 创建时钟对象
2) 在游戏循环中让时钟对象调用tick(帧率)方法
代码演示:

clock = pygame.time.Clock()
# 游戏循环
while True:
    clock.tick(60)              # 设置屏幕刷新帧率

(4)监听事件pygame.event.get():

可以获取用户当前的事件列表
通过对获取到的事件列表做一个遍历,判断遍历到的事件则对事件做出相应的事件处理

简单实现英雄飞机的飞行以及鼠标点击关闭执行退出事件:

实现英雄飞行代码:

hero_rect = pygame.Rect(150, 500, 102, 126)             #英雄的初始位置
clock = pygame.time.Clock()				#创建游戏时钟对象
# 游戏循环
while True:
    clock.tick(60)                                 # 可以指定循环体内部的代码执行的频率
    hero_rect.y -= 1                              # 更新英雄位置
    if hero_rect.y <= 0:                        # 如果移出屏幕,则将英雄的顶部移动到屏幕底部
        hero_rect.y = 700
    screen.blit(bg, (0, 0))   # 绘制背景图片(目的是不保留原先位置的英雄图片,清空背景图)
    screen.blit(hero, hero_rect)      # 绘制英雄图像
    pygame.display.update()                    # 更新显示

实现监听鼠标点击关闭执行退出事件代码:注:几乎所有的 pygame 游戏都 大同小异!

# 事件监听
for event in pygame.event.get():
      # 判断用户是否点击了关闭按钮
      if event.type == pygame.QUIT:
          print("退出游戏...")
          pygame.quit()
          # 直接退出系统
          exit()

(5)理解pygame提供的两个类精灵和精灵组:
精灵pygame.sprite.Sprite(类.模块.方法):存储图像数据image和位置rect的对象
在这里插入图片描述
注:通常把显示图像的对象叫做精灵Sprite
image(要显示的图像)和rect(图像显示位置)这两个属性不是精灵类里面就存在的,因此开发时需要派生一个pygame.sprite.Sprite的子类,并在子类初始化方法中设置image和rect属性,通常update方法被重写自定义刷新屏幕更新精灵位置
例:派生精灵子类GameSprite
在这里插入图片描述

import pygame
class GameSprite(pygame.sprite.Sprite):
    """游戏精灵基类"""
    def __init__(self, image_name, speed=1):
        super().__init__()                              # 所有不是继承基类object的类,都应该调用父类的初始化方法
        self.image = pygame.image.load(image_name)      # 加载图像
        self.rect = self.image.get_rect()               # 设置尺寸
        self.speed = speed                              # 记录速度
    def update(self, *args):
        self.rect.y += self.speed                       # 默认在垂直方向移动

精灵组pygame.sprite.Group:
在这里插入图片描述

案例实战:使用精灵和精灵组创建敌机
将刚刚派生的精灵子类导入,用from(from plane_sprites import *)导入可以快速调用模块
在初始化处创建敌机精灵和精灵组:

创建敌机精灵和精灵组

enemy1 = GameSprite("./images/enemy1.png")              #将图像位置传入,加载了敌机1图像
enemy2 = GameSprite("./images/enemy1.png", 2)
enemy2.rect.x = 200                                     #对敌机2赋初始x位置
enemy_group = pygame.sprite.Group(enemy1, enemy2)       #创建精灵组传入敌机1和敌机2
在游戏循环处添加敌机精灵组调用刷新(update)方法和重新显示(draw)方法

让敌机组调用 update 和 draw 方法

enemy_group.update()                                #默认在所有敌机精灵垂直方向移动
enemy_group.draw(screen)                            #将移动后的敌机精灵绘制到屏幕
pygame.display.update()                             # 更新显示

初始调试游戏界面
在这里插入图片描述

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我知道您的问题是关于Python3和pygame开发的音乐播放器。这是一个简单的音乐播放器,使用Python3和pygame库开发。它可以播放MP3格式的音乐文件,具有基本的播放、暂停、停止、下一曲和上一曲等功能。 以下是代码示例: ```python import pygame import os import time class musicplayer: def __init__(self): pygame.init() pygame.mixer.init() self.clock = pygame.time.Clock() self.screen = pygame.display.set_mode((320, 240)) def play(self, music): pygame.mixer.music.load(music) pygame.mixer.music.play() def pause(self): pygame.mixer.music.pause() def unpause(self): pygame.mixer.music.unpause() def stop(self): pygame.mixer.music.stop() def next(self, musiclist, index): index += 1 if index >= len(musiclist): index = 0 self.play(musiclist[index]) return index def prev(self, musiclist, index): index -= 1 if index < 0: index = len(musiclist) - 1 self.play(musiclist[index]) return index def main(): musiclist = ["music1.mp3", "music2.mp3", "music3.mp3"] index = 0 mp = musicplayer() mp.play(musiclist[index]) while True: mp.clock.tick(60) for event in pygame.event.get(): if event.type == pygame.QUIT: mp.stop() pygame.quit() return if event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE: if pygame.mixer.music.get_busy(): mp.pause() else: mp.unpause() elif event.key == pygame.K_ESCAPE: mp.stop() pygame.quit() return elif event.key == pygame.K_RIGHT: index = mp.next(musiclist, index) elif event.key == pygame.K_LEFT: index = mp.prev(musiclist, index) if __name__ == "__main__": main() ``` 这个音乐播放器使用了pygame库来实现音乐播放和界面显示。它定义了一个`musicplayer`类来管理音乐播放器的各项功能,包括播放、暂停、停止、下一曲和上一曲等。在主程序中,我们可以设置要播放的音乐列表,然后通过按键来控制音乐播放器的各项功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值