初识Pygame:Pie游戏
(。・∀・)ノ゙嗨,本文献给第一次学习python且想自己写游戏的小白们,本文我将会带领你们感受开发的乐趣,这个游戏虽然很简单,但是将由这个游戏作为一个契机,带你感受创造的喜悦,我们只是初次认识Pygame,学习绘制图像和文本的基础知识,并且编写一些代码。
了解Pie游戏
本文的示例是款叫作 Pie游戏。Pie 游戏使用Pygame来绘制填充的饼块。要在Pie游戏中使用Pygame绘制一个饼块, 用户按下与该饼块对应的数字键。然后,使用Pygame的绘制函数来绘制饼块。当按下针对所有饼块的按键而没有犯错的时候,玩家就获胜了。
如果还没有下载pygame的详情可见hello689的博客内容
使用Pygame
使用Pygame的第一步,是将Pygame库导入到Pygame程序中,以便可以使用它。
import pygame
下一个步骤是,导入Pygame中所有的变量,已准备好可以在我们的代码中访问他们。
from pygame.locals import *
现在,我们可以初始化Pygame了:
pygame.init()
初始化了Pygame,我们就可以访问这个库的所有资源了,下一步是获取对显示系统的访问,并且创建一个窗口。分辨率由你决定,但是,注意宽度和高度的参数要放在圆括号中(600,500)对变成了带有x,y属性的一个点。
screen = pygame.display.set_mode((600,500))
打印文本
pygame支持使用pygame.font将文本输出到图形窗口。要绘制文本,我们必须先创建一个字体对象:
myfont = pygame.font.Font(None,60)
可以向Pygamne font.Font构造函数提供一个TrueType字体,诸如“Arial",但是,使用None (不带引号)将会导致使用默认的Pygame字体。字体大小60已经很大了,但是,这只是一个简单的示例。 现在,使用Pygame绘制文本并不是一个轻量型的进程,而是一个重量型的进程。这意味着,文本并不是快速地绘制到屏幕上,而是渲染到一个平面,然后再将其绘制到屏幕上。由于这是一个耗费时间的过程,建议首先在内存中创建文本平面(或图像),然后再将文本当作一个图像来绘制。当我们]必须实时地绘制文本的时候,直接绘制是没问题的;但是,如果文本是无法修改的,最好先把文本提前渲染到一个图像之上。
white = 255,255,255
blue = 0,0,255
textImage = myfont.render("hello pygame",True,white)
textImage对象是可以使用screen.blit()绘制的平面,我们]的高难度的绘制函数,将会在所有的游戏和示例中广泛地使用。第一个参数显然是文本消息,第二个参数是抗锯齿字体(为了提高质量)的一个标志,第三个参数是颜色(一个RGB值)。
要绘制文本,通常的过程是清除屏幕,进行绘制,然后刷新显示。让我们看看所有这三行代码:
screen.fill(blue)
screen.blit(textImage,(100,100))
pygame.display.update()
循环
我们所看到的简化的示例有两个问题。首先,它只是运行次然后就停止了。其次没有办法获取任何用户输入(即便它不会立即退出)。因此,让我们看看如何修正这两个问题。首先,我们需要一个循环。在Python中这通过关键字while 来实现。While 语将执行冒号后面的代码,直到条件为假。只要while条件为真,它将持续运行:
while True:
接下来,我们创建一个事件处理程序。在早期阶段,我们期望窗口发生的事情是,它能够等待用户关闭它。关闭事件可能是点击窗口右上角的“X",或者只是按下任何的键。注意,while循环中的代码是缩进的。在此之后缩进的任何代码,都将包含在这个while循环。
while True:
for event in pygame.event.get():
if event.type in (QUIT, KEYDOWN)
sys.exit()
绘制矩形
要绘制矩形,通过多个参数来调用pygame.draw.rect0函数。这个程序所显示的窗口如图所示。这个示例比上个示例要高级些。 这个示例移动矩形,而不只是在屏幕中间绘制个矩形。 其工作的方法是, 在while 循环之外记录矩形的位置 (使用pos_x和pos_ y),并且创建一对速度变量(vel_x和vel_y)。在while循环之中,我们可以使用该速度来更新位置,然后,通过此逻辑来将矩形保持在屏幕上。其工作的方式是,任何时候,当矩形到达屏幕的边缘的时候,速度变量都取反。
import pygame,sys
from pygame.locals import *
pygame.init()
screen = pygame.display.set_mode((600,500))
pygame.display.set_caption("Drawing Rectangles")
pos_x=300
pos_y=250
vel_x=2
vel_y=1
while True:
for event in pygame.event.get(