📜  Pygame 入门(1)

📅  最后修改于: 2023-12-03 15:03:54.760000             🧑  作者: Mango

Pygame 入门

Pygame是一个基于Python的开源游戏框架,提供了一系列开发游戏所需的工具和自定义的Python模块。本文将介绍Pygame的基本知识以及如何使用Pygame开发2D游戏。

安装Pygame

在开始之前,您需要先安装Pygame模块。

pip install pygame
绘制图形

在Pygame中,您可以创建一个屏幕,并使用各种形状,如矩形、圆形、直线、多边形等来绘制图形。一个基本的游戏循环是:获取用户输入、更新游戏状态和绘制屏幕。

创建游戏窗口

要创建一个游戏窗口,您可以使用pygame.display.set_mode()方法。此方法将返回一个表示屏幕的对象。

import pygame
 
pygame.init()
 
screen_width = 640
screen_height = 480
 
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Pygame 入门")
绘制矩形

您可以使用pygame.draw.rect()方法绘制矩形。该方法需要传入一个表示屏幕的对象、颜色、一个矩形的位置和大小以及一个可选参数来指定边框宽度。

import pygame
 
pygame.init()
 
screen_width = 640
screen_height = 480
 
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Pygame 入门")
 
rect_x = 100
rect_y = 100
rect_width = 50
rect_height = 50
rect_color = (255, 0, 0) # 红色
 
pygame.draw.rect(screen, rect_color, (rect_x, rect_y, rect_width, rect_height))
 
pygame.display.update()
绘制圆形

要绘制圆形,您可以使用pygame.draw.circle()方法。该方法需要传入一个表示屏幕的对象、颜色、一个圆形的中心点和半径以及一个可选参数来指定边框宽度。

import pygame
 
pygame.init()
 
screen_width = 640
screen_height = 480
 
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Pygame 入门")
 
circle_x = 300
circle_y = 200
circle_radius = 30
circle_color = (0, 255, 0) # 绿色
 
pygame.draw.circle(screen, circle_color, (circle_x, circle_y), circle_radius)
 
pygame.display.update()
绘制直线

您可以使用pygame.draw.line()方法绘制直线。该方法需要传入一个表示屏幕的对象、颜色、线条起点和终点以及一个可选参数来指定线段宽度。

import pygame
 
pygame.init()
 
screen_width = 640
screen_height = 480
 
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Pygame 入门")
 
line_start = (50, 50)
line_end = (100, 200)
line_color = (0, 0, 255) # 蓝色
 
pygame.draw.line(screen, line_color, line_start, line_end, 5)
 
pygame.display.update()
绘制多边形

您可以使用pygame.draw.polygon()方法绘制多边形。该方法需要传入一个表示屏幕的对象、颜色和多边形的各个点坐标。

import pygame
 
pygame.init()
 
screen_width = 640
screen_height = 480
 
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Pygame 入门")
 
polygon_points = [(200, 200), (250, 250), (300, 200), (275, 175)]
polygon_color = (255, 255, 0) # 黄色
 
pygame.draw.polygon(screen, polygon_color, polygon_points)
 
pygame.display.update()
处理用户输入

Pygame中有几个内置的事件,可以用来处理用户的输入,如按键、鼠标动作等等。

事件循环

您可以使用pygame.event.get()方法获取所有当前正在处理的事件。然后,您需要迭代这些事件,分别处理每一个事件。

import pygame
 
pygame.init()
 
screen_width = 640
screen_height = 480
 
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Pygame 入门")
 
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
 
    pygame.display.update()

在上面的示例中,我们处理了QUIT事件。当用户点击窗口的关闭按钮时,该事件将被触发,然后我们使用pygame.quit()方法终止程序并退出。

处理按键事件

您可以使用键位常量(K_LEFT、K_RIGHT、K_UP、K_DOWN等)来处理按键事件。下面的示例演示了如何使用左右方向键来移动矩形:

import pygame, sys
 
pygame.init()
 
screen_width = 640
screen_height = 480
 
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Pygame 入门")
 
rect_x = 100
rect_y = 100
rect_width = 50
rect_height = 50
rect_color = (255, 0, 0) # 红色

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                rect_x -= 5
            elif event.key == pygame.K_RIGHT:
                rect_x += 5
 
    screen.fill((255, 255, 255))
 
    # 绘制矩形
    pygame.draw.rect(screen, rect_color, (rect_x, rect_y, rect_width, rect_height))
 
    pygame.display.update()

在这里,我们使用常量K_LEFT和K_RIGHT来检查用户是否按下了相应的方向键。如果是,则移动矩形的位置。

处理鼠标事件

您可以使用pygame.mouse.get_pos()方法获取鼠标位置,并使用pygame.mouse.get_pressed()方法检查鼠标按下情况。下面的示例演示了如何使用鼠标点击来移动矩形:

import pygame, sys
 
pygame.init()
 
screen_width = 640
screen_height = 480
 
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Pygame 入门")
 
rect_x = 100
rect_y = 100
rect_width = 50
rect_height = 50
rect_color = (255, 0, 0) # 红色

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.MOUSEBUTTONDOWN:
            mouse_x, mouse_y = pygame.mouse.get_pos()
            if rect_x < mouse_x < rect_x + rect_width and rect_y < mouse_y < rect_y + rect_height:
                rect_x, rect_y = mouse_x - rect_width / 2, mouse_y - rect_height / 2
 
    screen.fill((255, 255, 255))
 
    # 绘制矩形
    pygame.draw.rect(screen, rect_color, (rect_x, rect_y, rect_width, rect_height))
 
    pygame.display.update()

在这里,我们检查鼠标是否被按下,并检查鼠标是否在矩形边界内。如果是,我们将矩形移动到鼠标位置。

其他有用的模块

除了上面介绍的基本模块外,Pygame还包含许多其他有用的模块,如图片加载、声音、文字渲染等等。

图片加载

您可以使用pygame.image.load()方法加载图像文件,并使用blit()方法将其绘制到屏幕上。

import pygame, sys
 
pygame.init()
 
screen_width = 640
screen_height = 480
 
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Pygame 入门")
 
bg_image = pygame.image.load("bg.jpg")

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
 
    # 绘制背景图片
    screen.blit(bg_image, (0, 0))
 
    pygame.display.update()

在这里,我们加载名为bg.jpg的图像,并绘制到屏幕上。

声音

要使用声音,您需要加载一个音频文件,并使用pygame.mixer.Sound()方法创建一个声音对象。然后,可以使用play()方法播放声音。

import pygame, sys
 
pygame.init()
 
screen_width = 640
screen_height = 480
 
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Pygame 入门")
 
ding_sound = pygame.mixer.Sound("ding.wav")
 
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                # 播放音效
                ding_sound.play()
    pygame.display.update()

在这里,我们加载名为ding.wav的音频文件,并在用户按下空格键时播放声音。

文字渲染

要渲染文本,您需要指定文本内容、字体和字体大小。然后,您可以使用render()方法创建一个表示文本的Surface对象,可以将其绘制到屏幕上。

import pygame, sys
 
pygame.init()
 
screen_width = 640
screen_height = 480
 
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Pygame 入门")
 
font = pygame.font.Font(None, 36) # 使用默认字体
text = font.render("Hello, Pygame!", True, (255, 0, 0)) # 红色
 
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
 
    # 绘制文本
    screen.blit(text, (200, 200))
 
    pygame.display.update()

在这里,我们使用默认字体,创建一个表示“Hello, Pygame!”文本的Surface对象,并将其绘制到屏幕上。

结论

在本文中,我们通过示例介绍了Pygame的基本知识和用法。实际上,Pygame是一个非常强大的游戏框架,提供了许多其他有用的功能和模块。希望这篇文章能够帮助您入门Pygame的开发。