pygame飞机大战
飞机大战
- 1.main类
- 2.配置类
- 3.游戏主类
- 4.游戏资源类
- 5.资源下载
- 6.游戏效果
1.main类
启动游戏。
from MainWindow import MainWindow
if __name__ == '__main__':app=MainWindow()app.run()
2.配置类
该类主要存放游戏的各种设置参数。
#窗口尺寸
#窗口尺寸
import random
import pygame
WINDOW=pygame.Rect(0,0,512,768)
#窗口名字
WINDOW_NAME="飞机大战v1.0"#地图索引
MAP_INDEX=random.randint(1,5)#英雄子弹类型
HERO_BULLET_INDEX=1
#敌人子弹类型
ENEMY_BULLET_INDEX=3#敌机事件
ENEMY_EVENT=pygame.USEREVENT#pygame用户事件(整型),有多个事件可以在后面+1以区分#英雄子弹事件
BULLET_EVENT=pygame.USEREVENT+1#+1区分事件
#敌机子弹事件
BULLET_ENEMY_EVENT=pygame.USEREVENT+2#+2区分事件#英雄移动速度
HERO_MOVE_SPEED=4
#英雄子弹移动速度
HERO_BULLET_MOVE_SPEED=4
#英雄生命值
HERO_HP=10
3.游戏主类
游戏主类主要由游戏窗口创建、精灵和精灵组的创建、游戏启动函数(1.碰撞检测、2.事件处理、3.精灵组更新、4.窗口刷新)等构成。
import pygame
from Config import *
from GameSprite import *
class MainWindow:def __init__(self):pygame.init()#游戏窗口初始化self.window=pygame.display.set_mode([WINDOW.width,WINDOW.height])pygame.display.set_caption(WINDOW_NAME)#背景音乐pygame.mixer.music.load("./source/music/bg.wav")pygame.mixer.music.set_volume(0.1)pygame.mixer.music.play(-1)#爆炸音效self.bomb=pygame.mixer.Sound("./source/music/bomb.wav")self.bomb.set_volume(0.2)#游戏分数self.score=0self.hp=HERO_HPself.pause_flag = False # 暂停标志#FPS时钟self.clock=pygame.time.Clock()#激活敌机定时器,参数:事件、间隔时间mspygame.time.set_timer(ENEMY_EVENT,500)# 激活英雄子弹定时器,参数:事件、间隔时间mspygame.time.set_timer(BULLET_EVENT,500)pygame.time.set_timer(BULLET_ENEMY_EVENT,2000)#创建精灵组self.create_sprite_group()#精灵组创建def create_sprite_group(self):#地图精灵组map1=GameMap()map2=GameMap(True)self.map_group=pygame.sprite.Group(map1,map2)#英雄精灵self.hero=Hero()self.hero_group=pygame.sprite.Group(self.hero)#敌机精灵组self.enemy_group=pygame.sprite.Group()#英雄子弹精灵组self.bullet_group=pygame.sprite.Group()#敌机子弹精灵组self.bullet_enemy_group=pygame.sprite.Group()#爆炸动画精灵组self.bomb_group=pygame.sprite.Group()# 菜单精灵组self.resume_nor = Menu("./source/resume_nor.png") # 正在暂停按钮图标self.pause_nor = Menu("./source/pause_nor.png") # 正在运行图标self.restart = Menu("./source/again.png") # 重新开始图标self.menu_group = pygame.sprite.Group()# 显示精灵组self.show_group = pygame.sprite.Group()# 碰撞检测def collie_check(self):#1.英雄子弹与敌机for bullet1 in self.bullet_group:#第一个参数是精灵、第二个参数是精灵组、第三个参数为是否删除与该精灵碰撞的所有精灵;返回值为与第一个参数碰撞的所有精灵列表eys=pygame.sprite.spritecollide(bullet1,self.enemy_group,True)#判断子弹精灵是否与敌机精灵组有碰撞,有则杀死所有敌机#表示有碰撞if len(eys)>0:self.bomb.play()#发生碰撞,播放爆炸音效self.score+=1#记录杀死的敌机数量bullet1.kill()#杀死发生碰撞的子弹精灵bomb_enemy=Bomb(eys[0])#将发生碰撞的敌传入爆炸类,方便使用爆炸的具体位置self.bomb_group.add(bomb_enemy)#加入爆炸精灵组#2.敌机子弹与英雄bullet2=pygame.sprite.spritecollide(self.hero,self.bullet_enemy_group,True)if len(bullet2)>0:self.bomb.play()#发生碰撞,播放爆炸音效self.hp-=1#英雄与敌机子弹接触,自身HP值-1#敌机与英雄enemys=pygame.sprite.spritecollide(self.hero,self.enemy_group,True)if len(enemys)>0:self.bomb.play()#发生碰撞,播放爆炸音效self.hp-=1#英雄与敌机接触,自身HP值-1bomb_enemy2 = Bomb(enemys[0])#将发生碰撞的敌传入爆炸类,方便使用爆炸的具体位置self.bomb_group.add(bomb_enemy2)#加入爆炸精灵组# 英雄生命值为0,暂停游戏,并且显示重新开始if self.hp <0:self.hero.kill()self.enemy_group.empty()self.bullet_group.empty()self.bullet_enemy_group.empty()self.pause_flag = Trueself.restart.rect.centerx = self.window.get_rect().centerxself.restart.rect.centery = self.window.get_rect().centeryself.menu_group.add(self.restart)# 更新精灵组位置并绘制def sprite_group_update_draw(self):#地图精灵组更新self.map_group.update()self.map_group.draw(self.window)#英雄精灵组更新self.hero_group.update()self.hero_group.draw(self.window)#敌机精灵组更新self.enemy_group.update()self.enemy_group.draw(self.window)#英雄子弹精灵组self.bullet_group.update()self.bullet_group.draw(self.window)#敌机子弹精灵组self.bullet_enemy_group.update()self.bullet_enemy_group.draw(self.window)#爆炸精灵组self.bomb_group.update()self.bomb_group.draw(self.window)# 菜单类精灵组self.menu_group.update()self.menu_group.draw(self.window)# 显示信息self.show_group.update()self.show_group.draw(self.window)#绘制数据 #游戏数据# 显示游戏信息self.score1 = Show("得分", self.score)self.score1.rect.x = 80self.score1.rect.y = 0self.hp1 = Show("生命值", self.hp)self.hp1.rect.x = 200self.hp1.rect.y = 0self.show_group.empty()self.show_group.add(self.score1, self.hp1)# 事件处理def handle_events(self):#pygame.event.get()获取当前时间帧的所有事件,返回一个事件列表,可以对此列表遍历for event in pygame.event.get():if event.type==pygame.QUIT:pygame.quit()exit()#用户事件1,固定时间生成敌机(时间可以在窗口初始化代码中修改)if event.type==pygame.USEREVENT:self.enemy=Enemy()self.enemy_group.add(self.enemy)#用户事件2,固定时间生成敌机子弹(时间可以在窗口初始化代码中修改)if event.type==pygame.USEREVENT+2:#固定时间生成敌机子弹,需要遍历敌机精灵组,获取所有已经存在的敌机精灵,在对应的位置上绘制敌机子弹for enemy_sprite in self.enemy_group:self.bullet_enemy = Bullet(enemy_sprite.speed + 1,True)self.bullet_enemy.rect.centerx = enemy_sprite.rect.centerxself.bullet_enemy.rect.y =enemy_sprite.rect.bottom#将敌机子弹精灵添加到敌机子弹精灵组self.bullet_enemy_group.add(self.bullet_enemy)#用户事件3,固定时间生成英雄子弹(时间可以在窗口初始化代码中修改)if event.type==pygame.USEREVENT+1:self.bullet_hero=Bullet(-HERO_BULLET_MOVE_SPEED)#英雄子弹飞行方向与敌机子弹飞行方向相反#根据英雄的当前位置来设置英雄子弹的位置self.bullet_hero.rect.centerx=self.hero.rect.centerxself.bullet_hero.rect.y=self.hero.rect.y-self.bullet_hero.rect.height# 将英雄飞机子弹精灵添加到英雄子弹精灵组self.bullet_group.add(self.bullet_hero)# 按下ESC切换暂停if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:self.pause_flag = not self.pause_flag # 切换暂停状态# 鼠标点击切换暂停if event.type == pygame.MOUSEBUTTONDOWN and event.button == pygame.BUTTON_LEFT:if self.pause_nor.rect.collidepoint(event.pos):self.pause_flag = not self.pause_flag#pygame.key.get_pressed()获取当前时间帧的所有键盘事件并返回一个列表,遍历列表控制英雄上下左右移动keys_event=pygame.key.get_pressed()if keys_event[pygame.K_a] or keys_event[pygame.K_LEFT]:self.hero.x_speed=-HERO_MOVE_SPEEDelif keys_event[pygame.K_d] or keys_event[pygame.K_RIGHT]:self.hero.x_speed=HERO_MOVE_SPEEDelse:self.hero.x_speed = 0if keys_event[pygame.K_w] or keys_event[pygame.K_UP]:self.hero.y_speed=-HERO_MOVE_SPEEDelif keys_event[pygame.K_s] or keys_event[pygame.K_DOWN]:self.hero.y_speed=HERO_MOVE_SPEEDelse:self.hero.y_speed=0# 暂停状态下if self.pause_flag:if self.pause_nor in self.menu_group:self.menu_group.remove(self.pause_nor) # 将运行图标的精灵移除self.menu_group.add(self.resume_nor)pygame.mixer.music.pause()#暂停背景音乐# 非暂停状态else:if self.resume_nor in self.menu_group:self.menu_group.remove(self.resume_nor) # 将暂停图标的精灵移除self.menu_group.add(self.pause_nor)pygame.mixer.music.unpause()# 显示游戏信息self.score1 = Show("得分", self.score)self.score1.rect.x = 80self.score1.rect.y = 0self.hp1 = Show("生命值", self.hp)self.hp1.rect.x = 200self.hp1.rect.y = 0self.show_group.empty()self.show_group.add(self.score1, self.hp1)#游戏主框架def run(self):pygame.init()while True:#暂停状态while self.pause_flag:self.clock.tick(60)for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()exit()# 按下ESC暂停if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:self.pause_flag = not self.pause_flag # 切换暂停状态# 鼠标点击切换暂停if event.type == pygame.MOUSEBUTTONDOWN and event.button == pygame.BUTTON_LEFT:if self.pause_nor.rect.collidepoint(event.pos):self.pause_flag = not self.pause_flag# 当英雄死亡之后,点击重新开始if event.type == pygame.MOUSEBUTTONDOWN and event.button == pygame.BUTTON_LEFT:pos = pygame.mouse.get_pos()# 如果英雄死亡了,点击重新开始if self.hp < 0 and self.restart.rect.collidepoint(pos):self.menu_group.remove(self.restart)self.score = 0self.hero_group.add(self.hero)self.hp = HERO_HPself.pause_flag = False# 切换到非暂停状态if not self.pause_flag:break#正常运行while not self.pause_flag:self.clock.tick(60) # FPS#碰撞检测self.collie_check()# 事件处理self.handle_events()#更新精灵组self.sprite_group_update_draw()# 窗口刷新pygame.display.update()# 切换到暂停状态if self.pause_flag:break
4.游戏资源类
游戏资源类主要包括各种游戏相关元素精灵、主要有基础精灵类、敌机精灵类、子弹精灵类、英雄飞机精灵类、爆炸动画精灵类等。
import pygame
from Config import *
import random
#精灵类————基类,定义了基本的导入图片操作,以及图片垂直移动操作
class GameSprite(pygame.sprite.Sprite):def __init__(self,image_url,speed=0):super().__init__()self.image=pygame.image.load(image_url)self.rect=self.image.get_rect()self.speed=speeddef update(self, *args, **kwargs):self.rect.y+=self.speed
#游戏地图类,地图由两张完全一样的图片拼接构成,其中两张图片的起始和末尾要无缝衔接
#第一张图片起始位置与窗口完全重合,第二张图片的起始位置在第一张图片的上方
class GameMap(GameSprite):#is_1表示是否是第二张图片def __init__(self,is_1=False):#地图给了5张,保证地图索引在1~5,否则随机给一个1~5self.map_index=MAP_INDEX if 1<=MAP_INDEX<=5 else random.randint(1,5)map_filename=f"./source/map/map-{self.map_index}.jpg"super().__init__(map_filename,2)if is_1:self.rect.y=-WINDOW.height#第二张图片的起始位置在第一张图片的上方def update(self):#更新图像的位置super().update()#如果地图图片完全运动到了窗口最下方,就将这张图片的位置移动到窗口的最上方,作为新的起始位置if self.rect.y>=WINDOW.height:self.rect.y=-WINDOW.height
#英雄飞机类,初始化定义比较简单
class Hero(GameSprite):def __init__(self):super().__init__("./source/plane/hero.png")#定义英雄飞机出生在窗口中的具体位置self.rect.centerx=WINDOW.centerxself.rect.y=WINDOW.height-120#初始移动速度为0,静止状态self.x_speed=0self.y_speed=0def update(self, *args, **kwargs):#水平方向移动self.rect.x+=self.x_speed#垂直方向移动self.rect.y+=self.y_speed#判断上、下、左、右四个边界条件,如果移动到了边界,让飞机停在原位if self.rect.x<=0:self.rect.x=0if self.rect.x>=WINDOW.width-self.rect.width:self.rect.x=WINDOW.width-self.rect.widthif self.rect.y<=0:self.rect.y=0if self.rect.y>=WINDOW.height-self.rect.height:self.rect.y=WINDOW.height-self.rect.height
#敌机类
class Enemy(GameSprite):def __init__(self):#敌机有7中飞机,随机生成self.enemy_url=f"./source/plane/enemy-{random.randint(1,7)}.png"#敌机的垂直速度也是随机生成(1,3)super().__init__(self.enemy_url,random.randint(1,3))#敌机的初始水平位置需要随机生成,范围就是(0,WINDOW.width-self.rect.width)self.rect.x=random.randint(0,WINDOW.width-self.rect.width)#敌机的垂直位置y是固定值,保证敌机出现的位置在窗口之外self.rect.y=-self.rect.height#敌机水平方向的移动速度随机生成self.x_speed=random.randint(-1,1)def update(self, *args, **kwargs):#调用父类的update()函数super().update()#父类函数不够用的情况下,直接补充self.rect.x+=self.x_speed#水平移动#如果到达左右边界则反向运动if self.rect.x<=0 or self.rect.x>=WINDOW.width-self.rect.width:self.x_speed=-self.x_speed#敌机出了窗口底部则杀死此敌机精灵if self.rect.y>WINDOW.height:self.kill()
#子弹类(英雄飞机子弹和敌机子弹)
class Bullet(GameSprite):#is_enemy表示是否是敌机,敌机和英雄飞机使用的子弹图片不同def __init__(self,speed,is_enemy=False):if is_enemy:self.bullet_index=ENEMY_BULLET_INDEXelse:self.bullet_index = HERO_BULLET_INDEXbullet_filename = f"./source/bullet/bullet_{self.bullet_index}.png"self.speed=speedsuper().__init__(bullet_filename,self.speed)#由于敌机和英雄飞机是相对运动,资源图片都是正向的,所以如果是敌机子弹,则需要对子弹图片做旋转180°操作if is_enemy:##flip(翻转的图片、是否绕x轴翻转、是否绕y轴翻转)self.image=pygame.transform.flip(self.image,False,True)def update(self, *args, **kwargs):#垂直方向移动super().update()#超出屏幕则杀死此精灵if self.rect.y<-self.rect.height or self.rect.y>WINDOW.height+self.rect.height:self.kill()
#爆炸动画类
class Bomb(pygame.sprite.Sprite):def __init__(self,sprite1):super().__init__()#导入所有动画的图片self.images=[pygame.image.load(f"./source/bomb/bomb-{bomb_index}.png") for bomb_index in range(1,8)]self.sprite1=sprite1self.interval = 5 # 播放每一张图片的间隔 5帧self.interval_index = 0 #帧数计数器 初始值为0self.image_index=0#图片索引 初始值为0self.image = self.images[self.image_index]self.rect = self.image.get_rect()self.rect.x = self.sprite1.rect.xself.rect.y = self.sprite1.rect.ydef update(self, *args, **kwargs):self.interval_index+=1#每一帧进入update()函数,帧计数器加1#当计数器到达设置值时,切换图片if self.interval_index>=self.interval:self.image=self.images[self.image_index]#帧计数器归零self.interval_index=0#切换图片self.image_index+=1#当所有图片都播放完毕之后杀死此精灵对象if self.image_index==len(self.images):self.kill()
#菜单类,显示控制游戏的暂停、恢复游戏、重新开始游戏
class Menu(GameSprite):def __init__(self,image_url):super().__init__(image_url)def update(self, *args, **kwargs):pass
#显示游戏相关信息类,可以显示游戏中得分、英雄生命值等
class Show(pygame.sprite.Sprite):def __init__(self,name,var):super().__init__()pygame.font.init()font1 = pygame.font.SysFont('华文宋体', 25) # 加载系统自带字体text = f"{name}:{var}" # 编辑文本text = font1.render(text, True, (255, 255, 0)) # 渲染字体,(字符串,抗锯齿,字体颜色,背景颜色)self.image=textself.rect=self.image.get_rect()
5.资源下载
链接:资源
提取码:9mje
6.游戏效果
相关文章:

pygame飞机大战
飞机大战 1.main类2.配置类3.游戏主类4.游戏资源类5.资源下载6.游戏效果 1.main类 启动游戏。 from MainWindow import MainWindow if __name__ __main__:appMainWindow()app.run()2.配置类 该类主要存放游戏的各种设置参数。 #窗口尺寸 #窗口尺寸 import random import p…...

【Vim Masterclass 笔记08】第 6 章:Vim 中的文本变换及替换操作 + S06L20:文本的插入、变更、替换,以及合并操作
文章目录 Section 6:Transforming and Substituting TextS06L21 Inserting, Changing, Replacing, and Joining1 定位到行首非空字符,并启用插入模式2 在紧挨光标的下一个字符位置启动插入模式3 定位到一行末尾,并启用插入模式4 定位到光标的…...
Tailwind CSS 实战:动画效果设计与实现
在现代网页设计中,动画效果就像是一位优秀的舞者,通过流畅的动作为用户带来愉悦的视觉体验。记得在一个产品展示网站项目中,我们通过添加精心设计的动画效果,让用户的平均停留时间提升了 35%。今天,我想和大家分享如何使用 Tailwind CSS 打造优雅的动画效果。 设计理念 设计动…...

【动手学电机驱动】STM32-MBD(3)Simulink 状态机模型的部署
STM32-MBD(1)安装 Simulink STM32 硬件支持包 STM32-MBD(2)Simulink 模型部署入门 STM32-MBD(3)Simulink 状态机模型的部署 【动手学电机驱动】STM32-MBD(3)Simulink 状态机模型部署…...
Linux 服务器启用 DNS 加密
DNS 加密的常用协议包括 DNS over HTTPS (DoH)、DNS over TLS (DoT) 和 DNSCrypt。以下是实现这些加密的步骤和工具建议: 1. 使用 DoH (DNS over HTTPS) 工具推荐: cloudflared(Cloudflare 提供的客户端)doh-client(…...
PyTorch不同优化器比较
常见优化器介绍 - SGD(随机梯度下降):是最基本的优化器之一,通过在每次迭代中沿着损失函数的负梯度方向更新模型参数。在大规模数据集上计算效率高,对于凸问题和简单模型效果较好。但收敛速度慢,容易陷入局…...

stm32的掉电检测机制——PVD
有时在一些应用中,我们需要检测系统是否掉电了,或者要在掉电的瞬间需要做一些处理。 STM32内部自带PVD功能,用于对MCU供电电压VDD进行监控。 STM32就有这样的掉电检测机制——PVD(Programmable Voltage Detecter),即可编程电压检…...

Nginx 文件名逻辑漏洞(CVE-2013-4547)
目录 漏洞原理 影响版本 漏洞复现 漏洞原理 CGI:是一种协议,定义了web服务器传递的数据格式。 FastCGI:优化版的CGI程序 PHP-CGI:PHP解释器,能够对PHP文件进行解析并返回相应的解析结果 PHP-FPM:Fas…...
Java 21 优雅和安全地处理 null
在 Java 21 中,判断 null 依然是开发中常见的需求。通过使用现代 Java 提供的工具和特性,可以更加优雅和安全地处理 null。 1. 使用 Objects.requireNonNull Objects.requireNonNull 是标准的工具方法,用于快速判断并抛出异常。 示例 import java.util.Objects;public c…...
AWS Glue基础知识
AWS Glue 是一项完全托管的 ETL(提取、转换、加载)服务,与考试相关,尤其是在数据集成、处理和分析方面。 1.数据集成和 ETL(提取、转换、加载) AWS Glue 主要用于构建 ETL 管道以准备数据以进行分析。作为…...

Kubernetes——part4-1 Kubernetes集群 服务暴露 Nginx Ingress Controller
Kubernetes集群 服务暴露 Nginx Ingress Controller 一、ingress控制器 1.1 ingress控制器作用 (类似于slb,做代理服务) ingress controller可以为kubernetes 集群外用户访问Kubernetes集群内部pod提供代理服务。 提供全局访问代理访问流程…...
Flutter入门,Flutter基础知识总结。
Flutter是Google推出的一种移动应用开发框架,它允许开发者使用一套代码库同时开发Android和iOS应用。以下是对Flutter知识点的详细总结: 一、Flutter概述 特点:跨平台、高保真、高性能。 编程语言:使用Dart语言编写。 设计理念&…...
weight decay 和L2是一个东西吗
weight decay和L2正则化本质上是相同的概念。 weight decay(权重衰减)和L2正则化在深度学习中都是用来防止模型过拟合的常用技术。它们通过对损失函数添加一个正则项来限制模型参数的大小,从而控制模型的复杂度。具体来说,L2正则…...
JavaScript系列(8)-- Array高级操作
JavaScript Array高级操作 📚 在前七篇文章中,我们探讨了JavaScript的语言特性、ECMAScript标准、引擎工作原理、数值类型、字符串处理、Symbol类型和Object高级特性。今天,让我们深入了解JavaScript中的Array高级操作。数组是最常用的数据结…...

Harmony开发【笔记1】报错解决(字段名写错了。。)
在利用axios从网络接收请求时,发现返回obj的code为“-1”,非常不解,利用console.log测试,更加不解,可知抛出错误是 “ E 其他错误: userName required”。但是我在测试时,它并没有体现为空,…...

MAC环境安装(卸载)软件
MAC环境安装(卸载)软件 jdknode安装node,并实现不同版本的切换背景 卸载node从node官网下载pkg安装的node卸载用 homebrew 安装的node如果你感觉删的不够干净,可以再细分删除验证删除结果 在macOS下创建home目录 jdk 1.下载jdk 先…...

【Vim Masterclass 笔记05】第 4 章:Vim 的帮助系统与同步练习(L14+L15+L16)
文章目录 Section 4:The Vim Help System(Vim 帮助系统)S04L14 Getting Help1 打开帮助系统2 退出帮助系统3 查看具体命令的帮助文档4 查看帮助文档中的主题5 帮助文档间的上翻、下翻6 关于 linewise7 查看光标所在术语名词的帮助文档8 关于退…...

Multisim更新:振幅调制器+解调器(含仿真程序+文档+原理图+PCB)
前言 继3年前设计的:Multisim:振幅调制器的设计(含仿真程序文档原理图PCB),有读者表示已经不能满足新需求,需要加上新的解调器功能😂😂😂,鸽了很久这里便安排…...
CentOS — 群组管理
文章目录 一、查看群组二、添加群组三、删除群组四、修改群组 Linux 系统中每个用户都属于一个特定的群组。 若不设置用户的群组,默认会创建一个和用户名一样的群组,并将用户分到该群组。 一、查看群组 groups 用户名:查看用户所属群组。 二…...

【pytorch】注意力机制-1
1 注意力提示 1.1 自主性的与非自主性的注意力提示 非自主性提示: 可以简单地使用参数化的全连接层,甚至是非参数化的最大汇聚层或平均汇聚层。 自主性提示 注意力机制与全连接层或汇聚层区别开来。在注意力机制的背景下,自主性提示被称为查…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...
HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散
前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为,…...

9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...