百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

记忆中的Python小游戏-《飞机大战》

csdh11 2024-12-12 11:20 25 浏览

#头条创作挑战赛#

飞机大战是一款经典的游戏,玩家控制一个小飞机,击败敌机和boss飞机来获取高分。下面是一个使用Python语言实现的简单飞机大战游戏的代码示例:


import pygame

import random
# 初始化 pygame

pygame.init()
# 设置游戏窗口大小

screen_width = 480

screen_height = 700

screen = pygame.display.set_mode((screen_width, screen_height))
# 设置游戏标题

pygame.display.set_caption("飞机大战")
# 加载背景图片

background = pygame.image.load('background.png')
# 加载玩家飞机图片

player_img=pygame.image.load('player.png')

player_rect=player_img.get_rect()

player_rect.midbottom = (screen_width / 2, screen_height - 10)
# 加载敌机图片

enemy_img = pygame.image.load('enemy.png')
# 加载boss飞机图片

boss_img = pygame.image.load('boss.png')
# 设置玩家飞机的移动速度

player_speed = 5
# 创建敌机列表

enemies = []enemy_speed = 2
# 创建boss飞机

boss = Noneboss_speed = 1
# 创建子弹列表

bullets = []bullet_speed = 5
# 设置游戏帧率

clock = pygame.time.Clock()frame_rate = 60
# 设置游戏得分和生命值

score = 0life = 3
# 设置字体

font = pygame.font.Font(None, 36)
# 循环更新游戏状态

running = Truewhile running:

# 设置帧率 clock.tick(frame_rate)
# 处理事件

for event in pygame.event.get():

if event.type == pygame.QUIT:

running = False
# 移动玩家飞机

keys = pygame.key.get_pressed()

if keys[pygame.K_LEFT]:

player_rect.x -= player_speed

if keys[pygame.K_RIGHT]:

player_rect.x += player_speed

if keys[pygame.K_UP]:

player_rect.y -= player_speed

if keys[pygame.K_DOWN]:

player_rect.y += player_speed
# 碰撞检测

for enemy in enemies:

if enemy.colliderect(player_rect):

enemies.remove(enemy) life -= 1
if boss and player_rect.colliderect(boss):

life -= 1
for bullet in bullets:

if boss and bullet.colliderect(boss):

bullets.remove(bullet) score += 10
for bullet in bullets:

for enemy in enemies:

if bullet.colliderect(enemy):

bullets.remove(bullet)

enemies.remove(enemy)

score += 1
# 生成敌机

if len(enemies) < 5:

enemy = enemy_img.get_rect()

enemy.x=random.randint(0,screen_width- enemy.width)

enemy.y = random.randint(-50, -10)

enemies.append(enemy)
# 移动敌机

for enemy in enemies:

enemy.y += enemy_speed
# 生成boss飞机

if score >= 50 and not boss:

boss = boss_img.get_rect()

boss.midtop = (screen_width / 2, -100)
# 移动boss飞机

if boss:

if boss.y <= 0:

boss.y += boss_speed

else:

boss.x += random.choice([-1, 1])

if boss.left < 0 or boss.right > screen_width:

boss.x -= random.choice([-1, 1])
# 生成子弹

if keys[pygame.K_SPACE]:

bullet = pygame.Rect(player_rect.midtop[0], player_rect.midtop[1], 5, 10)

bullets.append(bullet)
# 移动子弹

for bullet in bullets:

bullet.y -= bullet_speed
# 绘制背景

screen.blit(background, (0, 0))
# 绘制玩家飞机

screen.blit(player_img, player_rect)
# 绘制敌机

for enemy in enemies: screen.blit(enemy_img, enemy)
# 绘制boss飞机

if boss: screen.blit(boss_img, boss)
# 绘制子弹

for bullet in bullets: pygame.draw.rect(screen, (255, 0, 0), bullet)
# 绘制得分和生命值

score_text = font.render("Score: " + str(score), True, (255, 255, 255))

screen.blit(score_text, (10, 10))

life_text = font.render("Life: " + str(life), True, (255, 255, 255))

screen.blit(life_text, (10, 50))
# 刷新屏幕

pygame.display.flip()
# 退出游戏

pygame.quit()


上述代码使用pygame库来实现飞机大战游戏,在游戏窗口中加载背景图片、玩家飞机、敌机和boss飞机的图片,并设置了一些游戏状态变量,如分数和生命值等。

游戏主循环中,首先处理玩家飞机的移动控制和碰撞检测,然后生成敌机和boss飞机,并移动它们。同时,判断是否按下空格键发射子弹,并移动子弹。最后,绘制游戏窗口中的各种元素,如背景、玩家飞机、敌机、boss飞机、子弹、得分和生命值等。










相关推荐

IDEA界面太丑??尝试一下这几个插件

前言IntelliJIDEA主要用于支持Java、Scala、Groovy等语言的开发工具,同时具备支持目前主流的技术和框架,擅长于企业应用、移动应用和Web应用的开发。IntelliJi...

小巧 Vue 页面滚动进度条组件ScrollProgress

今天给大家分享一个轻量级Vue.js全屏滚动进度条组件VueScrollProgress。vue-scroll-progress一款基于vue.js构建的页面滚动进度条组件,...

基于vue实现可视化拖拽编辑器,页面生成工具,提升前端开发效率

项目介绍基于vue实现的可视化拖拽编辑器,实现页面生成工具,提升前端开发效率。可以基层到移动端项目作为自定义json直接生成UI页面。项目特点功能特点...

优秀 vue+heyui 后端管理系统HeyUI-Admin

今天再给小伙伴们推荐一款成熟的企业中后台管理系统HEYUI-Admin。heyui-admin基于vue.js和heyui组件库构建的后台管理系统。包含基础表单/表格功能,拓展组件(图表、富文本编辑...

响应式 Vue.js 前端组件化框架Xvue-UI

今天给小伙伴们推荐一款超不错的Vue轻量级组件框架XVueUI。xvue-ui基于vue2.x构建的响应式前端组件化框架。轻量级、易于上手,提供...

《基于SpringBoot+Vue的在线视频系统设计与实现》开题报告

【计算机毕业设计案例】基于SpringBoot+Vue的在线视频系统设计与实现_哔哩哔哩_bilibili...

超好用 Vue.js 图片裁切组件Vue-ImgCutter

今天给小伙伴们分享一个超棒的Vue图片任意裁剪插件VueImgCutter。vue-img-cutter基于vue2.x构建的轻量级剪切图片组件。支持移动图像、放大缩小图片、任意移动图片、固定比...

Vue 3 进阶用法:异步组件(vue 异步组件原理)

一、代码分割一个大型前端应用,如果所有代码都放在单一文件,体积会特别大,下载时间长,白屏时间久,用户体验差。...

源码补丁神器—patch-package(源码助手怎么用)

作者:张浩一、背景vue项目中使用vue-pdf第三方插件预览pdf,书写业务代码完美运行,pdf文件内容正常预览无问题。后期需求有变,业务需求增加电子签章功能。这个时候pdf文件的内容可以显示出...

经验分享:Vue2 项目升级 Vue3 + Element Plus,借助Deepseek手动升级

Vue3出来好久了,我开发的项目还在使用Vue2框架,一般情况下不考虑升级,但是最近需要接入工作流程引擎之类的,看了下Vue2生态下操作空间不是很好,那索性尝试升级Vue3吧。一番操作下来,升级成功,...

34K Star!史上最全JavaScript资源库 awesome-javascript

34KStar!史上最全JavaScript资源宝库大揭秘引言在GitHub上,有一个备受瞩目的JavaScript资源仓库,以其全面的内容和精心的分类,成为了众多开发者的必备参考。这个拥有超过...

基于 Vue.js 磁片栅格布局组件VueGridLayout

#头条创作挑战赛#今天给大家分享一个超优秀的vue.js拖拽栅格布局插件VueGridLayout。...

6款高颜值 Vue3 PC端UI组件库(vue3开发组件库)

马上到国庆了,还没学习或者想学习vue3的小伙伴们有安排上没?这次推荐几个比较流行的VUE3UI组件库,合理利用,又或者学习借鉴都是不错的选择。1、element-pluselement-plus...

高性能 vue.js+ztree 树形组件Vue-GiantTree

今天给大家分享一款超棒的Vue海量数据渲染树形组件VueGiantTree。vue-giant-tree基于ztree封装的Vue树形组件。轻松实现大数据高性能渲染,适合海量数据渲染场景。zTr...

【推荐】2024年推荐的6款开源免费 Vue 后台管理系统模板,建议收藏

前言在现今的软件开发领域,...