基于pygame的雷电战机小游戏

import pygame
import sys
import random# 初始化 Pygame
pygame.init()# 设置窗口尺寸
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("雷电战机")# 设置颜色
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
YELLOW = (255, 255, 0)
WHITE = (255, 255, 255)# 战机初始位置
plane_pos = [WIDTH // 2, HEIGHT - 100]  # 战机的中心位置# 敌机列表
enemies = []
enemy_speed = 5  # 敌机移动速度# 积分
score = 0# 子弹类
class Bullet:def __init__(self, x, y, speed, damage):self.x = xself.y = yself.speed = speedself.damage = damagedef move(self):self.y -= self.speed  # 子弹向上移动def draw(self):pygame.draw.rect(screen, YELLOW, (self.x - 2, self.y, 4, 10))  # 绘制子弹# 创建敌机
def create_enemy():x = random.randint(0, WIDTH - 30)  # 随机生成敌机的 x 坐标enemies.append([x, 0])  # 敌机初始位置在屏幕顶部# 创建子弹
def create_bullet():x = plane_pos[0]  # 子弹的 x 坐标与战机相同y = plane_pos[1] - 20  # 子弹的 y 坐标在战机上方# 随机选择子弹类型bullet_type = random.choice([{"speed": 10, "damage": 1},  # 普通子弹{"speed": 15, "damage": 2},  # 强力子弹{"speed": 5, "damage": 0.5}   # 弱力子弹])return Bullet(x, y, bullet_type["speed"], bullet_type["damage"])# 游戏主循环
bullets = []  # 子弹列表
while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()# 获取按键状态keys = pygame.key.get_pressed()if keys[pygame.K_LEFT] and plane_pos[0] > 0:plane_pos[0] -= 5  # 向左移动if keys[pygame.K_RIGHT] and plane_pos[0] < WIDTH:plane_pos[0] += 5  # 向右移动if keys[pygame.K_UP] and plane_pos[1] > 0:plane_pos[1] -= 5  # 向上移动if keys[pygame.K_DOWN] and plane_pos[1] < HEIGHT:plane_pos[1] += 5  # 向下移动if keys[pygame.K_SPACE]:  # 按空格键发射子弹bullets.append(create_bullet())  # 添加新子弹到列表# 填充背景screen.fill(BLACK)# 绘制三角形作为战机point1 = (plane_pos[0], plane_pos[1] - 20)  # 顶点point2 = (plane_pos[0] - 15, plane_pos[1] + 10)  # 左下角point3 = (plane_pos[0] + 15, plane_pos[1] + 10)  # 右下角pygame.draw.polygon(screen, RED, [point1, point2, point3])  # 绘制战机# 创建敌机if random.randint(1, 30) == 1:  # 每30帧大约生成一个敌机create_enemy()# 更新并绘制敌机for enemy in enemies:enemy[1] += enemy_speed  # 敌机向下移动# 绘制敌机(使用三角形表示)enemy_points = [(enemy[0], enemy[1] - 20),  # 顶点(enemy[0] - 15, enemy[1] + 10),  # 左下角(enemy[0] + 15, enemy[1] + 10)   # 右下角]pygame.draw.polygon(screen, GREEN, enemy_points)  # 绘制敌机# 更新并绘制子弹for bullet in bullets[:]:  # 使用切片以避免修改列表时出错bullet.move()  # 移动子弹bullet.draw()  # 绘制子弹# 检查子弹与敌机的碰撞bullets = [bullet for bullet in bullets if bullet.y > 0]  # 移除超出屏幕的子弹for bullet in bullets[:]:  # 使用切片以避免修改列表时出错for enemy in enemies[:]:  # 使用切片以避免修改列表时出错if (bullet.x > enemy[0] - 15 and bullet.x < enemy[0] + 15 andbullet.y < enemy[1] + 10 and bullet.y > enemy[1] - 20):bullets.remove(bullet)  # 移除子弹enemies.remove(enemy)  # 移除敌机score += 10 * bullet.damage  # 根据子弹的伤害增加积分break  # 退出内层循环# 移除超出屏幕的敌机enemies = [enemy for enemy in enemies if enemy[1] < HEIGHT]# 显示当前积分font = pygame.font.Font(None, 36)  # 创建字体对象score_surface = font.render(f"Score: {int(score)}", True, WHITE)  # 渲染积分文本screen.blit(score_surface, (10, 10))  # 在屏幕上绘制积分# 更新显示pygame.display.flip()# 控制帧率pygame.time.Clock().tick(60)

实现效果:
在这里插入图片描述

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

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

相关文章

对于现货白银走势图分析,不是单纯为了回报

投资白银选对工具和产品真的很重要。如果投资者选择的是实物银条&#xff0c;或者纸白银等相对低效的投资方式&#xff0c;收益只能跟随白银的价格涨跌&#xff0c;比如今年以来&#xff0c;国际白银价格上涨了大概30%&#xff0c;投资者的收益就顶多只有30%&#xff0c;万一买…

[数据集][目标检测]道路积水检测数据集VOC+YOLO格式2699张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2699 标注数量(xml文件个数)&#xff1a;2699 标注数量(txt文件个数)&#xff1a;2699 标注…

redis实战——go-redis的使用与redis基础数据类型的使用场景(一)

一.go-redis的安装与快速开始 这里操作redis数据库&#xff0c;我们选用go-redis这一第三方库来操作&#xff0c;首先是三方库的下载&#xff0c;我们可以执行下面这个命令&#xff1a; go get github.com/redis/go-redis/v9最后我们尝试一下连接本机的redis数据库&#xff0…

如何在Java Maven项目中使用JUnit 5进行测试

如何在Java Maven项目中使用JUnit 5进行测试 1. 简介 JUnit 5概述 JUnit是Java编程语言中最流行的测试框架之一。JUnit 5是JUnit的最新版本&#xff0c;它引入了许多新特性和改进&#xff0c;使得编写和运行测试更加灵活和强大。 为什么选择JUnit 5 JUnit 5不仅提供了更强…

设计模式反模式:UML图示常见误用案例分析

第一章 引言 1.1 设计模式与反模式概述 在软件开发领域&#xff0c;设计模式与反模式是两种截然不同的概念&#xff0c;它们在软件设计过程中起着至关重要的作用。设计模式是经过验证的最佳实践&#xff0c;用于解决在特定上下文中经常出现的问题&#xff0c;从而提高软件的可…

《黑神话·悟空》是用什么编程语言开发的?

最近火爆全球的国产 3A 大作《黑神话悟空》&#xff0c;你玩了吗&#xff1f;没玩没关系&#xff0c;有人就是对游戏不感冒&#xff0c;我找了个宣发片&#xff0c;一起感受下3A大作的视觉冲击&#xff0c;而且还是我们从小听到大&#xff0c;那猴子&#x1f412;的故事。 ‌‌…

【Linux】自动化构建工具makefile

目录 背景 makefile简单编写 .PHONY makefile中常用选项 makefile的自动推导 背景 会不会写makefile&#xff0c;从一个侧面说明了一个人是否具备完成大型工程的能力 ​ ◉ 一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…

Scrapy 项目部署Scrapyd

什么是Scrapyd Scrapyd 是一个用来管理和运行 Scrapy 爬虫的服务。它允许用户将 Scrapy 项目部署到服务器上&#xff0c;然后通过一个简单的 API 来启动、停止和监控爬虫的运行。Scrapyd 可以帮助简化爬虫的部署过程&#xff0c;使得用户不必手动在服务器上运行爬虫&#xff0c…

【测试】JMeter从入门到进阶

本文参考 Jmeter自动化测试工具从入门到进阶6小时搞定&#xff0c;适合手工测试同学学习_哔哩哔哩_bilibili JMeter介绍 JMeter 是 Apache 组织使用 Java 开发的一款测试工具&#xff1a; 1、可以用于对服务器、网络或对象模拟巨大的负载 2、通过创建带有断言的脚本来验证程序…

9个最流行的文本转语音引擎【TTS 2024】

在快速发展的技术世界中&#xff0c;文本转语音 (TTS) 引擎正在取得显著进步。从增强各种应用程序中的用户体验到创建逼真且引起情感共鸣的语音输出&#xff0c;TTS 引擎正变得不可或缺。在这里&#xff0c;我们介绍了 2024 年为行业树立新标准的九款最佳 TTS 引擎。 NSDT工具推…

应用层协议(上)Http(URL、Cookie、Session)内含逻辑图解通俗易懂!

绪论​ “少年没有乌托邦 心向远方自明朗”&#xff0c;本章是应用层常用且重要的协议htttp&#xff0c;没看过应用层建议一定先看那一篇后再看本章才能更好的去从上到下的理解应用层。 话不多说安全带系好&#xff0c;发车啦&#xff08;建议电脑观看&#xff09;。 1.Http协…

Mac移动硬盘选什么格式最好 Mac怎么用ntfs移动硬盘

在使用Mac电脑的过程中&#xff0c;很多用户可能有需要扩展存储空间的需求。选择合适的移动硬盘格式对于数据传输的效率和兼容性至关重要。本文将详细介绍Mac移动硬盘选什么格式好&#xff0c;以及Mac怎么用ntfs移动硬盘&#xff0c;帮助用户优化Mac的使用体验。 一、Mac移动硬…

悬浮翻译工具有哪些?工作学习必备的5款悬浮翻译工具

当我们身处异国他乡&#xff0c;或是工作中遇到多语种交流的需求时&#xff0c;语言障碍往往会成为一道难以逾越的高墙。 不过&#xff0c;在这个充满创新的时代里&#xff0c;技术已经为我们准备好了答案——屏幕翻译器app。它们不仅能够即时翻译屏幕上的文字&#xff0c;还能…

电脑回收站清空了怎么恢复?

在日常使用电脑的过程中&#xff0c;不小心清空回收站导致重要文件丢失的情况时有发生。面对这种情况&#xff0c;我们不必过于慌张&#xff0c;因为有多种方法可以尝试恢复被清空的文件。本文将为您详细介绍几种有效的恢复方法&#xff0c;帮助您找回宝贵的文件。 方法一&…

芯片后端之 PT 使用 report_timing 产生报告 之 -nets 选项

今天,我们再学习一点点 后仿真相关技能。 那就是,了解 report_timing 中的 -nets 选项 。 如果我们仅仅使用如下命令,执行后会发现: pt_shell> report_timing -from FF1/CK -to FF2/d -delay_type max 我们使用命令 report_timing 报出的如上路径延时信息,仅仅显示…

Maven的一些相关知识【重修】《包括私服搭建!》

mvnrepository.com Maven 下载jar包的位置&#xff01; 【该部分有教程】 这是什么nb代码投稿视频-这是什么nb代码视频分享-哔哩哔哩视频 MAVEN 的私服搭建&#xff1a; https://zhuanlan.zhihu.com/p/520107316 2、maven私服搭建及应用&#xff08;下&#xff09;_哔哩…

R7RS标准之重要特性及用法实例(三十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列…

frameworks 之InputReader

frameworks 之InputReader InputManagerService 初始化InputManagerService 启动InputReader 事件的读取设备节点注册和监听设备输入事件的读取 InputReader 事件的处理设备的添加和删除处理触摸事件的处理数据的加工和分发 android 输入事件 主要分 2个流程 事件读取 和 事件…

python的jieba库中文分词词频统计和合并

可能在设置问题模板的时候需要分析已有问句&#xff0c;然后统计词频&#xff0c;根据词频设计问题模板

31套科技风PPT免费分享

目录 部分展示 部分展示 #PPT下载 「科技风模板」链接&#xff1a;https://pan.quark.cn/s/fb2f39a1d343 链接永久有效&#xff0c;点击这里下载&#xff0c;记得给个赞哦