当前位置: 首页 > news >正文

python飞机大战游戏.py

python飞机大战游戏.py

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.lryc.cn/news/506324.html

相关文章:

  • 【C++】14___String容器
  • 数据特性库 前言
  • jdk和cglib动态代理区别
  • 部署Mysql、镜像和容器、常见命令
  • 【数学】P2671 [NOIP2015 普及组] 求和
  • 【AI图像生成网站Golang】项目测试与优化
  • vue常用自定义指令
  • 以太网帧、IP数据报图解
  • 01.大模型起源与发展
  • leetcode刷题日记03——javascript
  • vue横向滚动日期选择器组件
  • 【大模型】大模型项目选择 RAGvs微调?
  • 2024年12月CCF-GESP编程能力等级认证Python编程一级真题解析
  • 【机器学习】元学习(Meta-learning)
  • 详解Redis的String类型及相关命令
  • android RadioButton + ViewPager+fragment
  • 给机器装上“脑子”—— 一文带你玩转机器学习
  • 论文笔记:是什么让多模态学习变得困难?
  • ChatGPT Search开放:实时多模态搜索新体验
  • Centos7.9 离线安装docker
  • C语言函数在调用过程中具体是怎么和栈互动的?
  • 【Java中常见的异常及其处理方式】
  • 如何更新项目中的 npm 或 Yarn 依赖包至最新版本
  • SpringBoot3整合FastJSON2如何配置configureMessageConverters
  • 《Vue3实战教程》2:Vue3快速上手
  • ubuntu 24.04.1安装FTP流程
  • 多功能护照阅读器港澳通行证阅读机RS232串口主动输出协议,支持和单片机/Linux对接使用
  • 5个用于构建Web应用程序的Go Web框架
  • Qt中的异步相关类
  • 浅谈仓颉语言的优劣