python飞机大战游戏.py

devtools/2024/12/22 1:30:39/

pythonpy_0">python飞机大战游戏.py

python">import pygame
import random# 游戏窗口大小
WINDOW_WIDTH = 600
WINDOW_HEIGHT = 800# 颜色定义
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)# 初始化Pygame
pygame.init()# 创建游戏窗口
window = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
pygame.display.set_caption("飞机大战")# 创建时钟对象,用于控制游戏帧率
clock = pygame.time.Clock()# 飞机类
class Plane(pygame.sprite.Sprite):def __init__(self):super().__init__()self.image = pygame.Surface([50, 50])  # 飞机的形状self.image.fill(WHITE)self.rect = self.image.get_rect()self.rect.x = WINDOW_WIDTH // 2self.rect.y = WINDOW_HEIGHT - 100self.speed = 5def update(self):# 获取键盘按键状态keys = pygame.key.get_pressed()if keys[pygame.K_LEFT]:self.rect.x -= self.speedif keys[pygame.K_RIGHT]:self.rect.x += self.speed# 限制飞机在窗口范围内移动if self.rect.x < 0:self.rect.x = 0if self.rect.x > WINDOW_WIDTH - 50:self.rect.x = WINDOW_WIDTH - 50def shoot(self):bullet = Bullet(self.rect.x + 23, self.rect.y)all_sprites.add(bullet)bullets.add(bullet)# 子弹类
class Bullet(pygame.sprite.Sprite):def __init__(self, x, y):super().__init__()self.image = pygame.Surface([5, 10])  # 子弹的形状self.image.fill(WHITE)self.rect = self.image.get_rect()self.rect.x = xself.rect.y = yself.speed = 10def update(self):self.rect.y -= self.speedif self.rect.y < -10:self.kill()# 敌人类
class Enemy(pygame.sprite.Sprite):def __init__(self):super().__init__()self.image = pygame.Surface([30, 30])  # 敌人的形状self.image.fill(WHITE)self.rect = self.image.get_rect()self.rect.x = random.randint(0, WINDOW_WIDTH - 30)self.rect.y = 0self.speed = random.randint(1, 5)def update(self):self.rect.y += self.speedif self.rect.y > WINDOW_HEIGHT:self.rect.x = random.randint(0, WINDOW_WIDTH - 30)self.rect.y = 0self.speed = random.randint(1, 5)# 创建精灵组
all_sprites = pygame.sprite.Group()# 创建飞机对象
player = Plane()
all_sprites.add(player)# 创建子弹精灵组
bullets = pygame.sprite.Group()# 创建敌人精灵组
enemies = pygame.sprite.Group()
for _ in range(10):enemy = Enemy()all_sprites.add(enemy)enemies.add(enemy)# 游戏主循环
running = True
while running:# 处理事件for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseelif event.type == pygame.KEYDOWN:if event.key == pygame.K_SPACE:player.shoot()# 更新所有精灵all_sprites.update()# 检测碰撞if pygame.sprite.spritecollide(player, enemies, True):running = Falsefor bullet in bullets:pygame.sprite.spritecollide(bullet, enemies, True)# 绘制背景window.fill(BLACK)# 绘制所有精灵all_sprites.draw(window)# 刷新屏幕pygame.display.flip()# 控制帧率clock.tick(60)# 退出游戏
pygame.quit()

http://www.ppmy.cn/devtools/144236.html

相关文章

电商数据增长背后的驱动力:API接口技术解析

在数字化浪潮席卷全球的今天&#xff0c;电商行业作为数字经济的重要组成部分&#xff0c;正以前所未有的速度蓬勃发展。电商数据的迅猛增长&#xff0c;不仅反映了消费者购物习惯的变化&#xff0c;也揭示了背后强大的技术驱动力。其中&#xff0c;API&#xff08;Application…

Flutter 多个弹窗关闭指定弹窗

前言 大家都知道Flutter的页面是堆栈式管理&#xff0c;通常关闭页面是最后进入的最先关闭&#xff0c;通过pop进行一个退栈操作。 但是我碰到一个问题&#xff0c;有时需要在同一页面上显示多个弹窗。如果此时需要关闭指定的某一个弹窗&#xff0c;那退栈操作明显不合适了&a…

Java 和 J2EE 有什么不同?

Java 和 J2EE 有什么不同&#xff1f; 一. Java的理解二. 什么是 J2EE三. Java 和 J2EE 的主要区别四. 结论 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 Java 和 J2EE&#xff…

SpringBoot+Vue3实现阿里云视频点播 实现教育网站 在上面上传对应的视频,用户开会员以后才能查看视频

要使用阿里云视频点播&#xff08;VOD&#xff09;实现一个教育网站&#xff0c;其中用户需要成为会员后才能查看视频&#xff0c;这个过程包括上传视频、设置权限控制、构建前端播放页面以及确保只有付费会员可以访问视频内容。 1. 视频上传与管理 创建阿里云账号&#xff…

【k8s】在ingress-controlller中Admission Webhook 的作用

介绍1 在 NGINX Ingress Controller 中&#xff0c;Admission Webhook 是一种用于增强 Kubernetes API 请求的机制&#xff0c;它允许你在资源&#xff08;如 Ingress&#xff09;被创建或更新之前对这些请求进行验证或修改。具体来说&#xff0c;Admission Webhook 在 NGINX I…

MapBox实现深蓝色科技风格底图方案

先来简单看一下效果: 当然你也可以根据自己的喜好去调整颜色: 而且我亲自测试不会影响其他的图层效果。 因为mapbox到目前为止的3.8.0版本不像openlayers那样能够灵活的操作图层。因此在mapbox中通过修改天地图去改变其底图色彩样式就变得比较困难。 我们都知道(不知道 的…

在 Ubuntu 下通过 Docker 部署 MariaDB 服务器

MariaDB 是 MySQL 的一个分支&#xff0c;旨在保持开源和社区驱动&#xff0c;提供高性能和稳定性。它被广泛应用于各种类型的应用程序&#xff0c;特别是在需要高可用性和可扩展性的环境中。Docker 是一个流行的容器化平台&#xff0c;允许开发者将应用及其依赖打包为容器&…

git重新提交方法

提交了几笔代码&#xff0c;修改之前某一笔的方法。 方法一&#xff1a; &#xff08;本地需是最新版本&#xff0c;如果有提交未合&#xff0c;可以reset后再pull&#xff09; 1.要修改的gerrit链接-右上角-download patch-复制cherry pick命令-as或项目中执行 2.修改代码 3.…