【python游戏】让我们一起制作地球联邦阵营的战机,保护希望水晶,为人类的希望而战。

news2024/11/29 4:31:58

前言

嗨喽~大家好呀,这里是魔王呐 ❤ ~!

随着人类太空科技的飞速发展,希望水晶被越来越多的科学家当做核心能源来开发使用。

人类社会也因为水晶资源的争夺,开始逐渐分化成两派。

留在地球的普通人成立地球联邦,移居卫星的新人类建立行星同盟,两股势力开始各自发展自己的军备,纷争之势就此展开。

跨越十二星座,一场争夺水晶的战争打响,肆意的战火点燃了静谧的星海。

让我们一起制作地球联邦阵营的战机,保护希望水晶,为人类的希望而战。

【想一键获取素材和源码的,点击文章末尾名片】

目录

      • 前言
      • 模块准备
      • 素材准备
        • [需要 源码 . 素材 . 点击领取即可](https://jq.qq.com/?_wv=1027&k=S7pjsRlR)
      • 代码展示
      • 尾语 💝

模块准备

import pygame, os
import time
import random

素材准备

需要 源码 . 素材 . 点击领取即可

代码展示

因为代码有点多,这里就贴出一小部分代码,完整代码可点击上面或文末名片领取

前期准备

设置开火音乐

 effect = pygame.mixer.Sound('sounds/fire.wav')
 pygame.mixer.Sound.play(effect)

加载BOSS图片

  self.image = pygame.image.load('图片/'+boss_img_name+'.png').convert_alpha()

转换BOSS大小

self.image = pygame.transform.scale(self.image, (1, 12))

生成BOSS矩形框架

self.rect = self.image.get_rect()
self.blood = 1000

boss左右移动的速度

self.speed = 3.5

设置继承精灵

必须设置继承精灵 不然在使用精灵函数时会报错

super().__init__()

获取屏幕对象

self.screen = screen

随机 生成5个编号

alien_num = random.randint(1,5)

随机 加载五个飞机中的某个

self.image = pygame.image.load('图片/alien_' + str(alien_num) + '.png')
# picture = pygame.transform.scale(picture, (1280, 720))
self.image = pygame.transform.scale(self.image,(62,62))

获取飞机的 rect

self.rect = self.image.get_rect()

击落本机获得的分数

  self.score = 10

子弹部分

加载子弹的图片

self.bullet_img = pygame.image.load("图片/alien_bullet.png").convert_alpha()
self.bullet_img = pygame.transform.scale(self.bullet_img, (12, 12))

调节子弹尺寸的代码

picture = pygame.transform.scale(picture, (1280, 720))

生成子弹精灵组合

self.bullets = Group()

敌机射击频率

self.shoot_frequency = 0

飞机出现

def move(self):
    self.rect.top += 5

暂时不用射击

 self.shoot()
 self.moveBullet()

发射子弹

def shoot(self):
    if self.shoot_frequency % 200 == 0:
        bullet = Enemy_Bullet(self.bullet_img, self.rect.midbottom)
        self.bullets.add(bullet)
    self.shoot_frequency += 1
    if self.shoot_frequency > 200:
        self.shoot_frequency = 1

删除子弹

def moveBullet(self):
    for bullet in self.bullets:
        bullet.move()
        if bullet.rect.bottom < 0:
            self.bullets.remove(bullet)

绘制子弹

def drawBullets(self, scr):
    self.bullets.draw(scr)

敌机子弹初始位置设置

self.rect.midbottom = init_pos
self.rect.centery +=36
self.speed = 8

飞机图片

获取屏幕对象

self.screen = screen

获取整张图片

self.image_big = pygame.image.load('图片/hero.png').convert_alpha()
# subsurface 形成大图的子表面框架

获取飞机正面图片

self.image = self.image_big.subsurface(pygame.Rect(120, 0, 318 - 240, 87))

获取飞机正面矩形框架尺寸

self.rect = self.image.get_rect()

获取屏幕对象矩形

self.screen_rect = screen.get_rect()

获取屏幕正中x坐标

self.rect.centerx = self.screen_rect.centerx

获取屏幕底部y坐标

self.rect.centery = self.screen_rect.bottom - self.rect.height

设置飞机初始位置

self.centerX = float(self.rect.centerx)
self.centerY = float(self.rect.centery)

飞机尾焰

self.air = None

设置飞机尾焰位置

self.air_rect = pygame.Rect(self.centerX - 20,self.centerY+int((self.rect.height+72)/2)-10-36,40,72)

玩家所有发射子弹的集合

self.bullets = Group()
self.bullet_image = pygame.image.load('图片/bullet_1.png').convert_alpha()

子弹射击

def shoot(self):

产生一颗子弹实例

bullet = Bullet(self.bullet_image,self.rect.midtop)

在group子弹精灵集合中加入子弹

self.bullets.add(bullet)

子弹删除

def moveBullet(self):

逐个检查子弹精灵集合 到达屏幕顶端的子弹删除

for bullet in self.bullets:
    bullet.move()
    if bullet.rect.bottom < 0:
        self.bullets.remove(bullet)

子弹显示

def drawBullets(self, scr):

将精灵集合中的子弹绘制到屏幕上

self.bullets.draw(scr)

向上飞时,增加喷射火焰

def set_air(self, case):
    if case == 'up':
        air = pygame.image.load('图片/air.png').convert_alpha()
        img = air.subsurface(pygame.Rect(80, 0, 50, 87))
        self.air = img
    elif case == 'remove':
        self.air = None

根据移动方向获取飞机移动状态的图片

    def set_image(self, case):
        if case=='left':
            rect = pygame.Rect(195,0,318-248,87)
            image = self.image_big.subsurface(rect)
        elif case =='right':
            rect = pygame.Rect(195,0,318-248,87)
            image = pygame.transform.flip(self.image_big.subsurface(rect), True, False)
        elif case == 'up' or case == 'down':
            rect = pygame.Rect(120, 0, 318 - 240, 87)
            image = self.image_big.subsurface(rect)
        self.image = image

class Bullet(pygame.sprite.Sprite):
    def __init__(self, bullet_img, init_pos):
        pygame.sprite.Sprite.__init__(self)
        self.image = bullet_img
        self.rect = bullet_img.get_rect()
        self.rect.midbottom = init_pos
        self.speed = 25

    def move(self):
        self.rect.top -= self.speed

初始化pygame

pygame.init()
# pygame.mixer.init()
# pygame.mixer_music.load('sounds/enviro.mp3') # 加载播放音乐
# pygame.mixer.music.play(-1) #-1 为循环播放

设置游戏主题

pygame.display.set_caption('雷电飞机')

初始化屏幕大小

screen = pygame.display.set_mode((512,768))

大概效果就是这样

尾语 💝

要成功,先发疯,下定决心往前冲!

学习是需要长期坚持的,一步一个脚印地走向未来!

未来的你一定会感谢今天学习的你。

—— 心灵鸡汤

本文章到这里就结束啦~感兴趣的小伙伴可以复制代码去试试哦 😝

👇问题解答 · 源码获取 · 技术交流 · 抱团学习请联系👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/344881.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我对平衡二叉树的理解(比喻的方式)

传销是一种恶性的行销方式&#xff0c;主要手段就是激励其中的成员拉人头。 有个奇怪的传销组织&#xff0c;他们的传销规则是这样的&#xff1a; 每个人最多可以带着2人进该组织&#xff0c;其中1个年纪比自己大&#xff0c;另1个年纪比自己小新人都是由创始人找到。假如年纪…

中文关键词提取算法

中文关键词提取算法 如何提取query或者文档的关键词&#xff1f; 一般有两种解决思路&#xff1a; 有监督方法&#xff0c;把关键词提取问题当做分类问题&#xff0c;文本分词后标记各词的重要性打分&#xff0c;然后挑出重要的topK个词&#xff1b;无监督方法&#xff0c;使…

likeshop单商户SaaS版V1.8.2说明!

likeshop单商户SaaS版V1.8.2主要更新如下&#xff1a; 新增 前端登录引导用户填写头像昵称 PC端—注册页面显示服务协议和隐私政策 PC端—首次进入商城弹出协议提示 PC端—结算页新增门店自提的配送方式 后台—PC端菜单导航栏的跳转链接支持添加自定义链接 ​​ ​​ ​ 优…

2022年“网络安全”赛项宜昌市选拔赛 任务书

2022年“网络安全”赛项宜昌市选拔赛 任务书 任务书 一、竞赛时间 共计3小时。 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段单兵模式系统渗透测试 任务一 数据库服务渗透测试 任务二 Wireshark数据包分析 任务三 Windows操作系统渗透测试 任务四 系统漏…

腾讯云企业网盘正式入驻数字工具箱

腾讯技术公益继腾讯电子签等入驻后&#xff0c;上线近半年的腾讯技术公益数字工具箱再次迎来新成员——腾讯云企业网盘&#xff0c;现已正式接受公益机构申请公益权益。腾讯云企业网盘&#xff08;https://pan.tencent.com&#xff09;是由腾讯云推出的一款安全、高效、开放的企…

python+flask开发mock服务

目录 什么是mock&#xff1f; 什么时候需要用到mock&#xff1f; 如何实现&#xff1f; pythonflask自定义mock服务的步骤 一、环境搭建 1、安装flask插件 2、验证插件 二、mock案例 1、模拟 返回结果 2、模拟 异常响应状态码 3、模拟登录&#xff0c;从jmeter中获取…

Kafka 消费者

与生产者对应的是消费者&#xff0c;应用程序可以通过 KafkaConsumer 来订阅主题&#xff0c;并从订阅主题中拉取消息。 消息者与消费组 消费者&#xff08;Consumer&#xff09;负责订阅 Kafka 中的主题&#xff08;Topic&#xff09;&#xff0c;并且从订阅的主题上拉取消息…

低代码开发平台|制造管理-生产过程管理搭建指南

1、简介1.1、案例简介本文将介绍&#xff0c;如何搭建制造管理-生产过程。1.2、应用场景先填充工序信息&#xff0c;再设置工艺路线对应的工序&#xff1b;工序信息及工艺路线列表报表展示的是所有工序、工艺路线信息&#xff0c;可进行新增对应数据的操作。2、设置方法2.1、表…

女生做大数据有发展前景吗?

当前大数据发展前景非常不错&#xff0c;且大数据领域对于人才类型的需求比较多元化&#xff0c;女生学习大数据也会有比较多的工作机会。大数据是一个交叉学科涉及到的知识量比较大学习有一定的难度&#xff0c;女生比较适合大数据采集和大数据分析方向的工作岗位。 大数据采…

【沁恒WCH CH32V307V-R1与Arduino的串口通讯】

【沁恒WCH CH32V307V-R1的单线半双工模式串口通讯】1. 前言2. 软件配置2.1 安装MounRiver Studio3. UASRT项目测试3.1 打开UASRT工程3.2 CH307串口发送数据到Arduino实验3.3 CH307串口接收数据Arduino实验5. 小结1. 前言 本例演示了采用CH307串口3与Arduino软串口收发通信&…

Python的深、浅拷贝到底是怎么回事?一篇解决问题

嗨害大家好鸭&#xff01;我是小熊猫~ 一、赋值 Python中&#xff0c; 对象的赋值都是进行对象引用&#xff08;内存地址&#xff09;传递, 赋值&#xff08;&#xff09;&#xff0c; 就是创建了对象的一个新的引用&#xff0c; 修改其中任意一个变量都会影响到另一个 will …

第七届蓝桥杯省赛——5分小组

题目&#xff1a;9名运动员参加比赛&#xff0c;需要分3组进行预赛。有哪些分组的方案呢&#xff1f;我们标记运动员为 A,B,C,... I下面的程序列出了所有的分组方法。该程序的正常输出为&#xff1a;ABC DEF GHIABC DEG FHIABC DEH FGIABC DEI FGHABC DFG EHIABC DFH EGIABC DF…

VFIO软件依赖——VFIO协议

文章目录背景PCI设备模拟PCI设备抽象VFIO协议实验Q&A背景 在虚拟化应用场景中&#xff0c;虚拟机想要在访问PCI设备时达到IO性能最优&#xff0c;最直接的方法就是将物理设备暴露给虚拟机&#xff0c;虚拟机对设备的访问不经过任何中间层的转换&#xff0c;没有虚拟化的损…

2023年小鹏新能源汽车核心部件解密

小鹏主要硬件清单(G9车型) 感知层 从硬件上看,G9搭载两颗NVIDIA DRIVE Orin 智能辅助驾驶芯片,算力达到 508 TOPS。此外,全车周边31 个感知元器件,(800万双目、4个300万侧前侧后、4个130万环视、1个170万后视、1个100万DMS)、12个超声波雷达、5个毫米波雷达、2个速…

TeamFiltration:一款针对O365 AAD账号安全的测试框架

关于TeamFiltration TeamFiltration是一款针对O365 AAD账号安全的跨平台安全测试框架&#xff0c;在该工具的帮助下&#xff0c;广大研究人员可以轻松对O365 AAD账号进行枚举、喷射、过滤和后门植入等操作。TeamFiltering与CrackMapExec非常相似&#xff0c;它可以创建并维护一…

四大垃圾回收算法七大垃圾回收器

JVM的运行时内存也叫做JVM堆&#xff0c;从GC的角度可以将JVM分为新生代、老年代和永久代。其中新生代默认占1/3堆内存空间&#xff0c;老年代默认占2/3堆内存空间&#xff0c;永久代占非常少的对内存空间。新生代又分为Eden区、SurvivorFrom区和SurvivorTo区&#xff0c; Eden…

Python基础知识复习以及第三方库openxel的初步使用

目录文件python文件打开函数Python中的split函数详细解释List对象list添加元素的三种方法删除元素反转Python第三方库openxel的初步使用excel文件对象open操作excel入门文件 python文件打开函数 语法&#xff1a;open&#xff08;file, mode ‘r’, buffering-1, encodingNon…

【高性价比】初学者入门吉他值得推荐购买的民谣单板吉他品牌—VEAZEN费森吉他

“在未知的世界里&#xff0c;我们是一群不疲不倦的行者&#xff0c;执念于真善美&#xff0c;热衷于事物的极致。我们抽丝剥茧&#xff0c;不断地打败自己&#xff0c;超越自己&#xff0c;我们无所畏惧终将成为巨人。”这是VEAZEN吉他官网首页上很明显的一段话&#xff0c;也…

Learning C++ No.9【STL No.1】

引言&#xff1a; 北京时间&#xff1a;2023/2/13/18:29&#xff0c;开学正式上课第一天&#xff0c;直接上午一节思想政治&#xff0c;下午一节思想政治&#xff0c;生怕我们……&#xff0c;但&#xff0c;我深知该课的无聊&#xff0c;所以充分利用时间&#xff0c;把我的小…

MongoDB 索引

MongoDB 索引 索引通常能够极大的提高查询的效率&#xff0c;如果没有索引&#xff0c;MongoDB在读取数据时必须全集合扫描选取符合查询条件的记录。这种扫描全集合的查询效率是非常低的&#xff0c;特别在处理大量的数据时&#xff0c;查询可以要花费几十秒甚至几分钟&#x…