这也太强了吧!原来这样的飞机游戏才是python基础的精华,网友直呼:好项目

python基础之--人机大战,编程思维! 阅读详情

当初想到要用Python的pygame模块开发飞机大战游戏的时候,顿时就兴奋了,毕竟学以致用是最好的学习方式,何况是做一个游戏,但是当我真正上手的时候发现并没有想象中的那么轻松。当然万事开头难,有了一定的经验之后,后面的路就会轻松许多了。

前言

pygame模块安装

开发这个游戏的第一步是安装pygame模块

pygame入门

在完成好pygame模块安装之后,就要正式开始我们的游戏开发了!在这之前,我们先来认识一下Python中的pygame模块,pygame是Python中的一个2D游戏开发库,支持声音和图像的编辑,当然在现在的3D游戏的普及下,pygame逐渐没落了,但是这不妨碍我们从中学到一些东西。pygame程序的大体结构就是下面这个样子,init()函数开始,quit()函数退出,中间就是具体的游戏代码。

import pygame
pygame.init()
# 编写游戏的代码
print("游戏的代码...")
pygame.quit()

使用Rect来描述矩形区域

Python游戏中以坐标系来描述游戏中各个组件的位置,原点在左上角,x轴水平向右、y轴水平向下。描述一个矩形区域还要有宽度和高度,因为一个坐标只能表示其左上角的位置,加上宽度和高度之后位置就定死了。

import pygame
hero_rect = pygame.Rect(100, 500, 120, 125)
print("英雄的原点%d %d" % (hero_rect.x, hero_rect.y))
print("英雄的尺寸%d %d" % (hero_rect.width, hero_rect.height))
print("%d %d" % hero_rect.size)

创建游戏窗口

pygame中专门提供了一个模块pygame.display用于创建、管理游戏窗口。其中有两个方法:

  • pygame.display.set_moudle():用于初始化游戏窗口。里面有四个参数,窗口的宽和高,是否全屏,窗口的颜色。
  • pygame.display.update():用于刷新屏幕内容显示,稍后使用。
import pygame
pygame.init()
# 创建游戏的窗口
pygame.display.set_mode((480, 700))
while True:
    pass
pygame.quit()

游戏窗口宽480,高700,单位是像素,这个设定是我们后面的背景图片一致。while循环是主游戏循环,只要没有命令退出游戏,就要一直执行下去。

绘制图像

游戏窗口创建完成之后,就要来放东西了,不然你就盯着一个黑麻麻的窗口看啥呢!pygame中的load()函数加载图像数据,blit()函数绘制图像,update()函数更新屏幕显示,每绘制一次图像就要调用一次update方法,当然也可以放在最后只调用一次update方法。

import pygame
pygame.init()
# 创建游戏的窗口
screen = pygame.display.set_mode((480, 700))
# 绘制背景图像
# 1.加载图像数据
bg = pygame.image.load("./images/background.png")
# 2.blit绘制图像
screen.blit(bg, (0, 0))
# 3.update更新屏幕显示
pygame.display.update()
# 绘制英雄的飞机
hero = pygame.image.load("./images/me1.png")
screen.blit(hero, (180,500))
pygame.display.update()
while True:
    pass
pygame.quit()

这些弄完之后就是下面这个样子:

在这里插入图片描述

游戏循环

游戏循环意味着游戏的开始,游戏循环的作用是保证游戏不会直接退出,变换图像位置来实现动画效果并检测与用户的交互内容。具体包括设置刷新帧率,检测用户交互,更新图像位置,更新屏幕显示等等。

while True:
	pass

游戏时钟

pygame中专门提供了一个类pygame.time.Clock可以非常方便的设置屏幕绘制速度——刷新帧率。在游戏初始化创建一个时钟对象,并在游戏循环中让时钟对象调用tick()方法,tick()方法会根据上次被调用的时间,自动设置游戏循环中的延时。

......
# 创建时钟对象
clock = pygame.time.Clock()
while True:
    # 可以指定循环体内部的代码执行频率
    clock.tick(60)
......

监听事件

事件就是游戏启动后,用户针对游戏所做的操作。例如:用户点击鼠标,按动键盘等等。
监听则是判断用户的具体操作,只有捕获用户具体的操作,才能针对性的做出响应。
pygame中通过pygame.event.get()可以获得当前用户所做操作的事件列表。

import pygame
pygame.init()
# 创建游戏的窗口
screen = pygame.display.set_mode((480, 700))
# 绘制背景图像
bg = pygame.image.load("./images/background.png")
screen.blit(bg, (0, 0))
#  pygame.display.update()
# 绘制英雄的飞机
hero = pygame.image.load("./images/me1.png")
# screen.blit(hero, (180,500))
# 可以在所有绘制工作完成之后统一调用update方法
pygame.display.update()
# 创建时钟对象
clock = pygame.time.Clock()
# 1.定义rect记录飞机的初始位置
hero_rect = pygame.Rect(150, 300, 102, 126)
# 游戏循环->意味着游戏的正式开始
while True:
    # 可以指定循环体内部的代码执行频率
    clock.tick(60)
    # 监听事件
    event_list = pygame.event.get()
    if len(event_list) > 0:
        print(event_list)
        # 判断飞机的位置
    if hero_rect.y <= 0:
        hero_rect.y = 700
        # 2.修改飞机的位置
    hero_rect.y -= 1
    # 3.调用blit方法绘制图像
    screen.blit(bg, (0, 0))
    screen.blit(hero, hero_rect)
    # 4.调用update方法更新显示
    pygame.display.update()
pygame.quit()

在这里插入图片描述
MouseMotion就是鼠标移动,KeyDown就是按下键盘,KeyUp就是松开键盘。

精灵和精灵组

这可不是在讲数码宝贝哈!精灵和精灵组是pygame中提供的两个类,是为了简化图像加载、位置变化、绘制图像等功能的开发步骤。
pygame.sprite.Sprite——用于存储图像image和位置rect的对象。
pygame.sprite.Group——包含多个精灵的对象。
精灵类中有两个属性image记录图像数据和rect位置信息,update()方法更新位置信息。
精灵组类add()方法向组中增加精灵;sprites()方法返回所用精灵列表;update()方法让组中的所有精灵调用update方法;draw()将组中所用精灵的image绘制到Surface的rect位置。

class GameSprite(pygame.sprite.Sprite):
    """飞机大战游戏精灵"""
    def __init__(self, image_name, speed=1):
        # 调用父类的初始化方法
        super().__init__()
        # 定义对象的属性
        self.image = pygame.image.load(image_name)
        self.rect = self.image.get_rect()
        self.speed = speed
    def update(self):
        # 在屏幕的垂直方向上移动
        self.rect.y += self.speed

框架搭建

借用一下黑马的图片。以下就是这个游戏的大体框架:首先是游戏初始化,设置游戏窗口,创建游戏时钟,创建精灵和精灵组。再就是在游戏循环中设置刷新帧率,进行事件监听、碰撞检测、更新绘制精灵组、更新屏幕显示等等。在这里插入图片描述
存储各种精灵的文件:在这里插入图片描述
主程序:


在这里插入图片描述

最后的游戏窗口就是这个样子,感觉我能玩一年。

在这里插入图片描述

这些都是比较简单的操作!我们一起加油

Python快速实现简易飞机大战小游戏(完整源码+图片素材) 在今天的数字时代,计算机游戏一直是人们娱乐和放松的一种重要方式。而作为程序员或编程爱好者,将自己的创意融入游戏开发中,不仅可以带来乐趣,还可以提高编程技能。本文将带您走进游戏开发的精彩世界,通过使用 Python 编程语言,快速创建一个简单的飞机大战小游戏,仅供娱乐。app.ico图片为游戏运行界面左上角图标,随便用那张图片都行,例如直接使用我方飞机图片重命名即可。运行方式:运行main.py即可。 阅读详情

相关推荐

月薪8000元的实习生程序员写的代码,值不值这个价?

作为一名程序员,编写代码无疑是你职业中最重要的部分。最近,看到一位网友公开了一个月薪8000元的程序员写的代码: 放上两张高清图片,大家可以看看,8000元到底值不值。 这两张代码图一时间也引发了很多人围观~ 有网友说8000元不太值… 也有人说这是差不多刚入门水平,注意下代码规范就行~ 也有人说如果学习能力强,还可以考虑留下… 认为,写代码并不简单,也许现在写出的代码与月薪8000元不匹配,这就需要持续的学习和练习。 其实程序员时刻都在学习成长的路上!那些年薪百万的技术人,也应该有很多是从8000

m0_64519234的博客 1155

python基础之--人机大战,编程思维

python 编程思维

qq_40333984的博客 13万+

无线通信经典教材中文版:从理论到nrf24l01与SDR抓包实战

无线通信是现代通信技术的核心基础,其原理涉及信号调制、信道编码、多址接入等关键技术。理解无线通信系统需要掌握从物理层到网络层的完整知识体系,其中信道特性、链路预算和抗干扰技术是工程实践中的关键。通过经典教材的系统学习,可以构建扎实的理论框架,指导实际硬件开发与协议分析。例如,在分析nrf24l01模块的通信性能时,理论能帮助优化数据速率与功率的权衡;而软件无线电抓包则让多径衰落、调制方式等抽象概念变得可视化。掌握这些基础原理,不仅能提升对Wi-Fi、蓝牙等常见协议的分析能力,也为物联网设备开发和无线网络安全

weixin_33712987的博客 512

python人机大战小游戏代码

import random def computer(user_score,comp_score,n): #user_score接受玩家得分,comp_score接受电脑得分,n接受回合数 print(f'*********** 回合【{n}】:电脑攻击 ***********') comp = random.randint(1,3) #电脑随机取值 print(f'---------作弊{comp}') user = int(input('玩家请输入:')) .

qq958566955的博客 18万+

飞机大战--python基础项目(附源码和原理讲解)

飞机大战_python基础项目

m0_64041302的博客 1万+

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

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

the best messi的博客 2万+

Python 实现人机大战猜数字

import random x=random.randint(1,100) #随机产生一个数放到x里 a=0 while a!=x: #如果a不等于x a=int(input("请输入一个整数(1~100):")) #输入你猜的数字放到a if a>x: #如果 print("猜大了!")...

pangduoaichirou的博客 3万+

python飞机大战素材

python飞机大战素材

Python3+pygame实现有趣好玩的飞机大战游戏(附源码及素材)

python3+pygame实现有趣好玩的飞机大战游戏!

小鸿的博客 5816

pygame-飞机大战素材

pygame飞机大战的素材资源,有需求的朋友可以下载来试试,作为练手的好项目,确实需要去过一遍。希望大家都能够在学习的道路上披荆斩棘,迈向成功|!

Java与Python之间使用jython工具类实现数据交互

今天小编就为大家分享一篇关于Java与Python之间使用jython工具类实现数据交互,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

Java 与 Python 数据交互

开发环境及工具: java 环境 :JDK 1.8 Python环境:Python 3.7 (安装anaconda自带的python版本) Anaconda环境: conda 4.5.11 Maven环境: Maven 3.6.3 开发工具: IDEA 2020.3.2 Pycharm 2019.2 Postman 本文是以Spring Boot项目来完成Java与Python的数据操作的。 第一步:添加依赖 在pom.xml文件中加入以下内容 <!--Jython

LZW15082682930的博客 5万+

样本不均衡时AUC反而下降?用imbalanced-learn库实战解决分类陷阱

本文探讨了样本不均衡时AUC指标下降的现象,并通过imbalanced-learn库实战演示了如何解决这一分类陷阱。文章详细分析了不同采样技术(如SMOTE、ADASYN)对模型性能的影响,并提供了XGBoost和逻辑回归模型的优化建议,帮助数据科学家在实际项目中做出更明智的决策。

weixin_29174013的博客 345

python飞机大战,感受python的乐趣(详细中文解读,含完整代码)

python飞机大战 本文章代码是根据《python编程从入门到实践》(第2版)编写而成,已经成功运行,编写这个博客的目的也是再巩固一下自己的python编程。 首先,编写python飞机大战必须要掌握以下几点(我目前也在努力学习,可以互相交流,沟通): 1.python基础(学过c语言,应该会学的很快) 2.会使用第三方库(本篇文章主要用的是pygame) 掌握之后就可以开始编写自己的飞机大战,冲,冲,冲 编写这个飞机大战主要有以下五个方面,我在下面会介绍 ...

wzy的博客 1万+

从零开始使用matlab实现EKF-SLAM算法(含完整代码)

扩展卡尔曼滤波器同步定位与建图 (EKF-SLAM) 算法建立在 EKF 的基础上,集成了 EKF 的功能,可解决机器人技术中最具挑战性的问题之一:同时定位与建图 (SLAM)。 EKF-SLAM采用EKF方法来同时估计机器人的状态和周围环境的布局,而无需事先了解位置。 这种双重功能对于在未知环境中运行的自主系统至关重要,使它们能够在绘制区域地图时有效导航。 EKF-SLAM 算法一直是自动驾驶车辆和机器人系统开发的基石,为处理现实世界环境中固有的不确定性提供了一个强大的框架。

mjmmm的博客 6636

1553B通信项目开发笔记(一)协议概述

最近接了个项目,需要用1553B协议通信,仅作为RT端口进行通信,控制器采用ARM 使用芯片为国产的BU61580芯片,功能和引脚和DDC的61580完全一致。

u010396127的博客 2万+

python飞机大战源码

这是一段用 Python 写的飞机大战源代码: import pygame # 初始化游戏 pygame.init() # 设置窗口大小width, height = 480, 640 screen = pygame.display.set_mode((width, height)) # 设置窗口标题 pygame.display.set_caption('飞机大战') # 加载背景图片 ...

weixin_35755434的博客 952

[V-10]ARMv8/v9-CPU Virtualization-CPU虚拟化架构简介(vCPU/vPE)

本文简要介绍了CPU虚拟化架构的基础知识。

基层架构师的分享 1267

Python—飞机大作战游戏(附源代码及素材)

目录 过程说明: 主函数 键盘控制 创建类 01、飞机基类 02、子弹基类 03、Hero飞机类 04、enemy飞机类 源代码及素材 过程说明: 应用到的库: import pygame import random 一、框架 1、创建界面宽度 2、背景图片 3、标题 4、背景音乐二、键盘控制 1、接收键盘控制-自己的方向和射击控制三、创建类1、飞机基类 ...

m0_65592409的博客 6821

Power BI常见问题篇1:无法打开文档

Power BI常见问题篇1:无法打开文档

weixin_48273257的博客 3307

本地化搭建DeepSeek+RAGFlow,构建个人知识库

本地化搭建DeepSeek+RAGFlow,构建个人知识库。至少32G以上内存、500G以上空余磁盘空间。

gogospecter的专栏 7431

500行代码,教你用python写个微信飞机大战

这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手。 帮助蹲厕族、YP族、饭圈女孩在无聊之余可以有一样东西让他们振作起来!让他们的左手 / 右手有节奏有韵律的朝着同一个方向来回移动起来! 这是史诗级的发明,是浓墨重彩的一笔,是…… 在一阵抽搐后,我结束了游戏,瞬时觉得一切都索然无味,正在我进入贤者模式时,突然想到,如果我可以让更多人已不同的方式体会到这种美轮美奂的感觉岂不美哉? 所以我打开电脑,创建了一个 `plan_game.py`……

Python专栏 9万+

一文掌握DrissionPage的详细使用

是一个基于 Python 的网页自动化工具,主要用于网页数据的抓取、自动化操作和测试。它结合了 Selenium 和 Requests 的优点,提供了更简洁、高效的 API,适用于各种网页自动化任务。DrissionPage 是一个功能强大且易于使用的网页自动化工具,适用于各种网页自动化任务。希望本文的 DrissionPage 的基本使用方法和一些高级功能能够帮助到你。

数据知道的博客 1万+

18 11 08 游戏学习完成

pygame 中最最后一步 就是 飞机大战中的碰撞检测 pygame中的 碰撞检测 分成两种     1 pyagme.sprites.groupcollide (group1 ,group2, dokill1,dokill2) 后两个 是看对象会不会消失     相对于两个 精灵组的 的碰撞检测     对于pyga...

bangchela8451的博客 413

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

python3分析《三国演义》出场人物频次

利用jieba库分析《三国演义》人物频次。 #CalThreeKingdomsV2.py import jieba txt = open("threekingdoms.txt", "r", encoding = "utf-8").read() excloudes = {"将军","却说","荆州","二人","不可","不能","如此","商议","如何","主公","军士","左右","军马","引兵","次日","大喜","天下","东吴","于是","今日","不敢","魏兵","陛下","一人",

zilongxuan008的博客 7793

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: 谁说程序员不懂浪漫?看完这个,大神也膜拜!
下一篇: python大神养成记:7大技巧助你一臂之力,这可能是我看到最靠谱的东西了
克金森沐沐
博客等级 码龄6年 694粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值