pygame简介
游戏编程现在非常有价值,它也可以用于广告和教学工具。游戏开发包括数学、逻辑、物理、人工智能等等,它可以非常有趣。在Python中,游戏编程是在 pygame 中完成的,它是最好的模块之一。
安装 pygame:
Pygame 需要Python;如果您还没有它,您可以从Python.org 下载它。使用Python 3.6.1 或更高版本,因为它对新手更友好,而且运行速度更快。
安装 pygame 的最佳方法是使用 pip 工具( Python用来安装包)。请注意,这在最新版本中随Python一起提供。我们使用 –user 标志告诉它安装到主目录中,而不是全局安装。
python3 -m pip install -U pygame --user
要查看它是否有效,请运行包含的示例之一:
python3 -m pygame.examples.aliens
如果它有效,我们准备好了!
一旦你安装了 pygame,你就可以创建你的第一个 pygame 实例了。
Python3
# import the pygame module
import pygame
# import pygame.locals for easier
# access to key coordinates
from pygame.locals import *
# Define our square object and call super to
# give it all the properties and methods of pygame.sprite.Sprite
# Define the class for our square objects
class Square(pygame.sprite.Sprite):
def __init__(self):
super(Square, self).__init__()
# Define the dimension of the surface
# Here we are making squares of side 25px
self.surf = pygame.Surface((25, 25))
# Define the color of the surface using RGB color coding.
self.surf.fill((0, 200, 255))
self.rect = self.surf.get_rect()
# initialize pygame
pygame.init()
# Define the dimensions of screen object
screen = pygame.display.set_mode((800, 600))
# instantiate all square objects
square1 = Square()
square2 = Square()
square3 = Square()
square4 = Square()
# Variable to keep our game loop running
gameOn = True
# Our game loop
while gameOn:
# for loop through the event queue
for event in pygame.event.get():
# Check for KEYDOWN event
if event.type == KEYDOWN:
# If the Backspace key has been pressed set
# running to false to exit the main loop
if event.key == K_BACKSPACE:
gameOn = False
# Check for QUIT event
elif event.type == QUIT:
gameOn = False
# Define where the squares will appear on the screen
# Use blit to draw them on the screen surface
screen.blit(square1.surf, (40, 40))
screen.blit(square2.surf, (40, 530))
screen.blit(square3.surf, (730, 40))
screen.blit(square4.surf, (730, 530))
# Update the display using flip
pygame.display.flip()
Python3
class Square(pygame.sprite.Sprite):
def __init__(self):
super(Square, self).__init__()
self.surf = pygame.Surface((25, 25))
self.surf.fill((0, 200, 255))
self.rect = self.surf.get_rect()
Python3
pygame.init()
screen = pygame.display.set_mode((800, 600))
square1 = Square()
square2 = Square()
square3 = Square()
square4 = Square()
Python3
while running:
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_BACKSPACE:
running = False
elif event.type == QUIT:
running = False
Python3
screen.blit(square1.surf, (40, 40))
screen.blit(square2.surf, (40, 530))
screen.blit(square3.surf, (730, 40))
screen.blit(square4.surf, (730, 530))
pygame.display.flip()
上面的Python代码是一个简单的 pygame 脚本,用于绘制四个青色方块。
输出:
不用担心!在接下来的几篇文章中,我们将学习更多关于如何使对象移动、如何添加动画效果、按钮、音乐等等的知识,但现在让我们了解包含所有必要 pygame 元素的基本代码。
import pygame
from pygame.locals import *
在前几行中,我们导入了 pygame 和 pygame.locals,这是在Python中使用任何模块之前必须做的。
精灵、冲浪和矩形:
Sprite: Sprite 只是我们在屏幕上绘制的 2d 对象。我们可以通过扩展 sprite 类来使用它们。
冲浪:表面就像我们在上面画画的空白纸。我们的屏幕对象也是一个 Surface。他们也可以保存图像。
矩形:我们在表面上定义的矩形区域。
Python3
class Square(pygame.sprite.Sprite):
def __init__(self):
super(Square, self).__init__()
self.surf = pygame.Surface((25, 25))
self.surf.fill((0, 200, 255))
self.rect = self.surf.get_rect()
注意:我们使用的是 RGB 格式的颜色编码,我们可以通过给出 0-255 范围内的红色、蓝色和绿色颜色值来形成不同的颜色。 (0, 0, 0) 的元组是黑色,因为没有颜色,而 (255, 255, 255) 的元组是白色。
在我们的代码中,我们扩展了 sprite 类,以便我们可以使用surfs和rects来绘制我们的正方形。我们制作了一个尺寸为 25x25px 的表面并填充了颜色:(0, 200, 255)
pygame.init() :
Python3
pygame.init()
screen = pygame.display.set_mode((800, 600))
square1 = Square()
square2 = Square()
square3 = Square()
square4 = Square()
上面的代码行使用命令 pygame.init() 初始化 pygame,这是使用 pygame 模块命令所必需的。之后,我们定义我们的屏幕对象及其以像素为单位的尺寸。然后在接下来的几行中,我们初始化我们的四个正方形。
游戏循环
Python3
while running:
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_BACKSPACE:
running = False
elif event.type == QUIT:
running = False
游戏开发代码中最重要的部分是游戏循环。这个循环在后台持续运行,直到用户结束游戏或游戏结束。现在我们的游戏循环并不值得期待。它只跟踪两个基本事件。我们可以根据游戏状态、用户输入等等添加更多事件,但这里要记住的一点是游戏循环必须在某些条件之后结束,否则用户将永远卡在游戏循环中。
Blit and Flip –
Blit: Blit 关键字用于在另一个表面上绘制一个表面。简单来说,当我们绘制一个表面时,我们只是将它粘贴到另一个表面上。
Flip:用于在绘制完所有内容后更新整个屏幕。请记住,翻转仅在绘制所有必要的表面后才起作用,否则,它不会更新任何内容。
Python3
screen.blit(square1.surf, (40, 40))
screen.blit(square2.surf, (40, 530))
screen.blit(square3.surf, (730, 40))
screen.blit(square4.surf, (730, 530))
pygame.display.flip()
在上面的代码行中,我们首先在屏幕上粘贴了四个方块,然后我们翻转使它们出现。