Python项目实践之一:武装飞船

Python项目实践之一:武装飞船

一、规划项目

1、游戏规则设定

在游戏《外星人入侵》中,玩家控制着一艘最初出现在屏幕底部中央的飞船。玩家可以使用箭头键左右移动飞船,还可使用空格键进行射击。游戏开始时,一群外星人出现在天空中,他们在屏幕中向下移动。玩家的任务是射杀这些外星人。玩家将所有外星人都消灭干净后,将出现一群新的外星人,他们移动的速度更快。只要有外星人撞到了玩家的飞船或到达了屏幕底部,玩家就损失一艘飞船。玩家损失三艘飞船后,游戏结束。

2、前期准备
1、建立项目文件

游戏《外星人入侵》将包含很多不同的文件,因此请在你的系统中新建一个文件夹,并将其命名为alien_invasion。请务必将这个项目的所有文件都存储到这个文件夹中,这样相关的 import 语句才能正确地工作。

2、安装pip

1、安装pip
安装pip,请访问https://bootstrap.pypa.io/get-pip.py。如果出现对话框,请选择保存文件;如果get-pip.py的代码出现在浏览器中,请将这些代码复制并粘贴到文本编辑器中,再将文件保存为get-pip.py。将get-pip.py保存到计算机中后,你需要以管理员身份运行它,因为pip将在你的系统中安装新包。

2、确认是否安装了pip
在dos窗口输入:pip --version
在这里插入图片描述

3、安装Pygame

1、前往python官网https://www.python.org/,点击PypI
在这里插入图片描述
2、在搜索框搜索pygame
在这里插入图片描述
3、选择要下载的pygame版本
在这里插入图片描述
4、点击下载文件
在这里插入图片描述
5、下载自己电脑对应的版本
在这里插入图片描述
6、把下载好的文件放入python的pip目录下
在这里插入图片描述
7、在dos窗口输入对文件对应的指令在这里插入图片描述
8、提示安装成功在这里插入图片描述

3、开始项目
1、创建 Pygame 窗口以及响应用户输入
import sys
import pygame

def run_game():
    #初始化游戏并创建一个窗口对象
    pygame.init()
    #设置窗口大小为1200*800像素
    screen = pygame.display.set_mode((1200, 700))
    #设置窗口名字
    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()

解释:
1、导入 sys 和 pygame模块, pygame 模块包含开发游戏所需的功能, 通过sys 模块实现退出游戏功能。
2、创建一个run_game()函数,用来提供游戏所需要的窗口界面并对玩家键盘鼠标进行监听。
3、screen是属于屏幕的一个面对象,用于显示游戏元素(飞船、外星人),游戏元素也是一个面对象,我们通过while True的死循环,实现对游戏元素在不同时间和状态在游戏界面里的显示。

2、设置背景颜色
import sys
import pygame

def run_game():
    #初始化游戏并创建一个窗口对象
    pygame.init()
    #设置窗口大小为1200*800像素
    screen = pygame.display.set_mode((1200, 700))
    #设置窗口名字
    pygame.display.set_caption("Alien Invasion")

    #设置背景颜色
    bg_color = (230, 230, 230)

    #开始游戏主循环
    while True:
        #监听键盘和鼠标事件
        for event in pygame.event.get():
            #设置退出窗口
            if event.type == pygame.QUIT:
                sys.exit()

        #绘制窗口颜色
        screen.fill(bg_color)
        #绘制窗口
        pygame.display.flip()

run_game()

解释:
1、创建一个背景颜色存于 bg_color 中,在Pygame中,颜色是以RGB值指定的。这种颜色由红色、绿色和蓝色值组成,其中每个值的可能取值范围都为0~255。颜色值(255, 0, 0)表示红色,(0, 255, 0)表示绿色,而(0, 0, 255)表示蓝色。通过组合不同的RGB值,可创建1600万种颜色。在颜色值(230, 230, 230)中,红色、蓝色和绿色量相同,它将背景设置为一种浅灰色。
2、调用方法 screen.fill() ,用背景色填充屏幕。

3、创建设置类

每次给游戏添加新功能时,通常也将引入一些新设置。下面来编写一个名为 settings 的模块,其中包含一个名为 Settings 的类,用于将所有设置存储在一个地方,以免在代码中到处添加设置。这样,我们就能传递一个设置对象,而不是众多不同的设置。另外,这让函数调用更简单,且在项目增大时修改游戏的外观更容易:要修改游戏,只需修改settings.py中的一些值,而无需查找散布在文件中的不同设置。

settings.py:

class Settings():
    """存储《外星人入侵》的所有设置的类"""
    def __init__(self):
        """初始化游戏的设置"""
        # 屏幕设置
        self.screen_width = 1200
        self.screen_height = 600
        self.bg_color = (230, 230, 230)

alien_invasion.py:

import sys
import pygame
from settings import Settings

def run_game():
    #初始化游戏并创建一个窗口对象
    pygame.init()
    #初始化设置对象
    ai_settings = Settings()
    #设置窗口大小为1200*800像素
    screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height))
    #设置窗口名字
    pygame.display.set_caption("Alien Invasion")

    #设置背景颜色
    bg_color = (230, 230, 230)

    #开始游戏主循环
    while True:
        #监听键盘和鼠标事件
        for event in pygame.event.get():
            #设置退出窗口
            if event.type == pygame.QUIT:
                sys.exit()

        #绘制窗口颜色
        screen.fill(ai_settings.bg_color)
        #绘制窗口
        pygame.display.flip()

run_game()

解释:在主程序文件中,我们导入 Settings 类,调用 pygame.init() ,再创建一个 Settings 实例,并
将其存储在变量 ai_settings 中。创建屏幕时,使用了 ai_settings 的属性screen_width 和 screen_height ;接下来填充屏幕时,也使用了 ai_settings 来访问背景色。

4、添加飞船图像
4.1、寻找一张飞船图像,使得图像背景处理为透明色,我找到的飞船图像如下:

在这里插入图片描述

4.2、创建Ship类

ship.py:

class Ship():
    def __init__(self, screen):
        """初始化飞船并设置其初始位置"""
        self.screen = screen

        #加载飞船,并获取其外形矩阵
        self.imge = pygame.image.load(r'images/ship.png')
        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):
        """在指定位置绘制飞船"""
        self.screen.blit(self.image, self.rect)

解释:
1、 pygame.image.load(path)方法:打开需要加载的图像,返回值是一个面对象

2、 get_rect()方法: 获取相应面对象的属性(Pygame的效率之所以如此高,一个原因是它让你能够像处理矩形( rect 对象)一样处理游戏元素,即便它们的形状并非矩形。像处理矩形一样处理游戏元素之所以高效,是因为矩形是简单的几何形状。这种做法的效果通常很好,游戏玩家几乎注意不到我们处理的不是游戏元素的实际形状。)

3、 通过处理rect 对象相对于screen_rect对象的位置来规定飞船的初始化位置位于底部中间,即:让rect 对象的centerx与screen_rect对象的centerx相等,

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值