Python——飞机大战

devtools/2024/11/14 1:48:10/

以下是一个简单的用Python编写的飞机大战游戏的源代码:

python">import pygame
import random# 初始化游戏
pygame.init()# 设置游戏窗口的尺寸
screen_width = 480
screen_height = 640
screen = pygame.display.set_mode((screen_width, screen_height))# 设置游戏标题
pygame.display.set_caption("飞机大战")# 加载背景图片
background = pygame.image.load("background.png")# 加载玩家飞机图片
player_image = pygame.image.load("player.png")
player_rect = player_image.get_rect()
player_rect.topleft = ((screen_width - player_rect.width) // 2, screen_height - player_rect.height - 20)# 加载敌机图片
enemy_image = pygame.image.load("enemy.png")# 音效
bullet_sound = pygame.mixer.Sound("bullet.wav")
explosion_sound = pygame.mixer.Sound("explosion.wav")
pygame.mixer.music.load("background_music.mp3")
pygame.mixer.music.play(-1)# 设置游戏帧率
clock = pygame.time.Clock()# 玩家子弹列表
player_bullets = []# 敌机列表
enemies = []
enemy_frequency = 0# 设置游戏分数
score = 0
font = pygame.font.SysFont(None, 36)# 游戏结束标志
game_over = False# 游戏主循环
while not game_over:# 处理游戏事件for event in pygame.event.get():if event.type == pygame.QUIT:game_over = Trueif event.type == pygame.KEYDOWN:if event.key == pygame.K_SPACE:bullet_sound.play()player_bullet = pygame.Rect(player_rect.left + player_rect.width // 2 - 2, player_rect.top - 10, 4, 10)player_bullets.append(player_bullet)# 移动玩家飞机keys = pygame.key.get_pressed()if keys[pygame.K_LEFT] and player_rect.left > 0:player_rect.left -= 5if keys[pygame.K_RIGHT] and player_rect.right < screen_width:player_rect.left += 5if keys[pygame.K_UP] and player_rect.top > 0:player_rect.top -= 5if keys[pygame.K_DOWN] and player_rect.bottom < screen_height:player_rect.top += 5# 绘制游戏界面screen.blit(background, (0, 0))screen.blit(player_image, player_rect)# 绘制玩家子弹for bullet in player_bullets:bullet.top -= 10if bullet.top < -10:player_bullets.remove(bullet)pygame.draw.rect(screen, (255, 0, 0), bullet)# 生成敌机if enemy_frequency % 50 == 0:enemy_rect = enemy_image.get_rect()enemy_rect.topleft = (random.randint(0, screen_width - enemy_rect.width), -enemy_rect.height)enemies.append(enemy_rect)enemy_frequency += 1# 移动敌机for enemy in enemies:enemy.top += 5if enemy.top > screen_height:enemies.remove(enemy)# 检测子弹和敌机碰撞for bullet in player_bullets:for enemy in enemies:if bullet.colliderect(enemy):explosion_sound.play()enemies.remove(enemy)player_bullets.remove(bullet)score += 10# 绘制敌机for enemy in enemies:screen.blit(enemy_image, enemy)# 显示分数score_text = font.render("Score: " + str(score), True, (255, 255, 0))screen.blit(score_text, (10, 10))# 检测玩家飞机和敌机碰撞for enemy in enemies:if player_rect.colliderect(enemy):game_over = True# 更新游戏界面pygame.display.update()# 控制游戏帧率clock.tick(60)# 游戏结束,显示最终得分
game_over_text = font.render("Game Over! Your Score: " + str(score), True, (255, 0, 0))
screen.blit(game_over_text, (screen_width // 2 - 150, screen_height // 2))
pygame.display.update()# 延迟退出游戏
pygame.time.wait(2000)# 退出游戏
pygame.quit()

请注意,这只是一个简单的示例代码,游戏中可能还有许多不完善的地方。你可以根据自己的需求进行修改和优化。此外,你还需要准备飞机、背景、子弹、敌机的图像和音效文件,并将它们与代码放在同一目录下。然后,你可以使用Python解释器来运行代码并开始游戏。


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

相关文章

516.最长回文子序列

刷算法题&#xff1a; 第一遍&#xff1a;1.看5分钟&#xff0c;没思路看题解 2.通过题解改进自己的解法&#xff0c;并且要写每行的注释以及自己的思路。 3.思考自己做到了题解的哪一步&#xff0c;下次怎么才能做对(总结方法) 4.整理到自己的自媒体平台。 5.再刷重复的类…

HTTP常见的请求头有哪些?都有什么作用?在 Web 应用中使用这些请求头?

HTTP 请求头&#xff08;Request Headers&#xff09;用于在 HTTP 请求中携带额外的信息&#xff0c;帮助服务器更好地处理请求。以下是一些常见的 HTTP 请求头及其作用&#xff1a; 常见请求头及其作用 1. Accept 作用&#xff1a;告知服务器客户端可以接受的内容类型。示例…

Java设计模式面试题及参考答案

目录 什么是单例模式?它的应用场景是什么?如何保证单例模式线程安全? 什么是工厂方法模式?如何与简单工厂模式进行比较? 抽象工厂模式和工厂方法模式有什么区别?请给出实际应用场景。 什么是建造者模式?它和工厂模式有什么不同? 解释原型模式及其应用。如何通过克隆…

【轻量化】YOLOv8 更换骨干网络之 MobileNetv4 | 模块化加法!非 timm 包!

之前咱们在这个文章中讲了timm包的加法,不少同学反馈要模块化的加法,那么这篇就讲解下模块化的加法,值得注意的是,这样改加载不了mobilebnetv4官方开源的权重了~ 论文地址:https://arxiv.org/pdf/2404.10518 代码地址:https://github.com/tensorflow/models/blob/master…

如何利用AI技术在电商平台中做购物推荐?

数据收集与整合 用户行为数据&#xff1a;收集用户在电商平台上的各种行为数据&#xff0c;包括浏览历史&#xff08;用户浏览了哪些商品页面、停留时间长短等&#xff09;、购买历史&#xff08;购买过的商品类别、品牌、价格等&#xff09;、收藏夹内容、加入购物车但未购买的…

Python数据分析NumPy和pandas(二十七、数据可视化 matplotlib API 入门)

数据可视化或者数据绘图是数据分析中最重要的任务之一&#xff0c;是数据探索过程的一部分&#xff0c;数据可视化可以帮助我们识别异常值、识别出需要的数据转换以及为模型生成提供思考依据。对于Web开发人员&#xff0c;构建基于Web的数据可视化显示也是一种重要的方式。Pyth…

【go从零单排】通道select、通道timeout、Non-Blocking Channel Operations非阻塞通道操作

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 select 语句是 Go 的一种控制结构&#xff0c;用于等待多个通道操作。它类似于 s…

vue3实现一个无缝衔接、滚动平滑的列表自动滚屏效果,支持鼠标移入停止移出滚动

文章目录 前言一、滚动元素相关属性回顾一、实现分析二、代码实现示例&#xff1a;2、继续添加功能&#xff0c;增加鼠标移入停止滚动、移出继续滚动效果2、继续完善 前言 列表自动滚屏效果常见于大屏开发场景中&#xff0c;本文将讲解用vue3实现一个无缝衔接、滚动平滑的列表自…