Python——飞机大战

ops/2024/11/16 21:49:01/

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

相关文章

Springboot 整合 itext 实现PDF文件合并,识别图片则转成PDF拼接

目录 前言一、引用依赖二、使用步骤1.Controller2.Service接口3.实现类三、请求接口及结果前言 本文实现 Springboot 整合 itext 实现PDF文件合并,图片转PDF拼接。 一、引用依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itext7-co…

十:详解HTTP的请求行

在HTTP通信中,请求行(Request Line)是HTTP请求的开头部分,位于请求头(Request Headers)之前,包含了请求的核心信息。请求行主要由请求方法(Method)、请求目标(Target,即请求的URI)、协议版本(HTTP Version)三个要素组成。这些要素共同定义了客户端请求服务器资源…

从华为到创业公司

我有一个朋友&#xff0c;在华为工作了很长一段时间&#xff0c;一年多前&#xff0c;他从华为出来到了一家创业公司。 周末趁着有时间&#xff0c;我跟他聊了下关于从华为到创业公司的一些问题&#xff0c;总结给大伙看看。 ▎1 在华为工作和在创业公司工作最大的差别是什么呢…

读书笔记:《Redis设计与实现》之发布订阅

发布与订阅简介 命令 SUBSCRIBE: 订阅一个频道 SUBSCRIBE channel [channel ...]SUBSCRIBE: 向一个频道发送信息 PUBLISH channel messageUNSUBSCRIBE: 取消订阅一个频道 UNSUBSCRIBE [channel [channel ...]]PSUBSCRIBE:订阅一个或多给定模式的频道 PSUBSCRIBE pattern …

【机器学习】机器学习中用到的高等数学知识-5. 函数空间和泛函分析 (Functional Analysis)

函数的连续性和可微性&#xff1a;在评估模型的学习能力和泛化能力时非常重要。希尔伯特空间和巴拿赫空间&#xff1a;在支持向量机&#xff08;SVM&#xff09;和神经网络中用于理解高维数据。 1. 函数的连续性和可微性 函数的 连续性 和 可微性 是分析和优化模型的重要数学…

【EasyExcel等比例缩小导出图片】

EasyExcel等比例缩小导出图片 一、背景二、思路三、代码 一、背景 使用EasyExcel导出excel文件&#xff0c;但是需要同时导出图片信息&#xff0c;且图片信息不能影响行高和单元格宽度&#xff0c;图片本身被导出时&#xff0c;不能因为压缩导致图片变形 二、思路 使用EasyE…

关于在Reverse函数中不能使用L=s而是*L=*s的原因分析

完整代码地址&#xff1a; https://blog.csdn.net/2301_76819732/article/details/143807340?spm1001.2014.3001.5502 如果使用Ls; 的话&#xff0c;当输出结果时&#xff0c;会发现内容为空。 我感到很奇怪&#xff0c;按照我的设想&#xff0c;Ls;会把s指向的地址赋给L。 但…

1.两数之和-力扣(LeetCode)

题目&#xff1a; 解题思路&#xff1a; 在解决这个问题之前&#xff0c;首先要明确两个点&#xff1a; 1、参数returnSize的含义是返回答案的大小&#xff08;数目&#xff09;&#xff0c;由于这里的需求是寻找数组中符合条件的两个数&#xff0c;那么当找到这两个数时&#…