Pygame飞机大战(一)——创建游戏窗体并让飞机动起来
日期: 2019-12-05 分类: 个人收藏 375次阅读
pygame是我们用python进行游戏开发常用的一个库,可以很方便对媒体文件(图片、音频等)和事件(鼠标、键盘、关闭等)进行处理,基本可以满足我们对简单游戏开发设计的需求;
首先我们要安装pygame库:
pip install pygame
后面的讲解,只涉及需要用到的方法和属性进行讲解,未尽之处详见官网;
接下来我们来分析一下,一个游戏由哪几部分组成:
- 游戏的人物图片
- 分数、血量等数据显示
- 游戏的音频效果
- 后台数据的存储
前面两个的话,都是在窗体上面显示的;音频文件的播放,可以不用创建窗体,直接播放;后台数据的读写,这个涉及到数据库或者文件的读写(在数据量小的情况下,用csv进行存储也未尝不可)
好的,接下来,我们就来创建一个窗体,作为人机交互的一个界面:
import pygame # 我们要使用pygame模块,肯定需要先导入
from pygame.locals import * # 在locals中存放了我们常用的一些常量,比如下面的QUIT,
# 如果不导入的话,就需要这么写了:pygame.locals.QUIT
import sys # 系统相关库,包含程序运行环境的变量和相关控制方法
pygame.init() # 这一步非常重要,我们要使用pygame,就需要先把pygame初始化
screen_size = width,height = 480,700 # 窗体的尺寸
bg = (0,255,0) # 背景颜色,这个用到了(r,g,b)的设置方式
screen = pygame.display.set_mode(screen_size) # 设置窗体大小
pygame.display.set_caption('我是窗体') # 设置窗体标题
while True: # 死循环,让程序一直执行下去
for event in pygame.event.get(): # 获取事件
if event.type == QUIT: # 如果事件的类型是退出
pygame.quit() # 我们需要先将pygame退出
sys.exit() # 然后将系统关闭
screen.fill(bg) # 填充背景颜色
pygame.display.flip() # 刷新屏幕
现在窗体我们已经有了,接下来就应该把游戏的主角加载进来了,并且我们尝试让他动起来:
在开始写代码之前,我们先来思考一下,程序是如何将图片加载进来的,是如何让图片在窗体上移动的?
- 显示图像首先要说道一个分辨率的问题,当我们电脑分辨率越高的时候,发现在屏幕上显示的图标就越小,相反就越大;这是因为,我们本身的屏幕就这么大,分辨率越高,相当于分的份数就越多,每一行显示的像素点也就越多,那么显示的内容也就越多了;图片就是由一个一个像素点组成的,当我们把一张照片拉的很大的时候,发现会有锯齿产生,所以一张照片的像素越高,所包含的信息量就会越多,也就越清晰了。说回来,我们显示图片,其实就是将图片对应位置的像素点绘制到屏幕上面,当我们要修改图片的位置,其实就是修改像素点显示的位置。
- 那么是怎么实现图片的移动的呢?
首先肯定需要知道图片下一次出现的位置在哪里
其次将它绘制到窗体上
还有最后一步,我们要刷新窗体,这是我们必须完成的一步,不然你发现并没有效果
import pygame
from pygame.locals import *
import sys
pygame.init()
screen_size = width,height = 480,700
bg = (0,255,0)
speed = [1,1] # 这个列表就是飞机移动的方向和速度,即每次横坐标和纵坐标都+1
screen = pygame.display.set_mode(screen_size)
pygame.display.set_caption('飞机大战')
heroPlane = pygame.image.load('./images/me1.png') # 将飞机的图片加载进来
position = heroPlane.get_rect() # 返回rect对象,这里面包含了图片信息和移动图片等方法
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
position = position.move(speed) # 用move(x,y)方法移动图片,参数就是x轴和y轴的移动距离
if position.left < 0 or position.right > width: # left、right分别是图片最左边和最右边的坐标
speed[0] = -speed[0]
if position.top < 0 or position.bottom > height: # top、bottom分别是顶坐标和底坐标
speed[1] = -speed[1]
screen.fill(bg) # 填充背景颜色
screen.blit(heroPlane,position) # 用blit()方法将素材绘制到窗体上
pygame.display.flip() #刷新窗体
我们不能让飞机自己在窗体里面乱跑,得让用户去控制它,那么就需要通过检测按键事件,对角色进行控制了,接下来我们来讲一个什么是时间,也我们在游戏设计的时候,最常用到的两种事件:
- 简单的来讲,事件就是我们在游戏过程中需要处理的事情,比如按键按下了就要对按键按下这件事进行相应的操作,鼠标按下了又需要做什么,这是我们在游戏交互中必须处理的事情;
- 我们在游戏过程中最常使用到的就是鼠标和键盘了,当然有的游戏还支持用手柄操作,当然我们也能够实现,但是我们这里只是用鼠标和键盘,先来看一下鼠标和键盘事件产生分别会产生什么信息:
import pygame
from pygame.locals import *
import sys
pygame.init()
screen_size = width,height = 480,700
bg = (0,255,0)
speed = [0,0]
screen = pygame.display.set_mode(screen_size)
pygame.display.set_caption('飞机大战')
heroPlane = pygame.image.load('./images/me1.png')
position = heroPlane.get_rect()
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN: # 检测是否是按键按下的事件
if event.key == K_LEFT: # 判断是哪个按键按下了,这里对应方向键
speed = [-1,0] # 修改运动方向
elif event.key == K_RIGHT:
speed = [1,0]
elif event.key == K_UP:
speed = [0,-1]
elif event.key == K_DOWN:
speed = [0,1]
else:
speed = [0,0] # 如果没有按键按下就为0,不动
if position.left < 0: # 检测是否超出了边界
position.left = 0
elif position.right > width:
position.right = width
elif position.top < 0:
position.top = 0
elif position.bottom > height:
position.bottom = height
position = position.move(speed) # 移动角色图片
screen.fill(bg)
screen.blit(heroPlane,position)
pygame.display.flip()
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
上一篇: Python学习之路(一)环境搭建
下一篇: C++ 自增、自减运算符的重载和性能分析
精华推荐