经典飞机大战游戏以及经典飞机大战电脑版

2024-04-08 19:03:19
手机app游戏网 > 游戏攻略 > 经典飞机大战游戏以及经典飞机大战电脑版

pygame是一个第三方包,包含了一组用于开发游戏的python模块,使用之前需要先安装pygame这个包,安装分为两种情况:

在全局环境中安装pygame

windows系统中按Win+R键再输入cmd进入命令行模式,输入命令行:

pip install pygame

如果使用的python版本在3.11之前,按照上面的方式就可以完成安装。但是我使用的是python最新版3.11,采用上面的默认安装会失败,需要强行指定安装的版本号,命令行如下:

pip install pygame==2.1.3.dev8

在pycharm虚拟环境中安装

在pycharm中依次点击File--settings...--你的项目名称--Python Interpreter,右侧窗口中会显示你的项目的虚拟环境中安装的所有包,点页面中的“+”,在弹出窗口左上角搜索框输入pygame,默认安装版本是2.1.2,选中右下角Specify version选项,默认指定2.1.3.dev8,最后点Install即可成功安装。

pycharm中安装pygame界面


一、pygame的常见方法

1、init方法

用来对pygame的所有元素进行初始化,使用pygame创建游戏窗口必须首先调用init方法。

格式:pygame.init()

2、quit

用来退出pygame图形模式,一般跟init配套使用,在程序结束之前必须调用quit方法。

格式:pygame.quit()

3、Rect类

用来创建矩形区域对象,该对象拥有位置坐标、宽高尺寸等属性,可以方便地控制其里面图像的显示位置和大小等因素。

格式:pygame.Rect(left,top,width,height)

pygame.Rect((left,top),(width,height))

本着由浅入深的原则,也是为了便于理解吸收,在这里只介绍这几个必须用到的方法。


二、pygame的模块介绍

pygame模块概览:

模 块

作 用

cdrom

管理cdrom设备和音频播放

cursors

加载光标形状

display

管理显示窗口

draw

绘制图形(点、线、形状)

event

管理鼠标和键盘等产生的事件

font

加载字体

image

加载和保存图像

joystick

管理游戏手柄装置

key

管理键盘行为

mouse

管理鼠标行为

movie

mpeg电影播放

sndarray

数字处理声音

surfarray

数字处理声音

time

控制时间

transform

变换图像(缩放、旋转和翻转)

这里介绍几个常用模块的用法,如下:

1、display模块

该模块的作用是管理显示窗口,用来创建窗口、设置窗口标题、更新窗口显示内容和图像绘制等,是pygame里最重要的模块。

创建窗口

格式:screen = pygame.display.set_mode(size=(width,height),flags=0,depth=0)

size代表创建窗口的尺寸(宽和高),元组类型;flags是标志位,depth是颜色位深,目前用不到,暂不介绍。

★ 创建的窗口有一个重要方法,就是绘制图像blit方法,简单格式如下:

格式:screen.blit(图片对象,(left,top))

设置窗口标题

格式:
pygame.display.set_caption(title)

更新窗口

格式:pygame.display.update()——主要用于非双缓冲,可进行局部区域的更新

pygame.display.flip()——主要用于双缓冲,也可在非双缓冲下正常工作

注意:完成创建窗口、设置相关属性和图像绘制等所有操作后,必须调用更新窗口方法,否则窗口上不会显示预定操作的内容,通常使用update方法来更新窗口内容。为了减少内存占用和节省代码,通常先把所有窗口及图像操作的代码写完后,在最后写一行更新窗口语句。

2、image模块

image模块用来加载和保存图片,主要是将需要用到的图片加载到内存中以备后面使用。

格式:image对象 = pygame.image.load(图片地址)

3、time模块

time模块里有一个重要的类就是Clock时钟类,用来创建一个时钟对象,时钟对象用来调整窗口画面显示的帧率,即刷新率。

格式:clock = pygame.time.Clock()

★ 通常游戏的帧率可以设置为60,即每秒刷新60次,让游戏画面看起来更加顺畅

格式:clock.tick(60)

4、event模块

event模块用来监听鼠标和键盘操作,这是游戏里人机交互的重要手段。

格式:pygame.event.get()

上面语句是用来得到所有监听来的事件,结果是一个列表,可以通过遍历事件列表来完成相关操作。


三、飞机大战游戏编写实战

上面已经简要介绍了pygame的基本情况,现在开始使用pygame的模块和方法构建游戏框架,并逐步增添内容和功能,看看最后能够实现怎样的效果。

1、创建窗口及主要元素

import pygame # 初始化pygame图形模式 pygame.init() # 使用display模块创建游戏窗口,窗口尺寸为470*758 screen = pygame.display.set_mode((470, 758)) # 设置窗口标题 pygame.display.set_caption('飞机大战V1.0') # 使用image模块的load方法加载背景图片到内层中 bg = pygame.image.load(r'images\background.jpg') # 加载飞机图片到内层中 plane = pygame.image.load(r'images\plane.png') # 在游戏窗口坐标为(0,0)即左上角处开始绘制背景图片 screen.blit(bg, (0, 0)) # 在游戏窗口坐标为(177,600)处绘制飞机图片 screen.blit(plane, (177, 600)) # 使用display模块的update方法更新图形窗口 pygame.display.update() # 设置无限循环,否则程序顺序执行完毕,窗口画面一闪而过 while True: pass # 退出pygame图形模式 pygame.quit()

以上代码都是介绍过的pygame的基本方法和模块,为了便于观看,这里暂时使用了无限循环语句,避免程序瞬间执行完毕。

另外要事先准备好所需要的图片素材,例如背景图片、己方飞机图片和敌方飞机图片等等。除了背景图片之外,其余所有图片基本上都要求是png格式的背景透明图片,需要自己制作,素材图片放置在项目目录下的images文件夹中。

这段代码构建了飞机大战游戏界面的雏形,如果不添加绘制背景图片和飞机图片的那几行代码,创建的将是一个470*758的黑屏窗口,这也是使用pygame模块创建图形界面的基本流程。下面看一下运行效果:

2、让飞机动起来

为了更方便地控制飞机图片的显示位置,下面使用pygame的Rect类创建一个矩形区域对象,让飞机图片绘制在这个矩形区域内,然后通过不断更改矩形区域对象坐标的办法,让飞机图片形成移动的动画效果。同时,为了让这种动画效果看起来更顺畅,我们采用pygame.time模块里的Clock类创建一个时钟,用来控制动画帧率。代码如下:

import pygame # 初始化pygame图形模式 pygame.init() # ★★★注意这里创建了时钟对象★★★ # 创建一个时钟对象,用来控制游戏屏幕刷新率,也就是帧率 clock = pygame.time.Clock() # 使用display模块创建游戏窗口,窗口尺寸为470*758 screen = pygame.display.set_mode((470, 758)) # 设置窗口标题 pygame.display.set_caption('飞机大战V1.0') # 使用image模块的load方法加载背景图片到内层中 bg = pygame.image.load(r'images\background.jpg') # 加载飞机图片到内层中 plane = pygame.image.load(r'images\plane.png') # 在游戏窗口坐标为(0,0)即左上角处开始绘制背景图片 screen.blit(bg, (0, 0)) # ★★★这里创建了矩形区域对象★★★ # 创建矩形区域对象,用来显示己方飞机图片 plane_rect = pygame.Rect(177, 600, 112, 111) # 设置移动步长 step = 2 while True: # ★★★这里设置了时钟频率,即动画帧率★★★ # 设置时钟帧率为60,即每秒钟执行60次 clock.tick(60) # 重新绘制背景图片,目的是覆盖一下游戏屏幕,将图片移动位置后的原有影像清除 screen.blit(bg, (0, 0)) # 让矩形区域的横坐标减去步长,循环改变位置 plane_rect.x -= step # 如果飞机移动到了最左边或者最右边,给步长取反,从而改变飞机移动方向 if plane_rect.x <= 0 or plane_rect.x >= (470-112): step = -step # 将飞机图片绘制到矩形区域中 screen.blit(plane, plane_rect) # 所有图片元素都更改完毕后,更新显示窗口 pygame.display.update() # 退出pygame图形模式 pygame.quit()

重点:这段代码的重点是在循环开始之后,重新绘制背景图片,目的是将飞机图片覆盖掉,接着飞机在新位置又重新显示,循环往复,飞机就动起来了!如果没有重绘背景这一步,那么在飞机运动的横坐标上会产生无数个飞机图像。以上代码运行效果如下:

重播

播放

00:00 / 00:00 直播

00:00

进入全屏

50

    点击按住可拖动视频

    3、增加关闭窗口功能

    以上代码运行时是一个死循环,因为没有关闭程序的操作,下面使用pygame的event模块来获取程序运行过程中产生的所有事件,然后遍历事件列表,通过判断鼠标点击关闭按钮事件来关闭窗口,结束程序运行。添加的事件检测部分代码如下:

    # 获取全部事件,并遍历判断,如果是点击退出按钮事件,则执行退出操作 for event in pygame.event.get(): if event.type == pygame.QUIT: print('退出游戏...') # 退出pygame图形模式 pygame.quit() # 这里使用exit直接退出程序,而不使用break中断循环 # 可能因为有时钟的关系,使用break中断循环后,还会再执行一次绘图操作, # 但上面已经退出了pygame图形模式,所以会有一个报错 exit()

    以上代码中,使用pygame.event.get()这个语句获取事件列表,然后使用for循环进行遍历,如果有pygame.QUIT这个事件,则退出程序。到这里,终于摆脱了死循环,现在是一个顺畅的动画,还不能控制飞机产生相应动作,需要进一步添加键盘监听事件及相应代码来完成控制飞机的功能。

    未完,待续!在第二篇里继续完善!

    摘要:本文以华为云软件开发平台DevCloud为例,展示飞机大战游戏开发的DevOps实践流程。

    DevOps实践

    DevOps实践是一种开发、测试运维一体化的模式,其实践的外在表现一般包括了如代码仓库、构建、测试、发布、配置、监控等工具形成的一个完整的工具链或者说开发平台,以华为云软件开发平台DevCloud为例,展示飞机大战游戏开发的DevOps实践流程。

    实践手册下载>>>

    提交实践结果赢奖品>>>

    实验介绍

    项目名称:飞机大战游戏

    项目简介:一个用 Cocos Creator 开发的 Web 游戏,可以进行飞机大战。

    开发语言:JavaScript(49.3%)、CSS(36.6%)、Html(14%)

    部署环境:CentOS 7.6 64bit for Kai1s +jdk1.8

    涉及云服务:华为云 DevCloud、华为云弹性云服务器 ECS

    操作流程操作步骤创建私有云

    步骤1:在华为云服务列表找到“服务列表”,进入华为云“虚拟私有云VPC”,创建虚拟私有云,配置虚拟私有云名称和子网名称,其他默认配置,点击立即创建;

    步骤2:创建安全组并添加规则

    创建安全组

    名称:sg-plane

    企业:default

    模板:通用Web服务器

    描述:无

    添加规则:添加入向规则

    优先级:1协议端口:TCP输入:8080

    创建项目

    在华为云官网产品列表中,前往“软件开发平台DevCloud”的管理控制台,新建项目;

    项目流程:看板

    项目名称:自定义

    创建代码仓库

    进入代码->代码托管,导入外部仓库:

    源仓库地址:https://codehub.devcloud.cn-north4.huaweicloud.com/yxdmmsymbgl00001/planeGame.git

    源仓库访问权限:不需要用户名/密码

    勾选“我已阅读并同意 《隐私政策声明》 和 《软件开发服务使用声明》”

    点击“下一步”按钮

    自定义代码仓库名称

    其他默认值,最后确认

    新建编译构建任务

    在“构建&制品”中选择“编译构建”后,新建任务:

    步骤1:选择Shell模板,在命令行中输入zip -qr WebGames.zip ./

    步骤2:在Shell下方增加“上传软件包到软件发布库”

    构建包路径:WebGames.zip发布版本号:1.0.0包名:WebGames

    步骤3:新建并执行

    新建部署任务

    步骤1:进入“控制台”选择“服务列表”购买弹性云服务器ECS,并进行配置;

    计费模式:按需收费

    区域:华北-北京四

    可用区:随机分配

    CPU 架构:鲲鹏计算

    规格:kai1s.xlarge.1(4 核 4G)

    镜像:CentOS 7.6 64bit for Kai1s(40GB)

    网络:选择本实验创建的虚拟私有云

    安全组:选择本实验创建的安全组

    云服务器名称:自定义(如:ecs-plane-kunpeng)

    密码:自定义

    步骤2:进入华为云DevCloud控制台,选择“部署”->“主机管理”;

    添加主机组,输入主机名,选择linux操作系统,点击保存;

    添加主机;

    输入自定义主机名称,如planewar

    IP(云服务弹性公网IP)

    认证方式:密码

    用户名:root

    密码:自己云服务器ECS的密码

    ssh端口:22

    勾选我已阅读…,点击添加

    添加成功后,显示验证成功。

    步骤3:重新进入部署服务,新建任务,选择Tomcat应用部署模板

    点击“选择部署来源”下方的加号,添加“解压文件”,配置:

    压缩文件路径:${download_path}/WebGames.zip,解压目录:${download_path}/WebGames;

    “参数设置”页中,将以下参数进行修改,其余参数保持默认不变

    ${host_group}:ecs_group_planewar(即本实验中创建的主机组)

    ${package_url}:/WebGames/1.0.0/WebGames.zip

    Service_port:8080

    步骤4:访问应用

    释放云资源

    本实验需要释放的资源有:弹性云服务器ECS、虚拟私有云和安全组。

    步骤1:前往“弹性云服务器ECS”管理控制台,释放资源;

    步骤2:前往“虚拟私有云 VPC”管理控制台,先删除所有子网,再删除虚拟私有云;

    步骤3:进入“访问控制”中的安全组,删除需要删除的安全组。

作者:piikee | 分类:游戏攻略 | 浏览:6 | 评论:0