武装飞船
1、规划项目
游戏《外星人入侵》的描述: 在游戏《外星人入侵》中,玩家控制着一艘最初出现在屏幕底部中央的飞船。玩家可以使用箭头键左右移动飞船,还可使用空格键进行射击。游戏开始时,一群外星 人出现在天空中,他们在屏幕中向下移动。玩家的任务是射杀这些外星人。玩家将所有外星人都消灭干净后,将出现一群新的外星人,他们移动的速度更快。只要有外星人撞到了玩家的飞船或到达了屏幕底部,玩家就损失一艘飞船。玩家损失三艘飞船后,游戏结束。
在第一个开发阶段,创建一艘可左右移动的飞船,这艘飞船在用户按空格键时能够开火。设置好这种行为后,就能够将注意力转向外星人,并提高这款游戏的可玩性。
2、安装Pygame
使用pip安装Python包:
在windows系统中检查是否安装了pip,打开终端,执行命令:
在windows系统安装pygame:
Pygame项目托管在代码分享网站Bitbucket中。要在Windows系统中安装Pygame,访问http://www.lfd.uci.edu/~gohlke/pythonlibs/#pygame ,查找与运行的Python版本匹配的Windows安装程序。我的python是3.6 64位的,所以下载下面版本。
将它复制到项目文件夹中。再打开一个命令窗口,切换到该文件所在的文件夹,并使用pip来运行它:
如果在pycharm不显示这个包,则在创建该项目的时候勾选下面选项:
或者在pycharm 中的project Interpreter中下载安装pygame。
3、开始游戏项目
创建Pygame窗口以及响应响应用户输入:
【1】创建一个空的Pygame窗口,使用Pygame编写的游戏的基本结构如下:
alien_invasion.py
import sys # 玩家退出时,使用模块sys退出游戏
import pygame
def run_game():
# 初始化游戏并创建一个频幕对象
pygame.init() # 初始化背景设置
screen = pygame.display.set_mode((1000,600) ) # 创建显示窗口,并指定了游戏窗口的尺寸px,注意使用了两个括号
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()
现在运行该程序,看到的是一个空的pygame窗口。
【2】设置背景颜色
#skip
def run_game():
#skip
pygame.display.set_caption("Alien Invasion")
# 设置背景颜色
bg_color = (65,65,65)
# 开始游戏的主循环
while True:
# 监视键盘和鼠标
#skip
#每次循环时都重新绘制屏幕
screen.fill(bg_color)
# 不断更新屏幕,让最近绘制的屏幕可见
pygame.display.flip()
run_game()
在Pygame中,颜色是以RGB值指定的。这种颜色由红色、绿色和蓝色值组成,其中每个值的可能取值范围都为0~255。颜色值(255, 0, 0)表示红色,(0, 255, 0)表示绿色,而(0, 0, 255)表示蓝色。
【3】创建设置类
下面来编写一个名为settings 的模块,其中包含一个名为Settings 的类,用于将所有设置存储在一个地方,以免在代码中到处添加设置。这样,就能传递一个设置对象,而不是众多不同的设置。
setting.py
class Setting():
# 存储该项目所有设置的类
def __init__(self):
# 初始化游戏的设置
# 屏幕设置
self.screen_width = 1000
self.screen_heighe = 600
self.bg_color = (65,65,65)
为创建Settings 实例并使用它来访问设置,将alien_invasion.py修改成下面这样:
import sys # 玩家退出时,使用模块sys退出游戏
import pygame
from setting import Setting
def run_game():
# 初始化Pygame、设置和屏幕对象
pygame.init() # 初始化背景设置
ai_settings = Setting()
screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_heighe)) # 创建显示窗口,并指定了游戏窗口的尺寸px,注意使用了两个括号
pygame.display.set_caption("Alien Invasion")
# 开始游戏的主循环
while True:
# skip
#每次循环时都重新绘制屏幕
screen.fill(ai_settings.bg_color)
# 不断更新屏幕,让最近绘制的屏幕可见
pygame.display.flip()
run_game()
添加飞船图像
在游戏中几乎可以使用任何类型的图像文件,但使用位图(.bmp)文件最为简单,因为Pygame默认加载位图。虽然可配置Pygame以使用其他文件类型,但有些文件类型要求你在 计算机上安装相应的图像库。大多数图像都为.jpg、.png或.gif格式,但可使用Photoshop、GIMP和Paint等工具将其转换为位图。
在该项目文件下新建images文件,并将ship.bmp图片保存在该文件下。
【1】创建Ship类:
选择用于表示飞船的图像后,需要将其显示到屏幕上。创建一个名为ship 的模块,其中包含Ship 类,它负责管理飞船的大部分行为。
ship.py
import pygame
class Ship():
def __init__(self,screen):
# 初始化飞船并设置其初始位置
self.screen = screen
# 加载飞船图像并获取其外接矩形
self.image = pygame.image.load('images/ship.bmp')
self.rect = self.image.get_rect()
self.screen_rect = screen.get_rect()
# 将每艘新飞船放在屏幕底部中央
self.rect.centerx = self.screen_rect.centerx
self.rect.bottom = self.screen_rect.bottom
def blitme(self):
# 在指定位置绘制飞船