用户:可亲的独角蛛mXYt查看:5 回复:3 评论:5 创建时间:2023-01-01T21:21:12
1.1 获取GUI和简单指令
图形化用户界面(Graphical User Interface,GUI)包括了你见过的所有在计算机内看到的按钮,图标,菜单和窗口,而这正就是我们与计算机交互的方式。
pygame非常可视化,是游戏,动画等GUI的完美选择,并且他对于所有操作系统都是可移植的。
如果用正规的python,就要去http://www.pygame.org/中的Download页面下载pygame;如果用海龟编程器(客户端),直接使用就可以了,已经自动安装了。
下载完成后,只需写下下面语句就可以导入pygame

import pygame
#导入
1.1.1 用pygame画一个点
一旦安装好了pygame,我们就可以运行一个简短的程序在屏幕上画一个点,如图1-2所示(超级模糊)

代码:
import pygame
pygame.init() #1
screen = pygame.display.set_mode([800,600]) #2
keep = True #3
GREEN = (0,255,0) #4
radius = 15
while keep: #5
for event in pygame.event.get(): #6
if event.type == pygame.QUIT: #7
keep = False
pygame.draw.circle(screen,GREEN,(100,100),radius) #8
pygame.display.update() #9
pygame.quit() #10

你可能看不懂,别急!
让我们一行一行浏览一下这个程序。首先我们导入了pygame
在#1处,我们初始化了pygame。当我们要用pygame的功能时我们都要用这个。他总是出现在import pygame之后,其他pygame函数前
在#2处,pygame.display.set_mode([800,600])创建了一个宽600高800的显示窗口,我们将其存储在一个叫screen的变量中。在pygame中,窗口和图形称为surface,它是绘制所有其他图形的主要窗口。
在#3处,我们用一个变量keep存储一个布尔值,用它来帮助循环
在#4处,我们设置了两个变量GREEN和radius用于绘制圆。GREEN变量用于设置颜色(RGB颜色),radius变量用于设置圆的半径,我们设置50,从而得到一个直径100像素的圆。
在#5处,while循环是游戏循环,他能持续运行pygame窗口,直到我们点击了退出。
在#6处,这个for循环是来处理游戏的交互事件的。在这个程序里,我们要检查的唯一事件,就是用户是否点击了红×键并且 在#7 处 退出程序(改变keep的布尔值为否,使得while循环退出)
在#8处,我们在窗口上(100,100)的位置绘制一个半径50的圆。这个位置的概念之后会讲。这个代码需要的参数有:在哪一个窗口上(screen),颜色(GREEN),圆心坐标以及半径。
在#9处的update()代码告诉pugame用绘制修改来刷新屏幕
最后,在#10处,pygame.quit()命令清除pygame模块并且关闭screen窗口,以便程序能正常退出。
这第一个程序包含了一些基础,我们会在这些基础上创建更加复杂的动画,图形,最终形成游戏。
消化一下吧!
1.1.2 pygame中的新内容
在开始深入pygame令人 鸡动 的世界之前,我们先来看一下一些新的内容。

我们有一个新的坐标系,如上图所示。
pygame中总是使用游戏循环
在pygame中,我们通过pygame.event.get()来获取用户执行的事件的一个列表。
这些区别和新内容使得pygame有了一种新的方式来解决问题,而这正是我们一直寻找的方式。所拥有的工具越多,我们所能解决的问题就越多。

1.1.3 游戏的部分
在这里,我们将修改1.1.2中的程序使其显示一个笑脸而不是一个绿色的圆。
我们将学习pygame中的一款游戏或动画的3个重要部分。首先是设置过程,在这里,我们导入所需要的模块,创建屏幕并且初始化一些重要的变量。然后是游戏循环,他将处理事件,绘制图形并且更新显示。最后,当用户停止程序时,我们需要有一种方式来结束程序。
设置
首先,我们先下载笑脸图片并将其保存到与我们的py文件相同的文件夹里。下载下面的图片并且把它命名为喵ile(1)。

接下来,我们来进行设置。
import pygame
pygame.init()
screen = pygame.display.set_mode([800,600])
keep = True
pic = pygame.image.load('喵ile(1).jpg') #1
和往常一样,我们导入pygame模块,然后用pygame.init()初始化。接下来,将screen设置为一个新的800*600像素的窗口。我们创建了一个布尔类型的变量keep来控制游戏循环。
在最后,我们做一些新的东西。在#1处,使用pygame.image.load()从文件中载入图像。我们为图像创建一个变量并且加载喵iley.jpga,在程序中用pic使用它。

创建游戏循环
此时,我们还没有绘制内容,但我们已经设置好了pygame并且加载了图像。游戏循环才是真正将图像显示在屏幕的地方。这也是处理来自用户的交互的地方。让我们从处理一个重要的事件开始,即用户选择退出游戏。
while keep:
for event in pygame.event.get():
if event.type == pygame.QUIT: #1
keep = False
只要keep等于True,那么游戏循环将会持续执行。在循环中我们会立即处理来自用户的交互。
在这个简单的程序中,我们监听的唯一事件就是就是用户是否点击了红×键来退出程序。我们在#1处检查他。如果用户试图关闭窗口而触发了pygame.QUIT事件,我们就要告诉游戏退出,通过将keep设为False来做到这一点。
我们任然要将图片绘制到屏幕上并且更新窗口。因此需要给游戏循环添加最后两行代码。
screen.blit(pic,(100,100))
pygame.display.update()
blit()方法将pic,也就系吧笑脸图像绘制到显示界面。当我们想要将像素从一个界面(例如,从硬盘加载的图像)复制到另一个界面之上时,就使用blit()。
这里我们使用blit(),是因为pygame.image.load()函数与前面绘制点用的pygame.draw.circle()函数的工作方式不同。所有的pygame.draw()的函数都接受一个界面做为参数。但是pygame.image.load()函数不接受一个界面做为参数,相反,它自动会图像创建一个新的,单独的界面,除非使用blit(),否则,图像不会出现在最初的界面上。

在这个例子中,我们告诉blit()函数想要将pic绘制的位置(100,100),也就是屏幕左上角向右100像素再向下100像素的位置。
到目前为止,我们已经完成了设置代码并且有了一个游戏循环。接下来,我们将负责程序的终止。
退出程序
一旦用户选择停止程序循环,代码的最后一个部分就会退出程序。
pygame.quit()
如果程序最后漏掉了这一行,那么即使在用户尝试关闭显示窗口时,窗口还是会保持打开。调用pygame.quit()会关闭显示窗口并且释放存储图像所占用的内存。
整合
将这些整合起来,下载笑脸图片并将其保存到与我们的py文件相同的文件夹里就OK了!

如下是完整代码
import pygame
pygame.init()
screen = pygame.display.set_mode([800,600])
keep = True
pic = pygame.image.load('喵iley(1).jpg')
while keep:
for event in pygame.event.get():
if event.type == pygame.QUIT:
keep = False
screen.blit(pic,(100,100))
pygame.display.update()
pygame.quit()
这段代码有很多基本的部分,在此之上进行构建可以然程序更加具有可交互性。在后面,我们会给游戏增加代码,以相应不同的交互事件。
下一节,我们来做一个程序来绘制一个会弹跳的笑脸!!!
