【半夜爬起来学python】零基础学习Pygame|第一期|知识点+小球反弹游戏案例

一.安装Pygame

Pygame是跨平台Python模块,很多编译器不会向用户提供该模块,需要我们自己安装。

安装步骤:

打开Pygame官网:www.pygame.org

点击PYGAME 2.6.0-25 JUN,2024

【半夜爬起来学python】零基础学习Pygame|第一期|知识点+小球反弹游戏案例_第1张图片

下载好之后,解压压缩包,安装路径最好放在c盘里Administrator文件里

在菜单栏点击搜索,输入cmd,找到“命令提示符”

【半夜爬起来学python】零基础学习Pygame|第一期|知识点+小球反弹游戏案例_第2张图片

输入命令

pip install pygame

运行的时候会发现命令下方有个加载条

接下来,检验一下安装是否成功

打开IDLE

【半夜爬起来学python】零基础学习Pygame|第一期|知识点+小球反弹游戏案例_第3张图片

输入命令

import pygame

如果运行结果是这样的,说明安装成功:

【半夜爬起来学python】零基础学习Pygame|第一期|知识点+小球反弹游戏案例_第4张图片

二.知识点

pygame.display模块里常用的方法:

  1. 初始化一个准备显示的界面
    pygame.display.set_mode(size=(width, height), flags=0, depth=0, display=0, vsync=0)

      说明:第一个参数size(不能省略),格式为元组(width,height)指定窗口的长度和宽度。第二个参数flags(可省略),常用标志包括pygame.FULLSCREEN:全屏模式;pygame.RESIZABLE:窗口可调整大小;pygame.NOFRAME:无边框窗口;pygame.DOBLEBUF:双缓冲模式(用于平滑动画);pygame.HWSURFACE:硬件加速surface;pygame.OPENGL:使用OpenGL渲染上下文。第三个参数depth(可省略):指颜色位数。第四个参数(可省略)。第五个参数(可省略):vsync=1,可启用垂直同步(减少画面撕裂)
    #举个例子 第一个参数用元组存储长和宽,第二个参数为全屏功能
    screen=pygame.display.set_mode((800,600),pygame.FULLSCREEN)
    #或者可以这么写
    size=height,width=800,600
    screen=pygame.display.set_mode(size,pygame.FULLSCREEN)
  2. 更新整个Surface对象并显示到屏幕上,一般用于循环体内(如while循环)

    pygame.display.flip
    #举个例子
    pygame.display.flip()

Surface模块里常用的方法:

( 见上面pygame.display模块set_mode方法举例)screen实际上是一个Surface对象。

什么是Surface呢?

Surface是用来代表图片pygame对象,可以对一个Surface对象进行涂画、变形、复制等各种操作

  1. 将一个图像画到另一个图像
    pygame.Surface.blit
    #举个例子
    screen.blit(ball,ballrect)            #ball指要画的图像,ballrect指被覆盖的图像
  2. 使用颜色填充Surface
    pygame.Surface.fill(color,rect=None,special_flags=0)    #color(必需):(R,G,B,A(可选))
                                                            #rect(可选):矩形 (x,y,width,height),
                                                            #前两个表示矩形位置,后两个表示矩形的 
                                                            #宽和高
                                                            #spcial_flags(可选):颜色混合模式包括
                                                            #pygame.BLEND_ADD:颜色叠加
                                                            #pygame.BLEND_MULT:颜色相乘
    #举个例子
    screen.fill((1,1,1))              #参数是一个元组,里面包括R(红)G(绿)B(蓝)A(透明度)四个 
                                      #个分量(A可省略不写),范围均为[0,255]
  3.  获取Surface矩形区域
    pygame.Surface.get_rect()                   #获取一个Surface的矩形区域
    #举个例子
    ball=pygame.image.load("ball.png")       #加载图片
    ball_rect=ball.get_rect()                #获取矩形

三.案例(小球反弹游戏)

# --coding:utf-8--
import sys                                 #sys主要用于与Python解释器交互,此代码用到了 
                                           #sys.exit(),括号里默认为0,表示在零状态退出程序
import pygame                              #pygame模块
import random                              #random随机模块,后面随机生成小球初始位置和速度

pygame.init()                              # 初始化pygame
size = width, height = 500, 500            #设定窗口尺寸大小
screen = pygame.display.set_mode(size)

# 创建多个小球
balls = []                                 #初始化balls列表
for i in range(10):                        #分别生成10个小球
    ball = pygame.image.load("ball.png")   #加载图片
    ballrect = ball.get_rect()
    # 随机初始位置
    ballrect.x = random.randint(0, width - ballrect.width)
    ballrect.y = random.randint(0, height - ballrect.height)
    # 随机速度
    speed_x = random.randint(1, 10)
    speed_y = random.randint(1, 10)
    speed = [speed_x, speed_y]
    balls.append((ball, ballrect, speed))  #把变量放到balls列表里面

clock = pygame.time.Clock()                #设置时钟

while True:
    clock.tick(25)                         # 控制帧率为每秒25帧
    for event in pygame.event.get():       # 遍历所有事件,判断是否触发退出事件,如果是,就
        if event.type == pygame.QUIT:      # 退出程序
            pygame.quit()
            sys.exit()
    
    screen.fill((0, 0, 0))                 # 每显示完一个帧,清空屏幕,避免出现之前的运动轨 
                                           # 迹
    
    # 更新每个小球的位置                    #balls长度为10
    for i in range(len(balls)):
        ball, ballrect, speed = balls[i]   #分别赋值
        ballrect = ballrect.move(speed)    #让小球移动起来
        
        # 边界检测
        if ballrect.left < 0 or ballrect.right > width:
            speed[0] = -speed[0]
        if ballrect.top < 0 or ballrect.bottom > height:
            speed[1] = -speed[1]
        
        # 更新小球的位置和速度
        balls[i] = (ball, ballrect, speed)
        screen.blit(ball, ballrect)
    
    pygame.display.flip()                   # 更新屏幕

你可能感兴趣的:(python(pygame),pygame,学习,游戏,pip)