Python——飞机大战

server/2024/11/18 16:34:41/

以下是一个简单的用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/server/142953.html

相关文章

C# 如何动态加载程序集

程序集的加载&#xff0c;默认是从当前目录下查找&#xff0c;如果当前目录查找不到&#xff0c;然后再去系统目录中查找&#xff0c;依然查找不到就会从环境变量中查找&#xff0c;如果依然找不到&#xff0c;则会抛出一个异常 FileNotFoundException。 托管代码中&#xff0…

3356. 零数组变换 Ⅱ

3356、[中等] 零数组变换 Ⅱ 1、题目描述 给你一个长度为 n 的整数数组 nums 和一个二维数组 queries&#xff0c;其中 queries[i] [li, ri, vali]。 每个 queries[i] 表示在 nums 上执行以下操作&#xff1a; 将 nums 中 [li, ri] 范围内的每个下标对应元素的值 最多 减少…

解决Anaconda出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url

解决Anaconda出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url 第一类情况 在anaconda创建新环境时&#xff0c;使用如下代码 conda create -n charts python3.7 错误原因&#xff1a; 默认镜像源访问速度过慢&#xff0c;会导致超时从而导致更新和下载失败。 解决方…

基于Java的小区家政服务预约平台

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

初识Linux · 信号处理

目录 前言&#xff1a; 捕捉信号 再谈地址空间 谈谈键盘输入数据 理解OS正常的运行 理解系统调用 OS如何运行的 前言&#xff1a; 按照信号学习的时间戳&#xff0c;从信号的预备知识&#xff0c;到信号的产生&#xff0c;到了信号的保存&#xff0c;终于&#xff0c;我…

基于机器学习的虚拟传感器用于门开启检测和异常检测

论文标题&#xff1a;Virtual sensor for door opening detection and anomaly detection using machine learning&#xff08;基于机器学习的虚拟传感器用于门开启检测和异常检测&#xff09; 作者信息&#xff1a; Almir Neto&#xff0c;来自巴西马拉尼昂联邦教育、科学与…

ssm115乐购游戏商城系统+vue(论文+源码)_kaic

毕业设计&#xff08;论文&#xff09; 乐购游戏商城系统 学 院 专 业 班 级 学 号 用户姓名 指导教师 完成日期 …

Leetcode 3357. Minimize the Maximum Adjacent Element Difference

Leetcode 3357. Minimize the Maximum Adjacent Element Difference 1. 解题思路2. 代码实现 题目链接&#xff1a;3357. Minimize the Maximum Adjacent Element Difference 1. 解题思路 这一题思路上和题目3356相似&#xff0c;同样是一个二分查找的题目&#xff0c;我们定…