
Python与Pygame程序标准框架:
import pygame, sysfrom pygame.locals import *
pygame.init()
SCREEN = pygame.display.set_mode((*1*, *2*))
pygame.display.set_caption("*3*")
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
在*1*处输入你的窗口的宽度,
在*2*处输入你的窗口的高度,
在*3*处输入你的窗口的顶部显示的标题。
如果运行时你看到一个黑色的窗口,顶部写着你在*3*处写的文字,那么——恭喜你!你的Pygame安装成功了!
12.3.1 创建Pygame窗口以及响应用户输入《Python编程: 从入门到实践》第12章武装飞船,开始学习管理包含多个文件的项目。我们将重构很多代码,以提高代码的效率,并管理文件的内容,以确保项目组织有序。本节介绍创建Pygame窗口以及响应用户输入。
12.3 开始游戏项目
现在来开始开发游戏《外星人入侵》。首先创建一个空的Pygame窗口,供后面用来绘制游戏元素,如飞船和外星人。我们还将让这个游戏响应用户输入、设置背景色以及加载飞船图像。
12.3.1 创建Pygame窗口以及响应用户输入
首先,我们创建一个空的Pygame窗口。使用Pygame编写的游戏的基本结构如下:
alien_invasion.py
import sys
import pygame
def run_game():
# 初始化游戏并创建一个屏幕对象
pygame.init()
screen = pygame.display.set_mode((1200, 800))
pygame.display.set_caption("Alien Invasion")
# 开始游戏的主循环
while True:
# 监视键盘和鼠标事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
# 让最近绘制的屏幕可见
pygame.display.flip()
run_game()
首先,我们导入了模块sys和pygame。模块pygame包含开发游戏所需的功能。玩家退出时,我们将使用模块sys来退出游戏。
游戏《外星人入侵》的开头是函数run_game()。u处的代码行pygame.init()初始化背景设置,让Pygame能够正确地工作。在v处,我们调用pygame.display.set_mode()来创建一个名为screen的显示窗口,这个游戏的所有图形元素都将在其中绘制。实参(1200, 800)是一个元组,指定了游戏窗口的尺寸。通过将这些尺寸值传递给pygame.display.set_mode(),我们创建了一个宽1200像素、高800像素的游戏窗口(你可以根据自己的显示器尺寸调整这些值)。
对象screen是一个surface。在Pygame中,surface是屏幕的一部分,用于显示游戏元素。在这个游戏中,每个元素(如外星人或飞船)都是一个surface。display.set_mode()返回的surface表示整个游戏窗口。我们激活游戏的动画循环后,每经过一次循环都将自动重绘这个surface。
这个游戏由一个while循环(见w)控制,其中包含一个事件循环以及管理屏幕更新的代码。事件是用户玩游戏时执行的 *** 作,如按键或移动鼠标。为让程序响应事件,我们编写一个事件循环,以侦听事件,并根据发生的事件执行相应的任务。x处的for循环就是一个事件循环。
为访问Pygame检测到的事件,我们使用方法pygame.event.get()。所有键盘和鼠标事件都将促使for循环运行。在这个循环中,我们将编写一系列的if语句来检测并响应特定的事件。例如,玩家单击游戏窗口的关闭按钮时,将检测到pygame.QUIT事件,而我们调用sys.exit()来退出游戏(见y)。
z处调用了pygame.display.flip(),命令Pygame让最近绘制的屏幕可见。在这里,它在每次执行while循环时都绘制一个空屏幕,并擦去旧屏幕,使得只有新屏幕可见。在我们移动游戏元素时,pygame.display.flip()将不断更新屏幕,以显示元素的新位置,并在原来的位置隐藏元素,从而营造平滑移动的效果。
在这个基本的游戏结构中,最后一行调用run_game(),这将初始化游戏并开始主循环。
如果此时运行这些代码,你将看到一个空的Pygame窗口。
event英文翻译是事件 get 获取 type是样式,类型的意思,所以他这个都是有规律的,但是有顺序事件在前,后面跟属性
同时也有父子(层级)关系
event.get() 获取到的事件
event.type() 事件类型
event.key() 按键事件
一般都是写在while里面,因为这是个不断循环的过程,不然,只执行一便达不到实际要求,这是Pygame里面设定好的
这是贪吃蛇游戏的一段代码(一部分):
txt = font.render('GAME OVER', True, (255, 0, 0))screen.blit(txt, (size[0]/6, size[1]*2/5-20)) # (0, 0) (size[0]/6, size[1]*2/5)100号字中心位置
direction = 'right' # 初始方向,向右
changeDirection = direction # 定义一个改变方向的变量,按键
running = True
while Trunning:
for event in pygame.event.get(): # 从队列中获取事件
if event.type == QUIT: # 判断事件类型是否为退出事件
# pygame.quit()
sys.exit()
elif event.type == KEYDOWN: # 如果按键被按下(事件)
if event.key == K_RIGHT or event.key == K_d: # 如果是右键头或者是d,蛇向右移动
changeDirection = 'right'
if event.key == K_LEFT or event.key == K_a: # 如果是左键头或者是a,蛇向左移动
changeDirection = 'left'
if event.key == K_UP or event.key == K_w:
changeDirection = 'up'
if event.key == K_DOWN or event.key == K_s:
changeDirection = 'down'
#这下面一行可以忽略,
if event.key == K_ESCAPE: # 对应键盘上的Esc键,表示退出
pygame.event.post(pygame.event.Event(QUIT))
# 绘制文本,刷新显示
screen.blit(txt, (20, 10))
screen.fill(blackColor) #放在for语句一列,属于while的(子)层级,循环不断的刷新
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)