【Python游戏开发】百行Python代码开发出飞机大战小游戏,原来Python可以这么强大

article/2025/4/21 11:37:55

百行Python代码开发出游戏,原来Python可以这么强大!

大家好,今天给大家介绍一个小项目,只用一百行代码就可以开发出的游戏。

安装pygame

下载对应python版本的pygame 运行以下命令

创建Pygame窗口及响应用户输入

新建一个文件夹alien_invasion,并在文件夹中新建alien_invasion.py文件,输入如下代码。

运行上述代码,我们可以得到一个灰色界面的窗口:

创建设置类

为了在写游戏的过程中能便捷地创建一些新功能,下面额外编写一个settings模块,其中包含一个Settings类,用于将所有设置存储在一个地方。这样在以后项目增大时修改游戏的外观就更加容易。

我们首先将alien_invasion.py中的显示屏大小及显示屏颜色进行修改。

首先在alien_invasion文件夹下新建python文件settings.py,并向其中添加如下代码

然后在alien_invasion.py中导入Settings类,并使用相关设置,修改如下:

添加飞船图像

接下来,我们需要将飞船加入游戏中。为了在屏幕上绘制玩家的飞船,我们将加载一幅图像,再使用Pygame()方法blit()绘制它。

在游戏中几乎可以使用各种类型的图像文件,但是使用位图(.bmp)文件最为简单,这是因为Pygame默认加载位图。

虽然其他类型的图像也能加载,但是需要安装额外的库。

我们推荐去免费的图片素材网站上去找图像:pixabay.com/

我们在主项目文件夹(alien_invasion)中新建一个文件夹叫images,将如下bmp图片放入其中。

接下来,我们创建飞船类ship.py:

重构:模块game_functions

在大型项目中,经常需要在添加新代码前重构既有代码。重构的目的是为了简化代码的结构,使其更加容易扩展。

我们将实现一个game_functions模块,它将存储大量让游戏Alien invasion运行的函数。通过创建模块game_functions,可避免alien_invasion.py太长,使其逻辑更容易理解。

函数check_events()

首先我们将管理事件的代码移到一个名为check_events()的函数中,目的是为了隔离事件循环

然后我们修改alien_invasion.py代码,导入game_functions模块,并将事件循环替换成对函数check_events()的调用:

函数update_screen()

将更新屏幕的代码移到一个名为update_screen()函数中,并将这个函数放在模块game_functions中:

其中alien_invasion修改如下:

从上面一套流程走下来,我们发现:在实际的开发过程中,我们一开始将代码编写得尽可能的简单,并在项目越来越复杂时进行重构。接下来我们开始处理游戏的动态方面。

驾驶飞船

这里我们要实现的就是使玩家通过左右箭头键来控制飞船的左移与右移。

响应按键

因为在pygame中,每次按键都被注册为KEYDOWN事件,在check_events()中,我们通过event.type检测到KEYDOWN事件后还需进一步判断是哪个按键。代码如下:

允许不断移动

玩家按住右箭头不动时,我们希望飞船能不断地移动,直到玩家松开为止。这里我们通过KETUO事件来判断。因此我们设置一个标志位moving_right来实现持续移动。原理如下:

飞船不动时,标志moving_right将为false。玩家按下右箭头时,我们将这个标志设置为True;玩家松开时,我们将标志重新设置成False。

这个移动属性是飞船属性的一种,我们用ship类来控制,因此我们给这个类增加一个属性名称叫,moving_right以及一个update()方法来检测标志moving_right的状态。

ship

game_functions

最后在alien_invasion中调用update()方法

左右移动

前面我们实现了向右移动,接下来实现向左移动,逻辑类似,代码就不贴了。

调整飞船的速度

当前,每次执行while循环时,飞船最多移动一个像素,我们可以在Settings中添加ship_speed_factor,用于控制飞船的速度。我们将根据这个属性决定飞船每次循环时最多移动多少距离。

Settings:

Ship:

限制飞船的活动范围

如果玩家按住箭头的时间过长,飞船就会消失,那么如何使飞船抵达屏幕边缘时停止移动?这里我们只需要修改Ship类中的update方法,增加一个逻辑判断。

重构

这里我们主要讲check_events()函数进行重构,将其中部分代码分成两部分,一部分处理KEYDOWN事件,一部分处理KEYUP事件。

game_functions:

射击

接下来添加射击功能,使玩家按空格键时发射子弹,子弹将在屏幕中向上穿行,抵达屏幕后消失。

添加子弹设置

在Settings类中增加一些子弹的属性,这里我们创建一个宽3像素,高15像素的深灰色子弹。子弹的速度比飞船稍低。

创建Bullet类

将子弹存储到group中

前面定义了Bullet类和必要的设置后,就可以编写代码了,在玩家每次按空格键时都会发射一发子弹。

首先,我们在alien_invasion中创建一个group,用于存储所有的有效子弹。

开火

这里我们修改check_keydown_events()函数,来监听玩家按下空格键的事件。这里还需要修改update_screen()函数,确保屏幕每次更新时,都能重绘每一个子弹。

我们来看下效果:

删除消失的子弹

在alien_invasion中删除消失的子弹。

限制子弹数量

为了鼓励玩家有目标的射击,我们规定屏幕上只能同时存在3颗子弹,我们只需要在每次创建子弹前检查未消失的子弹数目是否小于3即可。

创建update_bullets()函数

为了使alien_invasion中代码更加简单,我们将检查子弹管理的代码,移到game_functions模块中:

创建fire_bullet()函数

这里我们将发射子弹的代码移到一个独立的函数中:

添加外星人,并检测碰撞

在我们完成新的任务之前,我们先给游戏添加一个结束游戏的快捷键Q:

创建第一个外星人

这里和创建飞船的方法一样

创建一群外星人

这里我们首先确定一行能容纳多少个外星人以及要绘制几行。这里改动代码较多,直接看效果:

移动外星人

前面我们创建的是静态的外星人,现在我们需要让外星人动起来。这里我们在Settings类中设置外星人移动的速度,然后通过Alien类中的update的方法来实现移动

射杀外星人

要想射杀外星人,就必须先检测两个编组成员之间是否发生碰撞,在游戏中,碰撞就是游戏元素重叠在一起。

这里我们使用sprite.groupcollide()来检测两个编组的成员之间的碰撞。

子弹击中外星人时,需要立马知道,并同时使被碰撞的外星人立即消失,因此我们需要在更新子弹的位置后立即检测碰撞。

结束游戏

这里我们还需要知道何时该结束游戏,有以下几种情况:

飞船全部被摧毁

外星人到达屏幕底部

实际效果:

计分

最后我们将给游戏添加一个Play按钮,用于根据需要启动游戏以及在游戏结束后重启游戏。

我们还将实现一个计分系统,能够在玩家等级提高时加快节奏。

添加Play按钮

这里可以先将游戏初始化为非活动状态,当我们点击了按钮,就开始游戏。

由于Pygame中没有内置的创建按钮的方法。因此我们可以通过创建一个Button类来创建一个自带标签的实心矩形。

我们通过检测鼠标发生点击后的坐标是否与我们绘制的按钮发生碰撞与否来判断是否发生了点击事件。

提高等级

为了使玩家将敌人消灭干净后能够提高游戏难度,增加趣味性,这里我们可以在Settings类中进行修改,增加静态初始值,和动态初始值。

记分、等级、剩余飞船

打包成exe可执行文件

这样上面游戏开发完了!!

动手能力强的的小伙伴可以试着自己做一下哦,可以私信我“游戏”获取完整源码噢


http://chatgpt.dhexx.cn/article/tvEpr7x8.shtml

相关文章

终极PK | Python相较于Java的优势在哪里?

首先为避免引战,我要强调,“无论是Python还是Java都是目前主流的编程语言,没有好坏之分,有的只是应用场景不同,Python和Java都是世界上最好的语言!” 接下来我们从语言本身、应用场景以及流行趋势等多个方…

【编程项目开源】仿微信飞机大战(Python版)

背景 前面已输出多个系列: 《十余种编程语言做个计算器》 《十余种编程语言写2048小游戏》 《17种编程语言10种排序算法》 《十余种编程语言写博客系统》 《十余种编程语言写云笔记》 《N种编程语言做个记事本》 《N种编程语言做个应用市场(appstore)》 《N种编程语…

Java太难,我选python?一个工具,带你开启新世界大门

前不久,4月份十大编程语言排行榜新鲜出炉。据TIOBE公布的数据来看,较上个月,TOP5基本没什么变化。Java稳居第一,随后是C、python、C、C#。 可是,有研究表明,十大难学编程语言中,Java排第3&…

用python编写飞机大战

博主介绍:是一名刚来到CSDN的小萌新 飞机大战 效果显示代码实现领取代码资源 效果显示 代码实现 领取代码资源 效果显示 代码实现 # -*- coding: utf-8 -*- import pygame # 导入pygame库 from pygame.locals import * # 导入pygame库中的一些常量 …

python云计算有哪些岗位,华为python教程下载

本篇文章给大家谈谈华为python语言通用编程规范,以及python云计算有哪些岗位,希望对各位有所帮助,不要忘了收藏本站喔。 摘要:以 相反的顺序反转和处理字符串可能是编程中的一项常见任务。Python 提供了一组工具和技术&#xff0c…

java和python哪个功能更好,java和python哪个更有前景

大家好,本文将围绕java和python哪个更有发展前景展开说明,java和python哪个功能更好是一个很多人都想弄明白的事情,想搞清楚java和python哪个更有前景需要先了解以下几个事情。 java语言和python语言发展前景哪个好? 【导语】众所周知&#…

用Python写了一个网易云,太强了(附源码)

前言 今天的项目太强了,用 Python 整出一个网易云来,实现音乐自由! 环境 Python3.6.8 PyCharm 依赖包 PyQt5:用于图形界面的开发 shelve:用于序列化对象 requests:爬取数据 功能展示 根据关键词&…

java和python哪个更有前景,java和python哪个有前途

大家好,小编来为大家解答以下问题,java和python哪个更有前景,java和python哪个有前途,今天让我们一起来看看吧! 前言 如今开发编程行业的发展迅猛,it技术的更新迭代十分快速,社会发展的方方面面…

【Python】Java工程师学Python之一分钟了解Python

文章目录 为何要学习PythonPython概述编译和运行过程Python主要应用的领域Python的特点Python优点与Java的区别最后 为何要学习Python 鲁迅先生说的好,不爱学习的开发不是好开发(帮我压下先生的棺材板~),开个玩笑,主要…

Python---实现飞机大战源码

plane_main.py import pygame from plane_sprites import *class PlaneGame(object):"""飞机大战主游戏"""def __init__(self):print("游戏初始化")# 1.创建游戏的窗口self.screen pygame.display.set_mode(SCREEN_RECT.size)# 2.创…

Python项目——飞机大战!

文章目录 一、项目介绍——飞机大战实战步骤确认模块 —— pygame安装 pygame验证安装 二、pygame 快速入门项目准备1. 使用 pygame 创建图形窗口小节目标1.1 游戏的初始化和退出1.2 理解游戏中的坐标系案例演练 1.3 创建游戏主窗口1.4 简单的游戏循环 2. 理解 **图像** 并实现…

python和java哪个更有前景,python和java哪个更有前途

大家好,小编为大家解答python和java哪个好学,零基础的问题。很多人还不知道python和java哪个更容易入门,现在让我们一起来看看吧! 进入编程行业是很多人的梦想,现在越来越多的人都想要通过培训的方式进入IT行业中,但是…

Python项目实战之《飞机大战游戏》

目录 一、Pygame库包简介 二、Pygame安装 三、项目开发思路 3.1前言 3.2飞机大战开发步骤 一、Pygame库包简介 Pygame是一个基于python的游戏开发库,它提供一系列的工具和接口,使开发人员能够轻松的创建各种类型的游戏,包括2D游戏和简单…

Java调用Python语言及第三方Python库

#pic_center 400x 系列文章&#xff1a; 文章目录 1、导入依赖 <!--Python&Java--><dependency><groupId>org.python</groupId><artifactId>jython-standalone</artifactId><version>2.7.2</version></dependency>…

Python 代码托管到码云平台,原来这么简单

什么是代码托管&#xff1f;代码托管又有什么好处&#xff1f; 场景1&#xff1a;我有2个电脑&#xff0c;公司一台&#xff0c;家里一台。我想在两台电脑上都进行同步开发。这时候我只要git push/pull一下就能够同步了&#xff0c;不再需要用U盘拷来拷去 场景2&#xff1a;我…

Python游戏开发-超级海盗!!!

开发环境配置 安装python环境后&#xff0c;下载pygame模块&#xff0c;使用如下命令 pip install pygame 注&#xff1a;该项目使用了一些新特性&#xff0c;使用3.10以上的版本 游戏项目介绍 游戏分为两个模块&#xff0c;分别是编辑模块和关卡模块&#xff0c;在编辑模…

chatgpt赋能python:Python编译成Java字节码:一个全新的可能性

Python编译成Java字节码&#xff1a;一个全新的可能性 Python作为一种高级编程语言&#xff0c;有其独特的优点和特点&#xff0c;被广泛应用于各个领域。然而&#xff0c;随着Python在企业级应用中的广泛应用&#xff0c;性能和安全等方面的问题也越来越凸显出来。这时&#…

鲲鹏法(一)python环境搭建

简单总结一下python的开发环境&#xff08;偏科学计算一些&#xff09;&#xff0c;Pycharm等之后再补了 python环境搭建 一.Python二.IPython三.Jupyter1.Jupyder QtConsole(了解即可)2.Jupyder Notebook3.Jupyder Lab4.单元类型5.编辑单元6.Markdown单元7.输出显示8.nbconver…

【预测模型-ELM预测】基于原子搜索算法优化极限学习机预测matlab代码

​1 简介 针对变压器故障的特征,结合变压器油中气体分析法以及三比值法.提出了基于原子搜索算法改进极限学习机的故障诊断方法.由于输入层与隐含层的权值和阈值是随机产生.传统的极限学习机可能会使隐含层节点过多,训练过程中容易产生过拟合现象.该方法运用原子搜索算法对极限…

ELMo模型解读

在反复的看了ELMo源码和参考网上各路大神的经验之后&#xff0c;终于对ELMo的架构有了比较清楚的认识。总结一下自己对ELMo的理解&#xff0c;其实还有很多细节没有搞清楚。 一.模型架构 下面是我画的一个架构简图&#xff0c;对于ELMo不管你输入的是词还是字符&#xff0c;它…