使用python的pygame做的小游戏项目:小船打鱼

news/2024/4/30 10:39:58/文章来源:https://blog.csdn.net/wlfyok/article/details/127028652

python小游戏项目:小船打鱼

  • 成果展示
  • 代码解析
    • go_fishing.py
    • game_function.py
    • game_stats.py
    • scoreboard.py
    • alien.py
    • settings.py
    • ship.py
    • bullet.py
    • button.py
  • 存在的问题

代码都在这里,只需要创建好项目,将对应的代码保存在对应文件名的文件中即可,由于图片不能在这里上传,读者自己随便下载一个,修改一下对应的代码的文件名就行。如果嫌拼接麻烦笔者就附上下载地址,直接下载即可链接
代码中如果不是源文件中已有的py文件导入调用,就需要在python中下载对应的包,比如pygame

游戏左上角表示玩家的生命数,中间的250是历史最高分,右边的两行数字分别表示当前得分和游戏的难度等级
游戏的操作方法:<-- --> 左右移动 space发射炮弹

文章的内容较长,读者可以更具目录跳转阅读
代码的具体意义在注释中

成果展示

在这里插入图片描述

代码解析

go_fishing.py

这是函数的主函数,集成其他文件让代码看起来简单易懂

import pygame
from pygame.sprite import Sprite
class Ship(Sprite):def __init__(self,al_settings,screen):# 初始化飞船并设置其初始位置super(Ship, self).__init__()self.screen = screenself.al_settings = al_settings# 加载飞船图像并获得外接矩形self.image = pygame.image.load('images/ship.png')self.image = pygame.transform.scale(self.image,(100,80))self.background = pygame.image.load("images/seaside.png")self.background = pygame.transform.scale(self.background, (al_settings.screen_width, al_settings.screen_height))self.rect = self.image.get_rect()self.screen_rect = screen.get_rect()# 将每艘飞船放在屏幕底部中央self.rect.centerx = self.screen_rect.centerxself.rect.bottom = self.screen_rect.bottom# 在飞船的属性center中存储小数值self.center = float(self.rect.centerx)# 移动标志self.moving_right = Falseself.moving_left = Falsedef update(self):# 根据移动标志调整飞船位置# 更新飞船的center值而不是rect的# 且限制飞船的活动范围if self.moving_right and self.rect.right < self.screen_rect.right:self.center += self.al_settings.ship_speed_factorif self.moving_left and self.rect.left > self.screen_rect.left:self.center -= self.al_settings.ship_speed_factorself.rect.centerx = self.centerdef blitme(self):# 在指定位置绘制飞船self.screen.blit(self.background, (0, 0))self.screen.blit(self.image,self.rect)def center_ship(self):# 让飞船在屏幕中居中self.center = self.screen_rect.centerx

game_function.py

游戏中所有操作的文件,用于管理游戏事务

import sys
import pygame
from bullet import Bullet
from alien import  Alien
from time import sleep
'''管理事件的代码将游戏和事件分开管理'''def check_keydown_events(event,al_settings,screen,ship,bullets):# 响应按键if event.key == pygame.K_RIGHT:ship.moving_right = Trueelif event.key == pygame.K_LEFT:ship.moving_left = Trueelif event.key == pygame.K_SPACE:# 创建一颗子弹,并将其加入到编组bullets中fire_bullet(al_settings,screen,ship,bullets)elif event.key == pygame.K_q:sys.exit()def check_keyup_events(event,ship):# 响应松开if event.key == pygame.K_RIGHT:ship.moving_right = Falseelif event.key == pygame.K_LEFT:ship.moving_left = Falsedef check_events(al_settings,screen,stats,sb,play_button,ship,aliens,bulltes):# 响应按键和鼠标事件for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()elif event.type == pygame.KEYDOWN:  # 按下按键check_keydown_events(event,al_settings,screen,ship,bulltes)elif event.type == pygame.KEYUP:    # 松开按键check_keyup_events(event,ship)elif event.type == pygame.MOUSEBUTTONDOWN:mouse_x,mouse_y = pygame.mouse.get_pos()check_play_button(al_settings,screen,stats,sb,play_button,ship,aliens,bulltes,mouse_x,mouse_y)def check_play_button(al_settings,screen,stats,sb,play_button,ship,aliens,bullets,mouse_x,mouse_y):# 在玩家单击play按钮时开心新游戏button_clicked = play_button.rect.collidepoint(mouse_x,mouse_y)if button_clicked and not stats.game_active:# 重置游戏信息stats.reset_stats()stats.game_active = Trueal_settings.initialize_dynamic_settings()# 隐藏光标pygame.mouse.set_visible(False)# 重置记分牌图像sb.prep_score()sb.prep_high_score()sb.prep_level()sb.prep_ships()# 清空外星人列表和子弹列表aliens.empty()bullets.empty()# 创建一群新的外星人,并让飞船居中create_fleet(al_settings,screen,ship,aliens)ship.center_ship()def update_screen(al_settings,screen,stats,sb,ship,aliens,bullets,play_button):# 更新图像screen.fill(al_settings.bg_color)# 在飞船和外星人后面重绘所有子弹for bullet in bullets.sprites():bullet.draw_bullet()# 更新飞船、外星人的位置ship.blitme()aliens.draw(screen)# 显示得分sb.show_score()# 如果处于非活动状态,就绘制play按钮if not stats.game_active:play_button.draw_button()# 显示最近绘制的屏幕pygame.display.flip()def update_bullets(al_settings,screen,stats,sb,ship,aliens,bullets):# 更新子弹的位置bullets.update()# 删除已消失的子弹for bullet in bullets.copy():if bullet.rect.bottom <= 0:bullets.remove(bullet)print(len(bullets))# 检查是否有子弹击中了外星人# 如果有就删除相应的子弹和外星人check_bullet_alien_collisions(al_settings,screen,stats,sb,ship,aliens,bullets)def fire_bullet(al_settings,screen,ship,bullets):if len(bullets) < al_settings.bullet_allowed:new_bullet = Bullet(al_settings, screen, ship)bullets.add(new_bullet)def get_number_aliens_x(al_settings,alien_width):# 计算每行可容纳多少外星人available_space_x = al_settings.screen_width - 2*alien_widthnumber_aliens_x = int(available_space_x/(2*alien_width))return number_aliens_xdef create_alien(al_settings,screen,aliens,alien_number,row_number):# 创建一个外星人并放在当前行alien = Alien(al_settings, screen)alien_width = alien.rect.widthalien.x = alien_width + 2 * alien_width * alien_numberalien.rect.x = alien.xalien.rect.y = alien.rect.height + 2*alien.rect.height*row_numberaliens.add(alien)def create_fleet(al_settings,screen,ship,aliens):# 创建外星人群# 创建一个外星人,并计算一行可容纳多少个外星人# 外星人间距为外星人宽度alien = Alien(al_settings,screen)number_aliens_x = get_number_aliens_x(al_settings,alien.rect.width)number_rows = get_number_rows(al_settings,ship.rect.height,alien.rect.height)# 创建第一行外星人for row_number in range(number_rows):for alien_number in range(number_aliens_x):# 创建一个外星人并将其加入当前行create_alien(al_settings,screen,aliens,alien_number,row_number)def get_number_rows(al_settings,ship_height,alien_height):# 计算屏幕可容纳多少外星人available_space_y = (al_settings.screen_height - 3*alien_height - ship_height)number_rows = int(available_space_y/(2*alien_height))return number_rowsdef update_aliens(al_settings,screen,stats,sb,ship,aliens,bullets):# 更新外星人群中所有外星人的位置check_fleet_edges(al_settings,aliens)aliens.update()# 检测外星人和飞船之间的碰撞if pygame.sprite.spritecollideany(ship,aliens):ship_hit(al_settings,screen,stats,sb,ship,aliens,bullets)print("Ship hit !!!")check_aliens_bottom(al_settings,screen,stats,sb,ship,aliens,bullets)def check_fleet_edges(al_settings,aliens):# 有外星人到达边缘时采取相应的措施for alien in aliens.sprites():if alien.check_edges():change_fleet_direction(al_settings,aliens)breakdef change_fleet_direction(al_settings,aliens):# 将整群外星人下移,并改变他们的方向for alien in aliens.sprites():alien.rect.y += al_settings.fleet_drop_speedal_settings.fleet_direction *= -1def check_bullet_alien_collisions(al_settings,screen,stats,sb,ship,aliens,bullets):# 相应子弹和外星人的碰撞# 删除发生碰撞的子弹和外星人collosions = pygame.sprite.groupcollide(bullets, aliens, True, True)if collosions:for aliens in collosions.values():stats.score += al_settings.alien_points * len(aliens)sb.prep_score()check_high_score(stats,sb)if len(aliens) == 0:# 删除现有的子弹,并重新创建一批外星人,并提高等级bullets.empty()al_settings.increase_speed()stats.level += 1sb.prep_level()create_fleet(al_settings,screen,ship,aliens)def ship_hit(al_settings,screen,stats,sb,ship,aliens,bullets):# 相应被外星人撞到的飞船if stats.ships_left > 0:# 将ship_left 减 1stats.ships_left -= 1# 更新计分牌sb.prep_ships()# 清空外星人列表和子弹列表aliens.empty()bullets.empty()# 创建一群新的外星人,并将飞船放到屏幕的底部中央create_fleet(al_settings,screen,ship,aliens)ship.center_ship()# 暂停sleep(0.5)else:stats.game_active = Falsepygame.mouse.set_visible(True)def check_aliens_bottom(al_settings,screen,stats,sb,ship,aliens,bullets):# 检查是否有外星人到达了屏幕底端screen_rect = screen.get_rect()for alien in aliens.sprites():if alien.rect.bottom >= screen_rect.bottom:# 像飞船被撞到一样处理ship_hit(al_settings,screen,stats,sb,ship,aliens,bullets)breakdef check_high_score(stats,sb):# 检查是否诞生了新的最高得分if stats.score > stats.high_score:stats.high_score = stats.scoresb.prep_high_score()

game_stats.py

用于记录游戏的状态

class GameStats():# 跟踪游戏的统计信息def __init__(self,al_settings):# 初始化统计信息self.al_settings = al_settingsself.reset_stats()# 游戏一开始处于非活动状态self.game_active = False# 在任何情况下都不应重置最高分self.high_score = 0def reset_stats(self):# 初始化在游戏运行期间可能变化的统计信息self.ships_left = self.al_settings.ship_limitself.score = 0self.level = 1

scoreboard.py

计分板

import pygame.font
from pygame.sprite import Group
from ship import Ship
class Scoreboard():# 显示得分信息的类def __init__(self,al_settings,screen,stats):# 初始化显示得分涉及的属性self.screen = screenself.screen_rect = screen.get_rect()self.al_settings = al_settingsself.stats = stats# 显示得分信息时使用的字体设置self.text_color = (30,30,30)self.font = pygame.font.SysFont(None,48)# 准备初始得分图像和最高得分图像self.prep_score()self.prep_high_score()self.prep_level()self.prep_ships()def prep_score(self):# 将得分渲染成一幅图像rounded_score = int(round(self.stats.score,-1))score_str = "{:,}".format(rounded_score)self.score_image = self.font.render(score_str,True,self.text_color,self.al_settings.bg_color)# 将得分放在右上角屏幕self.score_rect = self.score_image.get_rect()self.score_rect.right = self.screen_rect.right - 20self.score_rect.top = 20def show_score(self):# 在屏幕上显示飞船和得分self.screen.blit(self.score_image,self.score_rect)self.screen.blit(self.high_score_image,self.high_score_rect)self.screen.blit(self.level_image,self.level_rect)self.ships.draw(self.screen)def prep_high_score(self):# 将最高得分转换为渲染的图像high_score = int(round(self.stats.high_score,-1))high_score_str = "{:,}".format(high_score)self.high_score_image = self.font.render(high_score_str, True, self.text_color, self.al_settings.bg_color)# 将最高得分放在屏幕顶部中央self.high_score_rect= self.high_score_image.get_rect()self.high_score_rect.centerx = self.screen_rect.centerxself.high_score_rect.top = self.score_rect.topdef prep_level(self):# 将等级转换为渲染的图像self.level_image = self.font.render(str(self.stats.level), True, self.text_color, self.al_settings.bg_color)# 将等级放在得分的下方self.level_rect = self.level_image.get_rect()self.level_rect.right = self.score_rect.rightself.level_rect.top = self.score_rect.bottom + 10def prep_ships(self):# 显示还余下多少飞船self.ships = Group()for ship_number in range(self.stats.ships_left):ship = Ship(self.al_settings,self.screen)ship.rect.x = 10 + ship_number * ship.rect.widthship.rect.y = 10self.ships.add(ship)

alien.py

🐟定义为一个类

import pygame
from pygame.sprite import Spriteclass Alien(Sprite):def __init__(self,al_settings,screen):# 初始化外星人并设置其初始位置super(Alien, self).__init__()self.screen = screenself.al_settings = al_settings# 加载外星人图像并设置其rect属性self.image = pygame.image.load("images/fish.png")self.image = pygame.transform.scale(self.image,(50,50))self.rect = self.image.get_rect()# 每个外星人最初都在屏幕的左上角附近self.rect.x = self.rect.widthself.rect.y = self.rect.height# 存储外星人的准确位置self.x = float(self.rect.x)def blitme(self):# 在指定位置绘制外星人self.screen.blit(self.image,self.rect)def update(self):# 向左或向右移动外星人self.x += self.al_settings.alien_speed_factor * self.al_settings.fleet_directionself.rect.x = self.xdef check_edges(self):# 如果外星人位于屏幕边缘,就返回truescreen_rect = self.screen.get_rect()if self.rect.right >= screen_rect.right:return Trueelif self.rect.left <= 0:return True

settings.py

所有的参数设置都在这个文件里

class Settings():# 游戏的所有设置均在此def __init__(self):# 初始化静态设置# 屏幕设置self.screen_width = 1200self.screen_height = 800self.bg_color = (180, 250, 220)# 飞船设置self.ship_limit = 1# 子弹设置self.bullet_width = 10self.bullet_height = 10self.bullet_color = (255,255,255)self.bullet_allowed = 3     # 子弹数量# 外星人设置self.fleet_drop_speed = 10# 以什么样的速度加快游戏节奏self.speedup_scale = 1.1# 外星人点数的提高速度self.score_scale = 1.5self.initialize_dynamic_settings()def initialize_dynamic_settings(self):# 初始化随游戏进行而变化的设置self.ship_speed_factor = 1.5self.bullet_speed_factor = 3self.alien_speed_factor = 1self.fleet_direction = 1  # 1表示向右移,-1表示向左移# 记分self.alien_points = 50def increase_speed(self):# 提高速度设置和外星人点数self.ship_speed_factor *= self.speedup_scaleself.bullet_speed_factor *= self.speedup_scaleself.alien_speed_factor *= self.speedup_scaleself.alien_points = int(self.alien_points * self.score_scale)

ship.py

将小船定义为一个类

import pygame
from pygame.sprite import Sprite
class Ship(Sprite):def __init__(self,al_settings,screen):# 初始化飞船并设置其初始位置super(Ship, self).__init__()self.screen = screenself.al_settings = al_settings# 加载飞船图像并获得外接矩形self.image = pygame.image.load('images/ship.png')self.image = pygame.transform.scale(self.image,(100,80))self.background = pygame.image.load("images/seaside.png")self.background = pygame.transform.scale(self.background, (al_settings.screen_width, al_settings.screen_height))self.rect = self.image.get_rect()self.screen_rect = screen.get_rect()# 将每艘飞船放在屏幕底部中央self.rect.centerx = self.screen_rect.centerxself.rect.bottom = self.screen_rect.bottom# 在飞船的属性center中存储小数值self.center = float(self.rect.centerx)# 移动标志self.moving_right = Falseself.moving_left = Falsedef update(self):# 根据移动标志调整飞船位置# 更新飞船的center值而不是rect的# 且限制飞船的活动范围if self.moving_right and self.rect.right < self.screen_rect.right:self.center += self.al_settings.ship_speed_factorif self.moving_left and self.rect.left > self.screen_rect.left:self.center -= self.al_settings.ship_speed_factorself.rect.centerx = self.centerdef blitme(self):# 在指定位置绘制飞船self.screen.blit(self.background, (0, 0))self.screen.blit(self.image,self.rect)def center_ship(self):# 让飞船在屏幕中居中self.center = self.screen_rect.centerx

bullet.py

将子弹定义为一个类

import pygame
from pygame.sprite import Sprite
class Bullet(Sprite):# 一个对飞船发送子弹的进行管理的类def __init__(self,al_settings,screen,ship):# 在飞船所处的位置创建一个子弹对象super(Bullet,self).__init__()self.screen = screen# 在(0,0)处设置一个表示子弹的矩形,再设置正确的位置self.rect = pygame.Rect(0,0,al_settings.bullet_width,al_settings.bullet_height)self.rect.centerx = ship.rect.centerxself.rect.top = ship.rect.top# 存储用小数表示子弹的位置self.y = float(self.rect.y)self.color= al_settings.bullet_colorself.speed_factor = al_settings.bullet_speed_factordef update(self):# 向上移动子弹# 更新表示子弹位置的小数值self.y -= self.speed_factorself.rect.y = self.ydef draw_bullet(self):pygame.draw.rect(self.screen,self.color,self.rect)

button.py

将开始按钮定义为一个类,即图片中的play

import pygame.fontclass Button():def __init__(self,al_settings,screen,msg):# 初始化按钮属性self.screen = screenself.screen_rect = screen.get_rect()# 设置按钮的尺寸和其他属性self.width = 200self.height = 50self.button_color = (0,255,0)self.text_color = (255,255,255)self.font = pygame.font.SysFont(None,48)# 创建按钮的rect对象,并使对象居中self.rect = pygame.Rect(0,0,self.width,self.height)self.rect.center = self.screen_rect.center# 按钮标签只需要创建一次self.prep_msg(msg)def prep_msg(self,msg):# 将msg渲染成图像,并将其在按钮上居中self.msg_image = self.font.render(msg,True,self.text_color,self.button_color)self.msg_image_rect = self.msg_image.get_rect()self.msg_image_rect.center = self.rect.centerdef draw_button(self):# 绘制一个用颜色填充的按钮,再绘制文本self.screen.fill(self.button_color,self.rect)self.screen.blit(self.msg_image,self.msg_image_rect)

存在的问题

为了好看,笔者给游戏界面添加上了背景,但因为背景所占面积太大每次与其他实例同时更新,消耗的程序运行时间大大增加,导致游戏运行起来不太流畅,解决的方法是去掉背景或者使用其他高效的游戏开发工具。
代码中子弹是由黑色矩形表示的,运行起来起来会被背景覆盖导致看不到,解决的办法是将矩形也用图片表示并实时更新。但是显然程序的运行又会相对减慢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_20217.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【微搭低代码】Javascript基础知识-函数及模块介绍

低代码要想入门&#xff0c;首先需要学习javascript&#xff0c;我们已经有了两篇基础文章 变量定义及初始化 循环及条件控制 我们本篇介绍两个知识点&#xff0c;一个是函数&#xff0c;一个是模块 函数 在js中函数是可以重复使用的代码块&#xff0c;定义函数是为了去除冗余…

在Windows下自制ARM交叉编译工具链

参考链接&#xff1a;gnu工具链 1.Download MinGW and MSys packages. 安装MSys 参考此链接https://www.msys2.org/安装&#xff0c;注意只需要安装即可。 安装开发环境,设置镜像,需要进入安装路径中的/etc/pacman.d/进行修改 // /etc/pacman.d/mirrorlist.mingw32 Serve…

【5G RRC】5G 切换(handover)那点事儿

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

python去图片背景

Remove Image Background using Python https://youtu.be/RkdFkhfMK2k

跨境电商必读,WhatsApp营销入门指南!

关键词&#xff1a;WhatsApp营销、跨境电商营销 现在&#xff0c;跨境社交媒体和Messengers不仅仅是私人交流的渠道了。很多跨境电商已经找到了在WhatsApp营销的秘诀&#xff0c;如果你还没开始&#xff0c;你可能已经落后了。同时&#xff0c;与其他平台相比&#xff0c;在 W…

Vue组件-卡片动画倒计时

前言 最近有朋友在做投票的项目&#xff0c;里面有用到一个倒计时的组件&#xff0c;还想要个动画效果。cv大法浸染多年的我&#xff0c;首先想到的是直接找个现有的组件。 通过一通搜索&#xff0c;看上的只有一个 vue2-flip-countdown&#xff0c;但是当我要修改大小和颜色…

(附源码)计算机毕业设计SSM游乐园娱乐项目管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Github的使用教程

文章目录注册查找仓库下载代码fork仓库管理创建仓库添加文件提交issue提交/接受PRpages一直想进入工程这块领地&#xff0c;但是好像没咋学过github&#xff0c;今天学一下&#xff0c;先上个名词解释 注册 首先&#xff0c;github其实是不需要邮箱和手机号的&#xff0c;可以…

window11下安装.framework3.5的方法

window11下安装.framework3.5的方法 如果正常安装报错了&#xff0c;可采用如下方法重新安装 一、把安装iso文件 zh-cn_windows_11_business_editions_version_22h2_updated_sep_2022_x64_dvd_515a832b.iso 装载到虚拟盘中H:\sources\sxs\中的文件拷贝到硬盘已存在的盘符F:\w…

容器适配器——stack/queue/priority_queue

目录 一. stack 二. queue 三. priority_queue 1. empty()&#xff0c;top()&#xff0c;size()的实现 2. pop和push的实现 适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结)&#xff0c;该种模式是将一个类的接口转…

C语言:数组参数、指针参数

目录 一.字符指针&#xff0c;指针数组&#xff0c;数组指针简单回顾 二.数组参数、指针参数 一维数组传参 二维数组传参 这里需要注意&#xff1a; 一级指针传参 思考 二级指针传参 思考 一.字符指针&#xff0c;指针数组&#xff0c;数组指针简单回顾 #include<std…

java虚拟机中的双亲委派机制

文章目录双亲委派机制工作原理工作场景调用过程三种加载器调用范围String类加载过程StringTest类加载过程双亲委派机制优点双亲委派机制 Java虚拟机对class文件采用的是按需加载的方式&#xff0c;也就是说当需要使用该类时才会将它的class文件加载到内存生成class对象。而且加…

一些有趣的小项目合集~

pyqt人脸识别&#xff1a; nullhttps://www.jb51.net/article/168718.htmpyqt目标检测&#xff1a; 利用PyQt5为目标检测Faster-rcnn-Pytorch添加GUI界面&#xff08;二&#xff09;-python黑洞网 (pythonheidong.com)https://www.pythonheidong.com/blog/article/337144/e2d…

最常见的IMU:MPU6050

I2CI^2CI2C通讯 ​ I2CI^2CI2C is a two-wire interface comprised of the signals serial data (SDA) and serial clock (SCL). In general, the lines are open-drain and bi-directional. In a generalized I-C interface implementation, attached devices can be a maste…

优雅的处理参数校验以及异常

1、前言 编写控制层时&#xff0c;我们可能会自己去校验请求参数&#xff0c;就会出现这样的代码&#xff1a; if (StringUtils.isEmpty(memberSid)) {return new JsonResult(false, "参数memberSid为空"); } if (null test) {return new JsonResult(false, "…

油溶性PbS量子点近红外发射光PL800nm-1600nm

油溶性PbS量子点近红外发射光PL800nm-1600nm 油溶性PbS量子点产品&#xff0c;表面由疏水配体包覆&#xff0c;平均的量子产率为50%&#xff0c;储存时应避免阳光直射&#xff0c;4度密封暗处保存&#xff0c;可以为客户订制生产800nm&#xff5e;1600nm任一波长不同克数的产品…

叶毓睿:元宇宙发展与治理中,治理的主体是谁?治理的对象是谁?

中国移联元宇宙产业委员会联席秘书长、《元宇宙十大技术》著者之一、高效能服务器和存储技术国家重点实验室首席研究员叶毓睿&#xff1a;治理之可能性的关键在于延续性和开创性。 2022年9月24日&#xff0c;元宇宙产业委特别筹备的“发展与治理”2022元宇宙共治大会暨《元宇宙…

【JT-1/2电子式同步检查继电器】

1 用途 JT-1型同步检查继电器用于两端供电线路的自动重合闸线路中&#xff0c;其作用在于检查线路上电压的存在及线路上和变电站汇流排上电压向量间的相角差。 2 结构和原理 2.1 本继电器采用嵌入式安装&#xff0c;其主体部分系插拔式结构 2.2 本继电器主体部分与DT-1型同…

【Python基础面向对象】self、类变量和实例变量、__init__

哈喽兄弟们&#xff0c;我们接着上篇继续学习面向对象。 面向对象化编程所有的实例对象和实例方法都必须以self作为第一个参数&#xff0c;文章内容接上一章&#xff1a;Python面向对象编程基础之面向对象思想和特点、类和对象。这个系列将会很详细的解释清楚Python面向对象编程…

java实现多层级目录树详解

一&#xff0c;引言 在开发中&#xff0c;经常遇到前端需要实现一个多层级的目录树&#xff0c;那么后端就需要根据这种结构返回对应的数据&#xff0c;因此在这里记录一下本人在开发中是如何实现这个多层级的目录树。 二&#xff0c;建表建库 在建表时&#xff0c;需要注意…