python第三方库pygame的使用详解

Python第三方库pygame的使用详解

什么是pygame

pygame是一款Python第三方库,它是专为Python语言编写的多媒体库,用于开发2D游戏和多媒体应用程序,它提供了丰富的API,让开发者可以很轻松地创建各种复杂的游戏和多媒体应用。

安装pygame

在Windows系统下,可以使用以下命令安装pygame:

pip install pygame

在Mac OS X下,可以使用以下命令安装pygame:

brew install sdl sdl_image sdl_mixer sdl_ttf portmidi
pip install pygame

常用API介绍

pygame.display

pygame.display 模块用于创建游戏窗口,并对窗口进行各种操作,例如设置窗口标题、设置窗口大小、切换全屏等。

创建游戏窗口

通过 pygame.display.set_mode() 函数创建游戏窗口,参数是一个元组,表示游戏窗口的大小,例如 (800, 600) 代表宽度为800,高度为600的游戏窗口。

import pygame

pygame.init()

# 创建游戏窗口
screen = pygame.display.set_mode((800, 600))

# 游戏主循环
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

设置窗口标题

通过 pygame.display.set_caption() 函数设置游戏窗口标题。

import pygame

pygame.init()

# 创建游戏窗口
screen = pygame.display.set_mode((800, 600))

# 设置游戏窗口标题
pygame.display.set_caption("My Game")

# 游戏主循环
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

切换全屏

通过 pygame.display.toggle_fullscreen() 函数切换全屏,参数是一个元组,表示游戏窗口的大小,例如 (800, 600) 代表宽度为800,高度为600的游戏窗口。

import pygame

pygame.init()

# 创建游戏窗口
screen = pygame.display.set_mode((800, 600))

# 游戏主循环
while True:
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN and event.key == pygame.K_F11:
            # 切换全屏
            pygame.display.toggle_fullscreen((800, 600))

pygame.Surface

pygame.Surface 类代表了游戏窗口中的一个矩形区域,可以对其中的像素点进行操作。

创建Surface对象

通过 pygame.Surface() 函数创建一个空的Surface对象,参数是一个元组,表示Surface对象的大小,例如 (800, 600) 表示Surface对象的宽度为800,高度为600。

import pygame

pygame.init()

# 创建游戏窗口
screen = pygame.display.set_mode((800, 600))

# 创建Surface对象
surface = pygame.Surface((800, 600))

# 游戏主循环
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

绘制矩形

通过 pygame.draw.rect() 函数在Surface对象上绘制矩形,参数是一个元组,表示矩形的左上角坐标和矩形的宽度和高度,例如 (100, 100, 50, 50) 表示矩形的左上角坐标是 (100, 100),宽度是50,高度是50。

import pygame

pygame.init()

# 创建游戏窗口
screen = pygame.display.set_mode((800, 600))

# 创建Surface对象
surface = pygame.Surface((800, 600))

# 绘制矩形
pygame.draw.rect(surface, (255, 0, 0), (100, 100, 50, 50))

# 游戏主循环
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

    # 在游戏窗口中绘制Surface对象
    screen.blit(surface, (0, 0))

    # 更新游戏窗口
    pygame.display.update()

pygame.event

pygame.event 模块用于处理事件,例如键盘输入、鼠标操作等。

获取事件

通过 pygame.event.get() 函数获取当前游戏窗口中的所有事件,返回一个列表,列表中的每一个元素代表一个事件,可以通过事件的 type 属性获取事件类型,例如 pygame.QUIT 表示关闭窗口事件。

import pygame

pygame.init()

# 创建游戏窗口
screen = pygame.display.set_mode((800, 600))

# 游戏主循环
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

键盘输入事件

通过 pygame.KEYDOWN 事件获取键盘按键事件,可以通过 event.key 属性获取按键对应的常量,例如 pygame.K_LEFT 表示左箭头键。

import pygame

pygame.init()

# 创建游戏窗口
screen = pygame.display.set_mode((800, 600))

# 游戏主循环
while True:
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                print("按下了上箭头键")
            elif event.key == pygame.K_DOWN:
                print("按下了下箭头键")
            elif event.key == pygame.K_LEFT:
                print("按下了左箭头键")
            elif event.key == pygame.K_RIGHT:
                print("按下了右箭头键")
            elif event.key == pygame.K_SPACE:
                print("按下了空格键")
        elif event.type == pygame.QUIT:
            pygame.quit()
            exit()

示例

示例1:Pong游戏

import pygame

# 初始化pygame
pygame.init()

# 创建游戏窗口
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Pong游戏")

# 创建Surface对象
surface = pygame.Surface((800, 600))

# 创建球的初始位置
ball_x = 400
ball_y = 300
ball_speed_x = 5
ball_speed_y = 5

# 创建球拍的初始位置
left_paddle_y = 250
right_paddle_y = 250

# 游戏主循环
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_w:
                left_paddle_y -= 10
            elif event.key == pygame.K_s:
                left_paddle_y += 10
            elif event.key == pygame.K_UP:
                right_paddle_y -= 10
            elif event.key == pygame.K_DOWN:
                right_paddle_y += 10

    # 绘制球
    pygame.draw.circle(surface, (255, 255, 255), (ball_x, ball_y), 10)

    # 碰壁检测和反弹
    if ball_y <= 0 or ball_y >= 600:
        ball_speed_y = -ball_speed_y
        pygame.mixer.Sound("bounce.wav").play()

    # 球拍碰撞检测
    if ball_x <= 30 and abs(ball_y - left_paddle_y) <= 50:
        ball_speed_x = -ball_speed_x
        pygame.mixer.Sound("bounce.wav").play()
    elif ball_x >= 770 and abs(ball_y - right_paddle_y) <= 50:
        ball_speed_x = -ball_speed_x
        pygame.mixer.Sound("bounce.wav").play()

    # 移动球
    ball_x += ball_speed_x
    ball_y += ball_speed_y

    # 绘制球拍
    left_paddle_rect = pygame.Rect(10, left_paddle_y - 50, 10, 100)
    pygame.draw.rect(surface, (255, 255, 255), left_paddle_rect)
    right_paddle_rect = pygame.Rect(780, right_paddle_y - 50, 10, 100)
    pygame.draw.rect(surface, (255, 255, 255), right_paddle_rect)

    # 在游戏窗口中绘制Surface对象
    screen.blit(surface, (0, 0))

    # 更新游戏窗口
    pygame.display.update()

示例2:飞机大战

import pygame
import random

# 初始化pygame
pygame.init()

# 创建游戏窗口
screen = pygame.display.set_mode((480, 800))
pygame.display.set_caption("飞机大战")

# 创建Surface对象
surface = pygame.Surface((480, 800))

# 创建背景图
background = pygame.image.load("background.png")

# 创建玩家飞机
player_plane = pygame.image.load("player.png")
player_x = 240
player_y = 640

# 创建敌机
enemy_plane = pygame.image.load("enemy.png")
enemies = []
for i in range(5):
    enemy = {"x": random.randint(0, 430), "y": random.randint(-200, -100)}
    enemies.append(enemy)

# 创建子弹
bullet = pygame.image.load("bullet.png")
bullets = []

# 创建分数
score = 0

# 加载音效
pygame.mixer.music.load("music.mp3")
pygame.mixer.music.set_volume(0.3)
pygame.mixer.music.play(-1)
shoot_sound = pygame.mixer.Sound("shoot.wav")
shoot_sound.set_volume(0.1)
hit_sound = pygame.mixer.Sound("hit.wav")
hit_sound.set_volume(0.1)

# 游戏主循环
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                player_x -= 10
            elif event.key == pygame.K_RIGHT:
                player_x += 10
            elif event.key == pygame.K_SPACE:
                bullet_x = player_x + 49
                bullet_y = player_y - 20
                bullet_rect = pygame.Rect(bullet_x, bullet_y, 10, 20)
                bullets.append(bullet_rect)
                shoot_sound.play()

    # 绘制背景
    surface.blit(background, (0, 0))

    # 绘制玩家飞机
    surface.blit(player_plane, (player_x, player_y))

    # 移动敌机和检测是否撞到玩家飞机
    for enemy in enemies:
        enemy["y"] += 5
        enemy_rect = pygame.Rect(enemy["x"], enemy["y"], 55, 45)
        surface.blit(enemy_plane, (enemy["x"], enemy["y"]))
        if enemy_rect.colliderect(pygame.Rect(player_x, player_y, 100, 124)):
            hit_sound.play()
            pygame.time.delay(1000)
            pygame.quit()
            exit()

    # 移动子弹和检测是否撞到敌机
    for bullet_rect in bullets:
        bullet_rect.y -= 10
        surface.blit(bullet, bullet_rect)
        for enemy in enemies:
            enemy_rect = pygame.Rect(enemy["x"], enemy["y"], 55, 45)
            if bullet_rect.colliderect(enemy_rect):
                hit_sound.play()
                bullets.remove(bullet_rect)
                enemies.remove(enemy)
                score += 1

    # 绘制分数
    font = pygame.font.Font(None, 36)
    text = font.render("Score: {}".format(score), True, (255, 255, 255))
    surface.blit(text, (10, 10))

    # 添加敌机
    if len(enemies) < 5:
        enemy = {"x": random.randint(0, 430), "y": -50}
        enemies.append(enemy)

    # 在游戏窗口中绘制Surface对象
    screen.blit(surface, (0, 0))

    # 更新游戏窗口
    pygame.display.update()

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python第三方库pygame的使用详解 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • Python安装spark的详细过程

    安装Python并不是安装Spark的必需步骤,因为Python和Spark是两个独立的组件。但是,安装Python是进行数据分析、数据处理和机器学习时常用的一个语言。因此,我们在这里提供一个Python安装Spark的详细过程攻略。 安装Python 首先,我们需要在计算机上安装Python。Python有两个主要版本:Python 2和Python 3。…

    python 2023年5月14日
    00
  • Python使用Pandas读写Excel实例解析

    下面是一份完整的Python使用Pandas读写Excel实例解析的教程: Python使用Pandas读写Excel实例解析 1. Introduction Pandas是Python中的一个开源数据分析库,它提供了一个快速、灵活、易于使用的数据结构,可以使数据分析和数据操作更加便捷。本教程将讲解如何使用Pandas读写Excel文件。 2. 安装Pand…

    python 2023年5月13日
    00
  • Python中可以用三种方法判断文件是否存在

    在Python中,可以用三种方法判断文件是否存在,分别为: os.path.isfile() 这是Python自带的一个库,判断某个路径是否为文件。可以使用以下语法: import os # 检查文件是否存在 if os.path.isfile(‘/path/to/file’): print(‘文件存在’) else: print(‘文件不存在’) 其中,/…

    python 2023年6月2日
    00
  • 深入理解最新Python中的Match Case

    深入理解最新Python中的Match Case 什么是Match Case Match Case是Python3.10中引入的新特性,用于简化对复杂条件的判断。类似于swict-case语句,Match Case能够对多个条件进行匹配判断,以便更有效地编写代码。它使用 match 和 case 关键字来传递参数和进行条件匹配。 Match Case的使用方…

    python 2023年6月3日
    00
  • python中的psutil模块详解(cpu、内存、磁盘情况、结束指定进程)

    Python中的psutil模块详解 什么是psutil psutil是一个跨平台的系统监控库,可以获取CPU、内存、磁盘和网络等系统信息。使用psutil可以实现监控系统,实现自动化运维等功能。 安装psutil 使用pip可以轻松安装psutil: pip install psutil 获取CPU使用率 使用psutil.cpu_percent()方法可…

    python 2023年5月30日
    00
  • java8 Stream大数据量List分批处理切割方式

    Java8中的Stream API为处理大量数据提供了一种有效的方式。当数据量很大时,可以将大数据量的集合拆分成多个小集合,然后使用Stream API进行批量处理。在这里,我们将讨论如何使用Java8 Stream API对大量数据进行分批处理的切割方式。 1. 切割方式 使用Java8 Stream API进行大数据集合分批处理非常简单。我们只需要按照以…

    python 2023年5月14日
    00
  • Python实现爬取房源信息的示例详解

    Python实现爬取房源信息的示例详解 1. 准备工作 在开始实现爬取房源信息的示例之前,你需要进行以下准备工作: 安装Python环境 如果你尚未安装Python环境,可以前往Python官网下载你所需要的版本。 安装第三方包 我们使用requests、Beautiful Soup和pandas这三个第三方包来进行数据抓取和数据处理。你可以使用以下命令分别…

    python 2023年5月14日
    00
  • python向json中追加数据的两种方法总结

    关于“python向json中追加数据的两种方法总结”的完整攻略,我会从以下几个方面进行讲解: 什么是JSON? Python中处理JSON的常用方法 Python向JSON中追加数据的两种方法 示例说明 1. 什么是JSON? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有良好的可读性和便于机器解析。JSO…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部