一篇文章教你Python做一个飞机大战(超详细)(一听就懂)

Python开发一个飞机大战游戏(附源码程) Python门非常简单的语言,快速入门之后可以很多事情!比如爬虫啊,数据析啊,自动化运维啊,机器学习,量化析等等!但是入门到进阶的过程有时会非常痛苦,如果有些好玩有趣的例子就好了。比如通过游戏来学编程是一个非常好的途径,今天强哥就来写一个非常好玩的打飞机游戏,大概就1000多行,非常不错!打飞机游戏估计很多人都玩过,雷霆战机相信很多80后的小伙伴都玩过!Python门非常简单的语言,快速入门之后可以很多事情!比如爬虫啊,数据析啊,自动化运维啊,机器学习,量化析等等! 阅读详情

前言

最近在学习Python,便用Pygame做了一个经典游戏——飞机大战。有兴趣的朋友可以参考一下。



注:本文很长,若只是想要代码或已经学会pygame的朋友只要看图片资源、代码、文件目录、实现效果


运行环境

1.一台可以使用的windows电脑
2.含有python运行环境(安装了python编译器)


安装Pygame

1.打开命令提示符

点击快捷键win+r,进入运行界面:
在这里插入图片描述
输入“cmd”,单击确定:
在这里插入图片描述

会出现类似这样的一个黑窗口(当然我演示的系统是win7,其他win版本可能略有不同)
在这里插入图片描述

pip安装pygame

输入命令“pip install pygame”,点击回车

稍等片刻即可完成

如果速度太慢,可以输入pip install pygame -i http://pypi.mirrors.ustc.edu.cn/simple/ 来临时更换pip源,加快pip速度,详见:让你的pip从龟速到豹速


图片资源

链接:https://pan.baidu.com/s/1pMM0beb


游戏原理&注意事项

玩过飞机大战的朋友应该都知道,自己通过方向键来控制飞机,发射炮弹摧毁敌机,若敌机碰到自己的飞机,自己牺牲。
通过玩法,可以写出这样的一个大if:
在这里插入图片描述
这个大if就是游戏的根本思想。
根据用户按键控制飞机左右移动,我们要捕获用户按键,改变飞机位置;

英雄子弹碰撞敌机敌机牺牲或英雄碰到敌机英雄牺牲,我们要进行碰撞检测;

为了更好的控制敌机、英雄、子弹,我们要建立精灵组;

代码采用面向对象的编写方式,要有类/对象基础;

代码分两个文件编写,一个叫Plane_Game(游戏主程序),一个叫PlaneSprite(负责游戏精灵和工具编写)

这是游戏的精髓。如果你对这几种都掌握了,了解目标后,我们开始编写代码吧!

编写代码

1.导入模块

Plane_Game.py

#导入pygame和工具文件
import pygame
from PlaneSprites import *

PlaneSprite.py

import random,pygame

2.完成框架

(1)确定职责

我们在主文件中,根据要实现的不同目标,设立了几个方法,避免某一个方法的代码写得太过冗长:

游戏初始化 —— init() 会调用以下方法:

方法 职责
__create_sprites(self) 创建所有精灵和精灵组

主循环 start_game() 会调用以下方法:

方法 职责
__event_handler(self) 事件监听
__check_collide(self) 碰撞检测 —— 子弹销毁敌机、敌机撞毁英雄
__update_sprites(self) 精灵组更新和绘制
__game_over() 游戏结束

完成类的创建

if name == 'main’的意思是:当.py文件被直接运行时,if name == 'main’之下的代码块将被运行;当.py文件以模块形式被导入时,if name == 'main’之下的代码块不被运行。

#类继承自object基类
class PlaneGame(object):
    """飞机大战主游戏"""
    #完成初始化方法框架
    def __init__(self):
        print("游戏初始化")
    #完成开始游戏框架
    def start_game(self):
        print("开始游戏...")

#if __name__ == '__main__'的意思是:当.py文件被直接运行时,if __name__ == '__main__'之下的代码块将被运行;当.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行。
if __name__ == '__main__':
    # 创建游戏对象
    game = PlaneGame()

    # 启动游戏
    game.start_game()

完成__init__()创建

self.clock = pygame.time.Clock() 创建时钟对象,用来设置刷新帧率,60就能达到非常好的效果了

def __init__(self):
    print("游戏初始化")
    
    # 1. 创建游戏的窗口
    self.screen = pygame.display.set_mode((480, 700))
    # 2. 创建游戏的时钟
    self.clock = pygame.time.Clock()
    # 3. 调用私有方法,精灵和精灵组的创建
    self.__create_sprites()

def __create_sprites(self):
    pass

把固定数值设为常量

  • 代码调整

plane_sprites.py 中增加常量定义

import pygame
# 游戏屏幕大小
SCREEN_RECT = pygame.Rect(0, 0, 480, 700)

修改 plane_main.py 中的窗口大小

#矩形对象的size就是它的宽和高(x,y)
self.screen = pygame.display.set_mode(SCREEN_RECT.size)

完善游戏循环框架

pygame.event.get()是获取到当前事件的队列 因为我们要处理这个队列的所有事件,
一般我们都会设置一个循环,就可以去处理内部一个一个的event

def start_game(self):
        """开始游戏"""
        while True:
            #1.设置刷新帧率
            self.clock.tick(60)
            #2.事件监听
            self.__event_handler()
            #3.碰撞检测
            self.__check_collide()
            #4.更新/绘制精灵组
            self.__update_sprite()
            #5.更新显示
            pygame.display.update()
    def __event_handler(self):
        #事件监听
        for event in pygame.event.get():
            #判断是否退出游戏
            if event.type == pygame.QUIT:
                PlaneGame.__game_over()
    def __check_collide(self):
    """碰撞检测"""
    pass

	def __update_sprites(self):
    """更新精灵组"""
    pass
    
	@staticmethod
	def __game_over():
	   """游戏结束"""
	
	   print("游戏结束")
	   pygame.quit()
	   exit()

确定精灵组

创建精灵组方法
Plane_Game.py

def __create_sprites(self):
    """创建精灵组"""
    
    # 背景组
    self.back_group = pygame.sprite.Group()
    # 敌机组
    self.enemy_group = pygame.sprite.Group()
    # 英雄组
    self.hero_group = pygame.sprite.Group()

更新精灵组方法

def __update_sprites(self):
    """更新精灵组"""
    
    for group 
手把手学,Python 游戏编程之实现飞机大战(含源代码) 我想大家都是有玩过类似飞机大战的射击类游戏,也享受目标被消除通过后带来的愉悦感。那么如果用Python来实现飞机大战游戏?下面就跟大家起用Python一个游戏,不仅可以从中感受到乐趣,还可以提升自己的能力。 阅读详情

相关推荐

飞机大战游戏(超详细)

偷学Python之最后的项目二:飞机大战游戏(超详细) 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。——苏轼 甜甜先说 这次用Python中的pygame模块来完成一个飞机大战的小游戏;基本思路是通过方向键来控制飞机的左右移动射击飞船。 成品效果 此博客是记录编写的全部流程,每次修改的代码也包括在内 看下SCDN的统计字数 当然,这里面大部是代码,而且是步的代码。如果跟着敲的话预计好几个小时,介意的话我开了另帖,那个贴只有成品代码,传送门 文章目录偷学Python之最后的项目二:.

一碗周 4547

飞机大战python

飞机大战(测试版) 关于类的使用 重点如下:1.熟练掌握对类的使用(比如,在pygame中主要成两种类别: 英雄类,精灵类) 2.对调用的模块pygame具有定了解 最基本的创建思路可以划成两个模块: 一个封装基本的操作,调用主程序 另一个存储基本精灵类 首先介绍主程序 基本事件的定义 import random import pygame #常量 SCREEN_RECT = pygame.Rect(0, 0, 2560, 1440) #刷新帧率 FRAME_PRE_SEC = 60 #创建敌机 C

futurn_hero的博客 778

Python实现飞机大战游戏(后附完整代码文件和素材)

自学Python的记录,不喜勿喷! 本程序的代码是以B站黑马程序员的视频代码为基础,个人加以总结思考,写就的博文,纯属记录自己的学习历程!

the best messi的博客 2万+

Python飞机大战程序代码(pygame),详细讲解,手把手

游戏的大体框架是两部内容:是基于pygame.sprite.Sprite这个父类,创建各种各样的派生类,比如子弹类,敌机类。Rect对象的常见属性:x, y, left, top, bottom, right, center, centerx, centery, size, width, height.1) pygame中的坐标系以左上角为原点,提供了一个pygame.Rect用于描述矩形区域.2)pygame.event.get()可以得到用户当前所动作的时间列表(代码相对比较固定)

m0_65482549的博客 9726

基于Python飞机大战游戏的设计与实现

飞机大战种非常传统的电脑游戏,也是非常经典的游戏,经常可以在电脑,手机,以及各类便携式游戏机中见到。传统的老式飞行游戏以平面,灰白画面为主。而现在,随着计算机性能的飞速发展,我们目前可以在计算机上见到种类更加繁多的飞机大战Python语言目前的使用范围非常广泛,使用者们也非常喜欢,而其自身的优越性也因此就得到了迅速的发展。这对C++,java等近些年来流行的语言造成了很强的影响。拥有良好的通用性,作业迅速,良好的跨平台和稳定性是Python技术的优点。

QQ2743785109的博客 3308

Python代码实现飞机大战

文章目录经典飞机大战.游戏设定二.我方飞机三.敌方飞机四.发射子弹五.发放补给包六.主模块 经典飞机大战 源代码以及素材资料(图片,音频)可从下面的github中下载: 飞机大战源代码以及素材资料github项目地址链接 ————————————————————————————————————————————————————————— 不知道大家有没有打过飞机,喜不喜欢打飞机。当我第次接触这个东西的时候,我的内心是被震撼到的。第次接触打飞机的时候作者本人是身心愉悦的,因为周边的朋友都在打飞机, 每

逐梦er的博客 5万+

Python一个经典的飞机大战(附源代码)

当年微信 5.0 发布时,首页被设置成了款新推出的小游戏,它就是微信版飞机大战游戏经推出便是火爆异常,铅笔画风格的游戏界面也受到了很多人的喜欢。 最近重温了下这款小游戏,尽管时隔多年,但无论是游戏的画质还是风格,时至今日依然都不过时。本文我们使用 Python 来实现下这款小游戏游戏的实现主要用到第三方模块 pygame,安装使用 pip install pygame 即可。 注:文章末尾附源码and资料领取方式! 环境 操作系统:Windows Python 版本:3.6 涉及模块:pygam

小六的博客 6720

八、Python基础(综合演练:飞机大战

八、Python基础(综合演练:飞机大战) 目录:八、Python基础(综合演练:飞机大战、模块1.利用 pip 安装 pygame 模块2.图片素材下载二、pygame 模块初识1.游戏的初始化和退出2.pygame 中的游戏坐标系矩形区域对象名 = pygame.Rect(x, y, width, height)3.创建游戏主窗口游戏主窗口对象名 = pygame.display.set_mode(resulution=(0, 0), flags=0, depth=0)4.游戏主窗口上图像的绘制图片

~宪宪的博客 1万+

Python语言程序设计课程论文--飞机大战

Python语言程序设计课程论文 项目名称:飞机大战 摘要 这款游戏的名字叫<飞机大战>,是使用Python开发的纵版飞行射击类游戏.Python种面向对象的解释型计算机程序设计语言,具有简单易学,可移植,可拓展等特点.并且拥有丰富的资源.在图形处理,数字处理,网络编程等方面有广泛用途.这个游戏利用了Pythonpygame模块,射击了子弹,飞机类的相关方法和属性,进行了背景贴图,实现了飞机大战游戏的功能.由于这款游戏的受众是年龄比较小的小朋友,所以我把飞机改成了一个小猪仔,比较可爱,应该

the_third_dog的博客 1万+

Python入门项目——飞机大战

文章目录项目描述Pygame 安装Windows 平台下安装Linux 平台安装开始编写项目 项目描述 首先描述下要实验的这个《飞机大战游戏。 在游戏中,玩家控制这艘最初出现在屏幕最底部中央的飞船。玩家可以使用 箭头键 左右移动非常,还可以使用 空格键 进行射击。游戏开始时,群外星人出现在天空中,他们在屏幕中向下移动。玩家的任务就是射杀这些外星人。玩家将所有外星人都消灭干净后,将出现批新的外星人,他们移动速度更快。这个过程中,只要外星人撞到玩家的飞船或者到达了屏幕底部,玩家就会损失艘飞船。玩家

跑不了的你的博客 7620

Python实现飞机大战游戏(含源码+图片资源)

Python实现飞机大战游戏1. 项目描述2. 依赖包导入3. 代码实现3.1 类构建3.2 初始化设置3.3 排行榜功能3.4 主循环4. 效果展示4.1游戏开始界面:4.2破纪录界面显示:4.3排行榜功能:5. 不足和改进 1. 项目描述         该飞机大战游戏是利用python语言实现的,该项目为之前...

weixin_40840714的博客 6806

Python项目——飞机大战

文章目录、项目介绍——飞机大战实战步骤确认模块 —— pygame安装 pygame验证安装二、pygame 快速入门项目准备1. 使用 `pygame` 创建图形窗口小节目标1.1 游戏的初始化和退出1.2 理解游戏中的坐标系案例演练1.3 创建游戏主窗口1.4 简单的游戏循环2. 理解 **图像** 并实现图像绘制代码演练 I —— 绘制背景图像代码演练 II —— 绘制英雄图像理解 `update()` 方法的作用3. 理解 **游戏循环** 和 **游戏时钟**3.1 游戏中的动画实现原理3.2

weixin_46351593的博客 7196

Python飞机大战

python实现飞机大战案例,涵盖飞机大战游戏原理介绍,代码实现步骤

taisu001的博客 1374

Python飞机大战源代码

Python飞机大战源代码

FlymaAqi,芜湖,飞马阿起,passion!passion! 6108

Python飞机大战游戏_完整源码免费

文章目录Python飞机大战1. 导包2. 子弹类3. 玩家飞机类4. 发射子弹的函数5. 操控飞机移动的4个函数6. 敌机类7. 资源初始化及参数配置8. 游戏主循环10. 静态资源获取11. 更多干货享(免费) 今天给大家免费Python飞机游戏的源码。 Python飞机大战 (声明:源码来源于网络,具体在哪搞的记不太清了,好像是17年的时候用下载币倒腾来的) 在此之前首先说下环境 Python3.X (使用2.x的大佬自己稍微改动下就行) pygame 1.9.6(当然这个没必要和

bboy枫亭的博客 6309

Python实现飞机大战

Python实现飞机大战 学习完python基础顺手写一个飞机大战练练手,这个游戏已经很多人写过了,本人写的比较菜。由于是练手,所以好多该封装的东西都没封装,里面有个变态模式, 感兴趣的可以拿来玩玩。文章最后有资源链接。 项目总览 代码部 main.py import pygame.sprite import enemy import myplane import bullet import supply from random import ...

RookiChen的博客 7342

python实现飞机大战源代码+素材+项目

.项目Python程序设计项目 题 目 飞机大战 院 系 信息科学与技术学院 专 业 计算机科学与技术 姓 名 星空 班级学号 37 指导师 xxx 二O九年十二月 .系统研究的背景及意义 当今社会是一个信息社会,一个知识经济的年代。自从世界上第台计算机ENIAC于19...

轻松玩编程 2万+

基于Python飞机大战复现

游戏款使用PythonPygame库开发的飞机大战游戏

Srlua的博客 2515
上一篇: 怎么把被恶意程序修改的浏览器主页改回来(无需下载任何软件)
下一篇: 用Python做一个超简单的小游戏(一听就懂)
CSDN_C2
博客等级 码龄6年 62粉丝 18原创
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值