当前位置: 首页 > news >正文

pygame小游戏

         代码存在一些bug,感兴趣可自行修改,游戏运行后玩法与吃金币游戏类似。(代码及结果比较粗糙,仅供参考)

注:(图片、音乐、音效文件老是上传上传不上,想要可私,也可以自己找【自己找喜欢的图和音乐就行】)

1.运行效果图:

开始界面:

游戏中: 

 游戏结束:

 2.完整代码:

import os.path
import pickle
import random
import timeimport pygameWIDTH, HEIGHT = 800, 600
FOOD_BORN = pygame.USEREVENT + 3000
PROTECT_BORN = pygame.USEREVENT + 100
BOMB_BORN = pygame.USEREVENT + 1200
TOTAL_TIME = 60n = 1# 背景音乐
class AudioManage:@staticmethoddef play_bg_music():pygame.mixer.music.load("./tu/1/bjm/ayd.mp3")pygame.mixer.music.set_volume(0.2)pygame.mixer.music.play(-1)# 音效@staticmethoddef play_sound(name):sound = pygame.mixer.Sound(name)sound.play()# 引入精灵父类  所有子类都有image(外观)和rect(位置)
class BaseSprite(pygame.sprite.Sprite):def __init__(self, image_name):super().__init__()self.image = pygame.image.load(image_name)self.rect = self.image.get_rect()# 炸弹精灵类
class BombSprite(BaseSprite):def __init__(self, image_name, start_x, gm, speed=6):super().__init__(image_name)self.rect.bottom = 0self.rect.left = start_xself.speed = speedself.gm = gm# 炸弹移动及消亡def update(self):self.rect.top += self.speedif self.rect.top > HEIGHT:self.kill()# 炸弹管理类
class BombManage:def __init__(self, gm):self.gm = gmself.bomb_group = pygame.sprite.Group()# 炸弹生成def born(self):for center in range(n):center = random.randint(0, WIDTH - 100)self.bomb = BombSprite("./tu/1/xwz/11.png", center, self.gm)self.bomb.add(self.bomb_group)# 炸弹清空def clear(self):self.bomb_group.empty()# 更新def update(self):self.bomb_group.draw(self.gm.screen)self.bomb_group.update()# 食物精灵类
class FoodSprite(BaseSprite):def __init__(self, image_name, start_x, gm, speed=6):super().__init__(image_name)self.rect.bottom = 0self.rect.left = start_xself.speed = speedself.gm = gm# 食物移动def update(self):self.rect.top += self.speedif self.rect.top > HEIGHT:self.kill()# 食物管理类
class FoodManage:def __init__(self, gm):self.gm = gmself.food_group = pygame.sprite.Group()# 食物随机生成def born(self):image_name = random.choice(["./tu/1/xwz/2.png", "./tu/1/xwz/3.png", "./tu/1/xwz/4.png"])start_x = random.randint(0, WIDTH - 100)self.food = FoodSprite(image_name, start_x, self.gm)self.food.add(self.food_group)# 食物清空def clear(self):self.food_group.empty()# 更新def update(self):self.food_group.draw(self.gm.screen)self.food_group.update()# 护盾精灵类(保护玩家, 生成保护罩)
class ShieldSprite(BaseSprite):def __init__(self, image_name):super().__init__(image_name)# 保护罩精灵类(生成护盾的食物类)
class ProtectSprite(BaseSprite):def __init__(self, image_name, gm, start_x, speed=7):super().__init__(image_name)self.rect.bottom = 0self.rect.left = start_xself.gm = gmself.speed = speed# 移动def update(self):self.rect.top += self.speedif self.rect.top > HEIGHT:self.kill()# 保护罩管理类
class ProtectManage:def __init__(self, gm):self.gm = gmself.protect_group = pygame.sprite.Group()# 生成可产生护盾的食物def born(self):start_x = random.randint(0, WIDTH - 100)self.protect = ProtectSprite("./tu/1/xwz/5.png", self.gm, start_x)self.protect.add(self.protect_group)# 清空def clear(self):self.protect_group.empty()# 更新def update(self):self.protect_group.draw(self.gm.screen)self.protect_group.update()# 玩家精灵类
class PlayerSprite(BaseSprite):def __init__(self, player_names, speed=12):super().__init__(player_names[0])self.rect.center = (WIDTH / 2, HEIGHT - 50)self.current_index = 0self.images = [pygame.image.load(player_image) for player_image in player_names]self.speed = speedself.shield = None# 玩家移动def update(self):# gif图片速度控制self.current_index += 1if self.current_index >= len(self.images) * 5:self.current_index = 0self.image = self.images[self.current_index // 5]key_pressed = pygame.key.get_pressed()# 左移if key_pressed[pygame.K_LEFT] or key_pressed[pygame.K_a]:self.rect.left -= self.speedif self.rect.left < 0:self.rect.left = 0# 右移elif key_pressed[pygame.K_RIGHT] or key_pressed[pygame.K_d]:self.rect.right += self.speedif self.rect.right > WIDTH:self.rect.right = WIDTH# 上移elif key_pressed[pygame.K_UP] or key_pressed[pygame.K_w]:self.rect.top -= self.speedif self.rect.top < 0:self.rect.top = 0# 下移elif key_pressed[pygame.K_DOWN] or key_pressed[pygame.K_s]:self.rect.bottom += self.speedif self.rect.bottom > HEIGHT:self.rect.bottom = HEIGHT# 保护罩跟随玩家移动(更新中心坐标)if self.shield:self.shield.rect.center = self.rect.center# 玩家管理类
class PlayerManage:def __init__(self, gm):self.gm = gmself.player_group = pygame.sprite.Group()self.shield_group = pygame.sprite.Group()# 保护罩def create_shield(self):# 玩家没有保护罩则生成if not self.player.shield:# 创建保护罩精灵shield = ShieldSprite("./tu/1/xwz/10.png")# 保护罩中心与玩家中心重合包裹住玩家shield.rect.center = self.player.rect.center# 将保护罩精灵添加到保护罩组self.shield_group.add(shield)# 关联玩家与保护罩精灵self.player.shield = shield# 玩家有护盾则不再生成def clear_shield(self):# 玩家有保护罩if self.player.shield:# 将保护罩精灵移除保护罩精灵族self.shield_group.remove(self.player.shield)# 保护罩破碎self.player.shield.kill()self.player.shield = None# 清空def clear(self):self.shield_group.empty()# 玩家生成def born(self):self.player = PlayerSprite([f"./tu/1/gif1/{i}.png" for i in range(1, 10)])# self.player = PlayerSprite("./tu/1/xwz/1.png")self.player.add(self.player_group)# 玩家死亡清空def die(self):self.player_group.empty()# 玩家及保护罩更新def update(self):# 玩家self.player_group.draw(self.gm.screen)self.player_group.update()# 保护罩self.shield_group.draw(self.gm.screen)self.shield_group.update()# 背景精灵类
class BgSprite(BaseSprite):def __init__(self, image_name, start_y, speed=5):super().__init__(image_name)self.rect.top = start_yself.speed = speed# 背景移动def update(self):self.rect.top += self.speedif self.rect.top >= HEIGHT:self.rect.top = -HEIGHT# GIF图片精灵类
class GIFSprite(BaseSprite):def __init__(self, bg_images):super().__init__(bg_images[0])self.bg_images = [pygame.image.load(bg_image) for bg_image in bg_images]self.current_index = 0# 图片改变规则,生成动态图def update(self):self.current_index += 1if self.current_index == len(self.bg_images * 25):self.current_index = 0self.image = self.bg_images[self.current_index // 25]# 背景管理类
class BgManage:def __init__(self, gm):self.gm = gm# 游戏开始背景图(gif图片)self.ready_group = pygame.sprite.Group()# self.bg0 = GIFSprite([f"./tu/1/gif/{i}.jpg" for i in range(1, 32)])self.bg0 = GIFSprite([f"./tu/1/gif3/{i}.jpg" for i in range(1, 3)])self.bg0.add(self.ready_group)self.gaming_group = pygame.sprite.Group()# 游戏中背景图(滚动)# self.bg1 = BgSprite("./tu/1/xwz/3.jpg", 0, 5)# self.bg1.add(self.gaming_group)# self.bg2 = BgSprite("./tu/1/xwz/4.jpg", -HEIGHT, 5)# self.bg2.add(self.gaming_group)# gif背景图self.bg1 = GIFSprite([f"./tu/1/gif3/{i}.jpg" for i in range(3, 5)])self.bg1.add(self.gaming_group)# 游戏结束背景图(静态)self.end_group = pygame.sprite.Group()self.bg3 = BgSprite("./tu/1/xwz/30.jpg", 0, 0)self.bg3.add(self.end_group)# 背景音乐播放AudioManage.play_bg_music()# 绘制并更新def update(self):# 游戏开始准备阶段if self.gm.game_state == "ready":# 绘制并更新准备阶段元素self.ready_group.draw(self.gm.screen)self.ready_group.update()# 游戏开始阶段elif self.gm.game_state == "gaming":# 绘制并更新游戏中的游戏元素self.gaming_group.draw(self.gm.screen)self.gaming_group.update()# 游戏结束阶段elif self.gm.game_state == "end":# 绘制并更新结束阶段游戏元素self.end_group.draw(self.gm.screen)self.end_group.update()# UI精灵类
class UISprite(BaseSprite):def __init__(self, image_name, center):super().__init__(image_name)self.rect.center = center# 鼠标点击检测def is_collide(self):# 获取当前鼠标位置mouse_pos = pygame.mouse.get_pos()# 检测鼠标位置是否与对象的矩形区域发生碰撞if self.rect.collidepoint(mouse_pos):# 如果发生碰撞 返回Truereturn True# UI管理类
class UIManage:def __init__(self, gm):self.gm = gm# 准备阶段UI元素初始化(游戏开始界面开始按钮图片)self.ready_group = pygame.sprite.Group()self.start_btn = UISprite("./tu/1/xwz/7.png", (WIDTH / 2, HEIGHT - 50))self.start_btn.add(self.ready_group)self.title_btn = UISprite("./tu/1/xwz/12.png", (WIDTH / 2, HEIGHT - 500))self.title_btn.add(self.ready_group)# 分数显示初始化(定义初始值为0、字体、字号、颜色)self.score_value = 0self.font = pygame.font.Font("./tu/1/字体/2.ttf", size=32)self.score_label = self.font.render(f"Score: {self.score_value}", True, "red")# 时间显示初始化(定义时间、字体、字号、颜色)self.total_time = TOTAL_TIMEself.timer = self.font.render(f"time:{self.total_time}", True, "gold")# 结束阶段UI元素初始化(结束界面重新开始按钮图)self.end_group = pygame.sprite.Group()self.restart_btn = UISprite("./tu/1/xwz/9.png", (WIDTH / 2, HEIGHT - 100))self.restart_btn.add(self.end_group)# 初始化最高分self.high_score = 0# 序列化def save_score(self, score):"""保存分数到文件并更新最高分score:要保存的分数如果给定的分数高于当前记录的最高分数,更新最高分数并保存到文件中。"""if score > self.high_score:self.high_score = scorewith open("./princeling.txt", "wb") as f:pickle.dump(self.high_score, f)# 反序列化def load_score(self):"""加载之前保存的最高分数。int: 加载的最高分数值,如果文件不存在则返回默认值0。如果保存分数的文件存在,从文件中加载并返回最高分数值;否则返回默认值0。"""if os.path.exists("./princeling.txt"):with open("./princeling.txt", "rb") as f:return pickle.load(f)# 增加分数并更新显示def add_score(self):# 将当前分数增加1并更新显示文本和保存最高分数self.score_value += 1self.score_label = self.font.render(f"Score: {self.score_value}", True, "gold")self.save_score(self.score_value)# 减少剩余时间并更新显示def reduce_time(self):# 如果时间大于0  时间减少1  更新显示文本if self.total_time > 0:self.total_time -= 1self.timer = self.font.render(f"time:{self.total_time}", True, "gold")# 重置游戏状态和显示def reset_game(self):# 将分数重置为0self.score_value = 0# 将时间重置为指定时间self.total_time = TOTAL_TIME# 更新显示文本self.score_label = self.font.render(f"score:{self.score_value}", True, "gold")self.time_label = self.font.render(f"time:{self.total_time}", True, "gold")self.gm.player_manage.die()self.gm.player_manage.clear()self.gm.food_manage.clear()self.gm.protec_manage.clear()self.gm.bomb_manage.clear()# 根据游戏状态更新屏幕内容(更新屏幕显示内容)def update(self):# 游戏准备阶段if self.gm.game_state == "ready":# 显示准备界面和开始按钮self.ready_group.draw(self.gm.screen)self.ready_group.update()# 重置总时间self.total_time = TOTAL_TIME# 在开始按钮图片上显示start# 显示字体、字号self.font2 = pygame.font.Font("./tu/1/字体/2.ttf", size=40)# 显示内容self.start = self.font2.render("start", True, "gold")# 显示位置、颜色self.gm.screen.blit(self.start, (WIDTH / 2 - 50, HEIGHT - 100))# 游戏进行阶段elif self.gm.game_state == "gaming":# 显示游戏进行中的计时器和分数self.gm.screen.blit(self.timer, (WIDTH // 2 - 350, 30))self.gm.screen.blit(self.score_label, (WIDTH - 150, 30))# 游戏结束阶段elif self.gm.game_state == "end":# 游戏结束时间为0  显示victoryif self.total_time == 0:self.font2 = pygame.font.Font("./tu/1/字体/2.ttf", size=52)self.start = self.font2.render("victory", True, "gold")self.gm.screen.blit(self.start, (WIDTH / 2 - 100, HEIGHT / 2))# 游戏结束时间不为0  显示lose outelse:self.font2 = pygame.font.Font("./tu/1/字体/2.ttf", size=52)self.start = self.font2.render("lose out", True, "red")self.gm.screen.blit(self.start, (WIDTH / 2 - 100, HEIGHT / 2))# 显示最高分self.high = self.font.render(f"hight score:{self.high_score}", True, "gold")self.gm.screen.blit(self.high, (WIDTH / 2 - 100, HEIGHT - 600))# 显示结束界面组件self.end_group.draw(self.gm.screen)self.end_group.update()self.gm.screen.blit(self.score_label, (WIDTH / 2 - 65, HEIGHT - 200))# 处理游戏中鼠标点击事件def check_click(self):# 游戏准备阶段if self.gm.game_state == "ready":# 点击了开始按钮if self.start_btn.is_collide():self.gm.game_state = "gaming"# 设置炸弹出现计时器pygame.time.set_timer(BOMB_BORN, 3000)# 生成玩家self.gm.player_manage.born()# 设置食物出现计时器pygame.time.set_timer(FOOD_BORN, 1000)# 设置总时间计时器pygame.time.set_timer(TOTAL_TIME, 1000)# 设置保护罩出现计时器pygame.time.set_timer(PROTECT_BORN, 5000)# 游戏结束状态elif self.gm.game_state == "end":self.gm.player_manage.die()self.gm.player_manage.die()self.gm.food_manage.clear()self.gm.protec_manage.clear()self.gm.bomb_manage.clear()# 点击重新开始按钮进入游戏准备阶段if self.restart_btn.is_collide():self.gm.game_state = "ready"# 重置游戏状态self.reset_game()# 游戏管理类
class GameManage:def __init__(self):# 初始化模块pygame.init()# 设置窗口标题pygame.display.set_caption("princeling")# 创建窗体大小self.screen = pygame.display.set_mode((WIDTH, HEIGHT))# 创建时钟对象self.clock = pygame.time.Clock()# 初始化游戏状态为准备状态self.game_state = "ready"# 初始化各管理类对象self.ui_manage = UIManage(self)self.bg_manage = BgManage(self)self.food_manage = FoodManage(self)self.player_manage = PlayerManage(self)self.bomb_manage = BombManage(self)self.protec_manage = ProtectManage(self)# 初始化保护罩生成的时间戳self.protec_last_time = time.time()# 检查和处理pygame事件def check_event(self):# 循环检查所有的pygame事件for event in pygame.event.get():# 检测到窗口关闭事件 调用pygame.quit() 关闭pygame 退出程序if event.type == pygame.QUIT:pygame.quit()exit()# 处理鼠标按钮释放事件if event.type == pygame.MOUSEBUTTONUP:# 左键释放if event.button == 1:# 调用UI管理器的点击检查方法self.ui_manage.check_click()# 处理总时间事件(假设 TOTAL_TIME 是自定义的事件类型)if event.type == TOTAL_TIME:# 调用 UI 管理器的减少时间方法self.ui_manage.reduce_time()# 如果总时间减少到0if self.ui_manage.total_time == 0:# 设置游戏状态为结束self.game_state = "end"# 调用玩家管理器的死亡方法# 处理食物生成事件if event.type == FOOD_BORN:# 调用食物管理器的生成方法self.food_manage.born()# 处理炸弹生成事件elif event.type == BOMB_BORN:# 调用炸弹管理器的生成方法self.bomb_manage.born()# 处理保护生成事件elif event.type == PROTECT_BORN:# 调用保护管理器的生成方法self.protec_manage.born()def update_draw(self):# 更新背景管理类self.bg_manage.update()# 更新ui管理类self.ui_manage.update()if self.game_state == "gaming":# 更新食物管理类self.food_manage.update()# 更新炸弹管理类self.bomb_manage.update()# 更新保护罩管理类self.protec_manage.update()# 更新玩家管理类self.player_manage.update()# 更新ui管理类(使文字显示在最上层)self.ui_manage.update()# 更新绘制pygame.display.flip()def check_collide(self):# 玩家与食物碰撞检测r0 = pygame.sprite.groupcollide(self.player_manage.player_group, self.food_manage.food_group, False, False)if r0:# 两者碰撞时播放音效AudioManage.play_sound("./tu/1/bjm/lx.mp3")# 食物被碰到消失玩家得分for foods in r0.values():for food in foods:food.kill()self.ui_manage.add_score()# 玩家与保护罩碰撞检测r1 = pygame.sprite.spritecollide(self.player_manage.player, self.protec_manage.protect_group, True)# 碰撞if r1:# 记录两者相碰时的初始时间self.protec_last_time = time.time()# 碰撞后生成保护罩self.player_manage.create_shield()# 未碰撞elif not r1:# (有保护罩状态下)未再碰倒可生成保护罩的食物则保护罩在5秒后消失if self.player_manage.player.shield:current_time = time.time()if current_time - self.protec_last_time > 5:self.player_manage.clear_shield()# 玩家与炸弹碰撞检测r2 = pygame.sprite.spritecollide(self.player_manage.player, self.bomb_manage.bomb_group, True)if r2:# 有保护罩则玩家存活保护罩破碎if self.player_manage.player.shield:# 两者碰撞时播放音效AudioManage.play_sound("./tu/1/bjm/pz.mp3")self.player_manage.clear_shield()# 没有保护罩玩家死亡elif not self.player_manage.player.shield:# 两者碰撞时播放音效AudioManage.play_sound("./tu/1/bjm/zq.mp3")# 游戏结束 玩家死亡 食物、炸弹、保护罩清空self.game_state = "end"self.player_manage.die()self.food_manage.clear()self.protec_manage.clear()self.bomb_manage.clear()pygame.time.set_timer(BOMB_BORN, 0)def run(self):# 反序列化分数self.ui_manage.load_score()while True:self.clock.tick(20)self.check_event()self.update_draw()if self.game_state == "gaming":self.check_collide()gm = GameManage()
gm.run()

相关文章:

pygame小游戏

代码存在一些bug&#xff0c;感兴趣可自行修改&#xff0c;游戏运行后玩法与吃金币游戏类似。&#xff08;代码及结果比较粗糙&#xff0c;仅供参考&#xff09; 注&#xff1a;&#xff08;图片、音乐、音效文件老是上传上传不上&#xff0c;想要可私&#xff0c;也可以自己找…...

.Net Core IIS 程序报错 Access to the path c:\\windows\\TEMP\\poifiles is denied

程序运行报错&#xff1a;Access to the path c:\\windows\\TEMP\\poifiles is denied &#xff0c;此错误本文介绍两种解决办法&#xff0c;选择适合你的方法即可&#xff1b;一般.Net程序运行方案二可能比较常用。 解决方案一&#xff1a; 从 IIS 访问文件系统 如果您在浏…...

交换机VLAN配置中Tagged与Untagged端口的差异和应用区别

VLAN&#xff08;虚拟局域网&#xff09;是一种将局域网设备从逻辑上划分为不同虚拟工作组的技术。它打破了传统局域网在物理位置上的限制&#xff0c;允许网络管理员根据功能、部门或安全需求等因素&#xff0c;将同一物理网络中的设备划分到不同的逻辑网络中。每个VLAN都像一…...

@OneToOne注解的作用

OneToOne 注解在 Java Persistence API (JPA) 中用于定义实体之间的一对一关系。这种关系意味着两个实体之间通过一个唯一键相互关联&#xff0c;即一个实体中的一个字段&#xff08;通常是主键或唯一字段&#xff09;对应于另一个实体中的一个字段&#xff08;也可以是主键或唯…...

vue动画、过渡效果

vue动画、过渡效果 一.动画二.过渡三.多个元素过渡四.第三方库的使用五.总结 一.动画 1.默认.v-enter-active/.v-leave-active, 如果有name则.name-enter-active/.name-leave-active 2.appear意思是一打开页面就 实现动画&#xff0c;是appear"true"的简写 二.过渡 三…...

在 Vue 3 项目中使用 Element UI Plus <el-calendar>组件与时区处理

文章目录 前言简介<el-calendar> 组件组件定制基础自定义内容示例优化点 时区处理时区问题简介获取时区偏移量 下期扩展&#xff1a;自己实现一个<el-calendar> 的思路结语 前言 简介 在 Vue 3 项目开发过程中&#xff0c;我们经常需要对 UI 组件进行定制以满足特…...

【系统架构设计】计算机网络

【系统架构设计】计算机网络 网络架构与协议网络互联模型OSI/RM 结构模型TCP/IP结构模型IPv6 局域网与广域网局域网特点 网络互连与常用设备网络互联设备交换技术路由技术 网络存储技术 网络架构与协议 网络互联模型 OSI/RM 结构模型 1977年&#xff0c;国际标准化组织为适应…...

《中国数据库前世今生》——历史的深度与未来的展望

在探索科技与历史的交织中&#xff0c;我有幸观看了《中国数据库前世今生》这部纪录片。影片开头它不仅是一段技术演进的回顾&#xff0c;更是中国IT领域从跟随到引领的壮丽史诗。后续深刻研读了专家们的深刻讨论&#xff0c;通过这部纪录片&#xff0c;我深刻感受到了数据库技…...

web前端之实现霓虹灯背景魔术卡、旋转的背景动画、模糊效果、边框、变量、filter

MENU 前言效果图htmlstyle 前言 代码段定义一个名为Magic Card的卡片&#xff0c;并通过一系列CSS属性和动画效果来美化和增强该卡片的视觉效果。 效果图 html <div class"card">Magic Card </div>style 代码 property --rotate {syntax: "<a…...

几款免费的时序数据库对比

InfluxDB、TDengine、OpenTSDB、QuestDB都是当前主流的时序数据库&#xff0c;它们在性能、功能、适用场景等方面各有特点。下面将从多个维度对这四个数据库进行对比分析&#xff1a; 一、性能 InfluxDB&#xff1a; 高效的时间序列数据写入性能&#xff0c;自定义TSM引擎&am…...

基于springboot的乐享田园系统

TOC springboot181基于springboot的乐享田园系统 第1章 绪论** 1.1 课题背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们思想上不…...

深入解析Objective-C中NSParagraphStyle的段落样式处理艺术

标题&#xff1a;深入解析Objective-C中NSParagraphStyle的段落样式处理艺术 在Objective-C的世界中&#xff0c;文本排版是一个复杂但至关重要的话题。NSParagraphStyle作为其中的核心组件&#xff0c;扮演着决定文本段落外观和布局的关键角色。本文将深入探讨NSParagraphSty…...

Qt编程技巧小知识点(2)GPIB缓存区数据读取

文章目录 Qt编程技巧小知识点&#xff08;2&#xff09;GPIB缓存区数据读取小结 Qt编程技巧小知识点&#xff08;2&#xff09;GPIB缓存区数据读取 大端小端的问题&#xff0c;其主要表现如下例子&#xff1a; 例如&#xff1a;输入为QByteArray str "#14M\xB6q\xC1\n&qu…...

数的个位相加

给定一个非负整数 num&#xff0c;反复将各个位上的数字相加&#xff0c;直到结果为一位数。返回这个结果。 示例 1: 输入: num 38输出: 2 解释: 各位相加的过程为&#xff1a; 38 --> 3 8 --> 11 11 --> 1 1 --> 2 由于 2 是一位数&#xff0c;所以返回 2。…...

专业技能(挖坑填坑)——MYSQL的索引、日志、事务、存储引擎、锁机制等相关原理

熟悉MySQL的使用&#xff0c;熟悉MYSQL的索引、日志、事务、存储引擎、锁机制等相关原理。 1.mysql索引&#xff0c;索引的底层数据结构实现 索引就是目录可以帮助快速的找到对应的资源。 MySQL默认的InnoDB存储引擎使用的索引底层数据结构是BTree。BTree是一种多路搜索查找树…...

C++(27): 线程池

目录 1. 概述 2. 例程 &#xff08;1&#xff09;ThreadPool.h &#xff08;2&#xff09;ThreadPool.cpp &#xff08;3&#xff09;Start.cpp &#xff08;4&#xff09;编译 1. 概述 线程池技术绝不是C独有的&#xff0c;Java和Python都有比较晚完善的线程池构造接口…...

每日一题-贪心算法

122. 买卖股票的最佳时机 II - 力扣&#xff08;LeetCode&#xff09; 55. 跳跃游戏 - 力扣&#xff08;LeetCode&#xff09; 这个题目一开始肯定是会懵&#xff0c;就比如说一开始先跳几步&#xff0c;之后再怎么跳&#xff0c;其实我们就可以用最大范围来算就行了&#xff0…...

PSO 算法实例(手动推导过程)

PSO 算法实例 引言正文PSO 算法步骤PSO 实例步骤1 定义目标函数步骤2 初始化每个粒子的位置和速度步骤3 使用目标函数进行评估步骤4 更新单个粒子的最佳位置(局部最优值)步骤5 更新全局最佳位置(全局最优值)步骤6 更新每个粒子的位置和速度步骤7 使用目标函数评估新的位置步…...

解决antd TreeSelect 返回值不包含父节点问题 -自定义组件(react)

在写一个表单时使用了antd的 TreeSelect&#xff0c;在对TreeSelect的值提交时发现&#xff0c;父节点的值在半选状态时未提交&#xff0c;在选中状态时&#xff08;子节点全选&#xff09;&#xff0c;子节点不提交&#xff0c;只提交父节点&#xff0c;这与后端需求不符&…...

花四小时,写了个在线实时绘制等值面图小软件,明晚上线,喜欢的小伙伴关注哦

科研党的福音&#xff0c;绘图再也不需要安装一堆软件了&#xff0c;可以在线绘图了&#xff1b; 只需要传入绘制的区间、色值、以及所需要绘制的数据就可以直接出图了&#xff0c;可绘制各种等值面图&#xff0c;比如降水分布&#xff0c;高温分布&#xff0c;人口分布&#x…...

c++的vector用法

文章目录 1. 创建和初始化 std::vector2. 添加和删除元素3. 访问和遍历元素4. std::vector 的其他常用操作 std::vector 是 C 标准库中的一个动态数组容器&#xff0c;提供了灵活的存储和访问功能。 1. 创建和初始化 std::vector #include <iostream> #include <vect…...

【Linux网络】Linux网络初探:开启网络世界的大门

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 前言&#xff1a;我们已经系统的学习了Linux的基本操作、进程、线程、文件、通信等待&#xff0c;但是在如今社会没有网络通信方式是万万不行的&#xff0c;今天我们就走进网络中&#xff0c;系统的学习一下有关Linux网…...

目录、用户与组、出错相关函数、时间函数

一、目录相关函数及属性 1、 opendir()函数 opendir 用于打开一个目录&#xff0c;并返回一个目录流指针。name&#xff1a;要打开的目录的路径。 返回值&#xff1a;成功时返回指向目录流的指针&#xff0c;失败时返回 NULL。 #include <dirent.h> DIR *opendir(con…...

<keep-alive> 一分钟了解

<keep-alive> 一分钟了解 <keep-alive> 是 Vue.js 提供的一个抽象组件&#xff0c;它的主要用途是在页面或组件切换时保留其状态&#xff0c;避免重复执行昂贵的渲染操作&#xff0c;从而提升应用性能。 文章目录 <keep-alive> 一分钟了解 一、 <keep-ali…...

Android 启动动画太生硬

跟 android:launchMode"singleTask"属性无关系 请禁用路由 ARouter.getInstance() .build(Routes.Main.MAIN) .withTransition(R.anim.activity_anim_in, R.anim.activity_anim_out).navigation() 正确做法是 val intent Intent(thisSplashActivity,MainActivit…...

深度学习中常用概念总结

最近在做深度学习&#xff0c;里面涉及到很多概念&#xff0c;有的名称都差不多容易记混。所以写这篇文章总结一下。眼过千遍不如手过一遍。 1. 轮数&#xff08;Epochs&#xff09;: 一轮&#xff08;Epoch&#xff09;指的是整个训练数据集在训练过程中被完整使用一次。…...

进 程

1.进程&#xff1a;进行中的程序。 微观串行&#xff0c;宏观并行。 程序的一次执行过程 进程是程序的一个实例 一个程序可以对应一个或多个进程。 2.为什么需要进程&#xff1f; 3.进程的组成部分&#xff1a; 进程 pcb 块 栈|堆|bss|data|text 其中&#xff1a; 家族…...

Taro-UI

一、安装Taro UI 进入项目文件&#xff0c;执行项目 //使用yarn安装taro-ui yarn add taro-ui//使用npm安装taro-ui npm install taro-ui//注&#xff1a;因为要支持自定义主题功能&#xff0c;需要将样式从组件中抽离出来&#xff0c;在微信小程序中依赖 globalClass 功能&a…...

TypeScript 之 JavaScript文件类型检查

启用对 JavaScript 文件的类型检查 在 TypeScript 编译选项 compilerOptions 全部配置项 中&#xff0c;可以通过以下2个属性配置 JavaScript Support&#xff1a; allowJs 是否允许编译 JavaScript 文件。默认值是 false。在默认情况下&#xff0c;TypeScript 编译器只处理 .…...

基本数据类型变量间的自动提升与强制转换以及进制的转换

基本数据类型变量间的自动提升与强制转换 测试基本数据类型的运算规则 这里基本类型不包括布尔 运算规则 自动类型提升 当容量小的变量与容量大的变量做运算时&#xff0c;结果自动转换容量大的数据类型 说明&#xff1a;此时容量大小&#xff0c;指的是数据范围大小&…...