【Pygame 大鱼吃小鱼】是一款基于Python编程语言和Pygame库开发的趣味游戏。Pygame是Python中一个广泛用于开发2D游戏的开源模块集合,它提供了丰富的功能,如窗口管理器、事件处理、图形绘制等,使得初学者也能快速上手创建游戏。

   这段 Python 代码使用Pygame库实现了一个经典的 “大鱼吃小鱼” 游戏。游戏中,玩家控制一条粉色的鱼,通过方向键移动,吃掉比自己小的鱼和食物来增长大小和分数,同时要避开比自己大的鱼。当分数达到 1200 时,游戏挑战成功。


下面展示一下界面图:(我设置的是分数达到1200自动结束游戏,因为后期如果小鱼吃的太多会膨胀整个屏幕)

后期我还将持续完善这个项目,比如添加音效等等效果,达到锦上添花的效果。


1. 初始化部分

功能:导入必要的库,初始化pygame和字体模块,设置游戏窗口的大小、标题和帧率,定义颜色常量和字体对象。

import pygame
import random
import sys
import math# 初始化pygame库,为后续使用pygame的各种功能做准备
pygame.init()# 初始化pygame的字体模块,确保后续能正常使用字体来显示文字
pygame.font.init()
# 尝试查找系统中的宋体或黑体字体,用于显示中文
font_path = pygame.font.match_font('simsun') or pygame.font.match_font('simhei')
# 如果未找到中文字体,则使用系统默认字体
if not font_path:font_path = pygame.font.get_default_font()
# 创建不同大小的字体对象,用于游戏中的不同文本显示
game_font = pygame.font.Font(font_path, 24)
title_font = pygame.font.Font(font_path, 48)
small_font = pygame.font.Font(font_path, 16)# 游戏相关的设置
SCREEN_WIDTH = 1200  # 游戏窗口的宽度
SCREEN_HEIGHT = 800  # 游戏窗口的高度
FPS = 60  # 游戏的帧率,即每秒刷新的帧数
WHITE = (255, 255, 255)  # 白色,用于文字显示等
BLACK = (0, 0, 0)  # 黑色,用于背景填充等
PINK = (255, 192, 203)  # 粉色,玩家鱼的颜色
RED = (255, 0, 0)  # 红色
GREEN = (0, 255, 0)  # 绿色
BLUE = (0, 0, 255)  # 蓝色
YELLOW = (255, 255, 0)  # 黄色,食物的颜色
COLORS = [RED, GREEN, BLUE]  # 敌人鱼的颜色列表# 创建游戏窗口,设置窗口的大小和标题(传入参数)
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("大鱼吃小鱼")
# 创建一个时钟对象,用于控制游戏的帧率.游戏主循环中,通常会调用 clock.tick(FPS)
clock = pygame.time.Clock()

2. 类定义部分

功能:定义了FishFood两个类,分别表示游戏中的鱼和食物。Fish类包含了鱼的属性和方法,如移动、旋转、生长等;Food类用于创建食物对象。

# 定义Fish类,继承自pygame的Sprite类,用于表示游戏中的鱼
class Fish(pygame.sprite.Sprite):def __init__(self, x, y, size, color, is_player=False):# 调用父类的构造函数super().__init__()self.size = size  # 鱼的大小# 创建一个透明的Surface对象,SRCALPHA让鱼的图像边缘不会有难看的黑边,能和游戏背景自然融合。self.original_image = pygame.Surface((size * 2, size), pygame.SRCALPHA)# 绘制鱼的身体,使用椭圆表示pygame.draw.ellipse(self.original_image, color, (0, 0, size * 2, size))# 绘制鱼的眼睛,白色外圈和黑色内圈pygame.draw.circle(self.original_image, WHITE, (int(size * 1.5), int(size / 2)), int(size / 8))pygame.draw.circle(self.original_image, BLACK, (int(size * 1.5), int(size / 2)), int(size / 16))# 绘制鱼尾,使用多边形表示。下面的函数可以绘制任意边数的封闭图形points = [(0, size // 2), (size // 2, 0), (size // 2, size)]pygame.draw.polygon(self.original_image, color, points)self.image = self.original_image  # 当前显示的鱼的图像self.rect = self.image.get_rect(center=(x, y))  # 鱼的矩形区域,用于碰撞检测和位置管理# 使用浮点数来存储鱼的精确位置,避免整数运算带来的精度损失self.float_x = xself.float_y = yself.angle = 0  # 鱼当前的朝向角度self.target_angle = 0  # 平滑转向的目标角度self.is_player = is_player  # 标记这条鱼是否为玩家控制的鱼# 根据鱼的大小和是否为玩家鱼来计算鱼的速度self.speed = self.calculate_speed(size, is_player)self.score = size  # 鱼的分数,与大小相关# AI行为参数self.direction_change_timer = 0  # 方向改变计时器# 随机设置方向改变的间隔帧数,范围在60到120帧之间self.direction_change_interval = random.randint(60, 120)def calculate_speed(self, size, is_player):# 玩家鱼的基础速度为5,敌人鱼的基础速度为1到3之间的随机值base_speed = 5 if is_player else random.randint(1, 3)# 鱼的速度随着大小的增加而减小,确保大鱼速度慢,小鱼速度快return max(1, base_speed * (20 / (size + 10)))def update(self):if self.is_player:# 如果是玩家鱼,处理玩家的输入 L108self.handle_player_input()else:# 如果是敌人鱼,进行平滑移动 L134self.move_smoothly()# 将浮点数位置转换为整数位置,更新矩形区域的位置self.rect.centerx = int(self.float_x)self.rect.centery = int(self.float_y)# 边界检查,确保鱼不会移出游戏窗口if self.rect.left < 0:self.rect.left = 0self.float_x = self.rect.centerxif self.rect.right > SCREEN_WIDTH:self.rect.right = SCREEN_WIDTHself.float_x = self.rect.centerxif self.rect.top < 0:self.rect.top = 0self.float_y = self.rect.centeryif self.rect.bottom > SCREEN_HEIGHT:self.rect.bottom = SCREEN_HEIGHTself.float_y = self.rect.centerydef handle_player_input(self):# 获取当前所有按键的状态keys = pygame.key.get_pressed()dx = 0  # x轴方向的移动量dy = 0  # y轴方向的移动量# 根据按键状态更新移动量if keys[pygame.K_LEFT]:dx = -self.speedif keys[pygame.K_RIGHT]:dx = self.speedif keys[pygame.K_UP]:dy = -self.speedif keys[pygame.K_DOWN]:dy = self.speed# 更新浮点数位置self.float_x += dxself.float_y += dy# 如果有移动,计算鱼的朝向角度。让鱼的朝向跟着移动方向走if dx != 0 or dy != 0:self.target_angle = math.degrees(math.atan2(dy, dx))# 进行平滑旋转,转向更丝滑。self.smooth_rotate()def move_smoothly(self):# 增加方向改变计时器的值self.direction_change_timer += 1# 当计时器达到间隔帧数时,进行方向改变if self.direction_change_timer >= self.direction_change_interval:self.direction_change_timer = 0# 随机设置下一次方向改变的间隔帧数self.direction_change_interval = random.randint(60, 120)# 随机选择移动模式(1-4)move_pattern = random.randint(1, 4)if move_pattern == 1:# 直线运动,随机选择一个方向self.target_angle = random.uniform(0, 360)elif move_pattern == 2:# 追逐玩家,有50%的概率触发if player and random.random() < 0.5:# 计算玩家与当前鱼的位置差dx = player.rect.centerx - self.float_xdy = player.rect.centery - self.float_yif dx != 0 or dy != 0:# 计算追逐的目标角度self.target_angle = math.degrees(math.atan2(dy, dx))elif move_pattern == 3:# 远离玩家,有30%的概率触发if player and random.random() < 0.3:# 计算当前鱼与玩家的位置差dx = self.float_x - player.rect.centerxdy = self.float_y - player.rect.centeryif dx != 0 or dy != 0:# 计算远离的目标角度self.target_angle = math.degrees(math.atan2(dy, dx))# 进行平滑旋转self.smooth_rotate()# 将角度转换为速度分量rad_angle = math.radians(self.angle)dx = math.cos(rad_angle) * self.speeddy = math.sin(rad_angle) * self.speed# 更新浮点数位置self.float_x += dxself.float_y += dy# 平滑旋转,让鱼转向时避免 “瞬间跳转”,而是逐帧旋转,更丝滑def smooth_rotate(self):# 计算当前角度与目标角度的差值,确保差值在-180到180度之间,选择最短路径旋转。angle_diff = (self.target_angle - self.angle) % 360if angle_diff > 180:angle_diff -= 360# 每帧最多旋转5度,避免角度突变。abs()计算数值的绝对值。max_rotation = 5if abs(angle_diff) > max_rotation:# 根据角度差的正负,决定旋转方向self.angle += max_rotation if angle_diff > 0 else -max_rotationelse:# 角度差很小,直接对齐目标角度self.angle = self.target_angle# 旋转鱼的图像,使其朝向正确的方向self.image = pygame.transform.rotate(self.original_image,-self.angle)# 更新矩形区域的中心位置,确保旋转后位置不变self.rect = self.image.get_rect(center=self.rect.center)# 用于控制游戏中鱼的有序运动模式def move_orderly(self):# 随机选择移动模式move_pattern = random.randint(1, 4)# 根据模式移动if move_pattern == 1:# 直线运动rad_angle = math.radians(self.angle)dx = math.cos(rad_angle) * self.speeddy = math.sin(rad_angle) * self.speedelif move_pattern == 2:# 圆周运动angle_rad = math.radians(self.rect.x * 2)dx = self.speeddy = math.sin(angle_rad) * self.speed * 0.5elif move_pattern == 3:# 波浪运动angle_rad = math.radians(self.rect.x * 0.5)dx = self.speeddy = math.sin(angle_rad) * self.speed * 0.3else:# 追逐玩家if player:  # 确保玩家存在dx = player.rect.centerx - self.rect.centerxdy = player.rect.centery - self.rect.centerydistance = max(1, math.sqrt(dx * dx + dy * dy))  # 避免除以零dx = (dx / distance) * self.speed * 0.7dy = (dy / distance) * self.speed * 0.7# 移动鱼self.rect.x += int(dx)  # 取整以减少抖动self.rect.y += int(dy)  # 取整以减少抖动# 旋转鱼的图像以匹配移动方向if dx != 0 or dy != 0:# math.degrees() 将弧度转换为角度(范围:[-180°, 180°])# math.atan2(dy, dx) 返回向量的弧度值(范围:[-π, π])self.angle = math.degrees(math.atan2(dy, dx))# 调用rotate方法,根据新角度旋转鱼的图像self.rotate()# 边界反弹(左边界<0或者右边界等于宽度)if self.rect.left <= 0 or self.rect.right >= SCREEN_WIDTH:self.angle = 180 - self.angleif self.rect.top  <= 0 or self.rect.bottom >= SCREEN_HEIGHT:self.angle = -self.angledef rotate(self):# 旋转鱼的图像self.image = pygame.transform.rotate(self.original_image, -self.angle)self.rect = self.image.get_rect(center=self.rect.center)def grow(self, amount):# 鱼的大小增加指定的量self.size += amount# 更新鱼的图像self.original_image = pygame.Surface((self.size * 2, self.size), pygame.SRCALPHA)# 根据是否为玩家鱼,选择不同的颜色绘制鱼的身体pygame.draw.ellipse(self.original_image, PINK if self.is_player else BLUE, (0, 0, self.size * 2, self.size))# 绘制鱼的眼睛pygame.draw.circle(self.original_image, WHITE, (int(self.size * 1.5), int(self.size / 2)), int(self.size / 8))pygame.draw.circle(self.original_image, BLACK, (int(self.size * 1.5), int(self.size / 2)), int(self.size / 16))# 绘制鱼尾:polygon多边形points = [(0, self.size // 2), (self.size // 2, 0), (self.size // 2, self.size)]pygame.draw.polygon(self.original_image, PINK if self.is_player else BLUE, points)self.image = self.original_image  # 更新当前显示的图像self.rect = self.image.get_rect(center=self.rect.center)  # 更新矩形区域的位置self.score = self.size  # 更新分数# 根据新的大小重新计算鱼的速度self.speed = self.calculate_speed(self.size, self.is_player)# 定义Food类,继承自pygame的Sprite类,用于表示游戏中的食物
class Food(pygame.sprite.Sprite):def __init__(self, x, y):# 调用父类的构造函数super().__init__()# 随机生成食物的大小,范围在5到10之间self.size = random.randint(5, 10)# 创建一个透明的Surface对象,用于绘制食物的图像self.image = pygame.Surface((self.size * 2, self.size * 2), pygame.SRCALPHA)# 绘制食物,使用黄色的圆形表示pygame.draw.circle(self.image, YELLOW, (self.size, self.size), self.size)self.rect = self.image.get_rect(center=(x, y))  # 食物的矩形区域,用于碰撞检测和位置管理

3. 辅助函数部分

功能:定义了一些辅助函数,用于创建鱼和食物对象、在屏幕上绘制文本、显示游戏开始和结束屏幕。

# 创建鱼的函数,随机生成鱼的位置、大小和颜色
def create_fish():x = random.randint(50, SCREEN_WIDTH - 50)y = random.randint(50, SCREEN_HEIGHT - 50)size = random.randint(10, 40)color = random.choice(COLORS)return Fish(x, y, size, color)# 创建食物的函数,随机生成食物的位置
def create_food():x = random.randint(20, SCREEN_WIDTH - 20)y = random.randint(20, SCREEN_HEIGHT - 20)return Food(x, y)# 在指定的Surface上绘制文本的函数
def draw_text(surface, text, font, color, x, y):# 渲染文本,返回一个包含文本的Surface对象text_surface = font.render(text, True, color)# 获取文本Surface的矩形区域,并将其中心位置设置为指定的坐标text_rect = text_surface.get_rect(center=(x, y))# 将文本Surface绘制到指定的Surface上surface.blit(text_surface, text_rect)# 显示游戏开始屏幕的函数
def show_start_screen():screen.fill(BLACK)  # 填充屏幕为黑色# 绘制游戏标题draw_text(screen, "大鱼吃小鱼", title_font, WHITE, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 4)# 绘制游戏说明draw_text(screen, "使用方向键移动你的鱼", game_font, WHITE, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2)draw_text(screen, "吃掉比你小的鱼,避开比你大的鱼", game_font, WHITE, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2 + 50)draw_text(screen, "分数达到1200时挑战成功", game_font, WHITE, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2 + 100)draw_text(screen, "按任意键开始游戏", game_font, WHITE, SCREEN_WIDTH / 2, SCREEN_HEIGHT * 3 / 4)pygame.display.flip()  # 更新整个屏幕的显示waiting = Truewhile waiting:clock.tick(FPS)  # 控制帧率for event in pygame.event.get():if event.type == pygame.QUIT:# 如果用户关闭窗口,退出游戏pygame.quit()sys.exit()if event.type == pygame.KEYUP:# 如果用户按下任意键,结束等待,开始游戏waiting = False# 显示游戏结束屏幕的函数
def show_game_over_screen(score, is_success=False):screen.fill(BLACK)  # 填充屏幕为黑色if is_success:# 如果游戏成功,显示成功信息和最终得分draw_text(screen, "挑战成功!", title_font, WHITE, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 4)draw_text(screen, f"你的最终得分: {score}", game_font, WHITE, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2)else:# 如果游戏失败,显示游戏结束信息和得分draw_text(screen, "游戏结束", title_font, WHITE, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 4)draw_text(screen, f"你的得分: {score}", game_font, WHITE, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2)pygame.display.flip()  # 更新整个屏幕的显示

4. 游戏主函数部分

功能:游戏的主函数,负责初始化游戏状态、创建精灵组、处理游戏事件、检测碰撞、更新精灵状态、渲染游戏画面,并根据游戏结果显示相应的屏幕。

# 游戏主函数
def main():global player  # 使玩家鱼对象在全局范围内可访问# 游戏主循环running = Truegame_over = Falsescore = 0success_score = 1200  # 成功分数阈值# 游戏状态初始化while running:# 创建玩家鱼,初始位置在屏幕中心,大小为20,颜色为粉色player = Fish(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2, 20, PINK, True)# 创建精灵组,用于管理所有的精灵对象all_sprites = pygame.sprite.Group()fish_sprites = pygame.sprite.Group()food_sprites = pygame.sprite.Group()all_sprites.add(player)  # 将玩家鱼添加到所有精灵组中# 初始化游戏,创建10条敌人鱼for i in range(10):fish = create_fish()all_sprites.add(fish)fish_sprites.add(fish)# 初始化游戏,创建20个食物for i in range(20):food = create_food()all_sprites.add(food)food_sprites.add(food)# 显示游戏开始屏幕show_start_screen()# 游戏主循环score = 0game_over = Falsesuccess = Falsesuccess_time = 0while running and not game_over and not success:clock.tick(FPS)  # 控制帧率# 事件处理for event in pygame.event.get():if event.type == pygame.QUIT:# 如果用户关闭窗口,结束游戏running = False# 更新所有精灵的状态all_sprites.update()# 检测玩家与食物的碰撞food_collisions = pygame.sprite.spritecollide(player, food_sprites, True)for food in food_collisions:player.grow(1)  # 玩家鱼大小增加1score += food.size  # 增加分数# 生成新的食物new_food = create_food()all_sprites.add(new_food)food_sprites.add(new_food)# 检测玩家与其他鱼的碰撞fish_collisions = pygame.sprite.spritecollide(player, fish_sprites, False)for fish in fish_collisions:if player.size > fish.size:# 如果玩家鱼比其他鱼大,吃掉这条鱼player.grow(fish.size // 5)  # 玩家鱼大小增加被吃的鱼的大小的五分之一score += fish.score  # 增加分数fish.kill()  # 移除被吃的鱼# 生成新的鱼new_fish = create_fish()all_sprites.add(new_fish)fish_sprites.add(new_fish)elif player.size < fish.size:# 如果玩家鱼比其他鱼小,游戏结束game_over = True# 检查是否达到成功分数if score >= success_score:success = Truesuccess_time = pygame.time.get_ticks()  # 记录成功的时间# 渲染游戏,填充屏幕为蓝色背景screen.fill((100, 180, 255))# 绘制所有精灵all_sprites.draw(screen)# 显示分数和玩家鱼的大小draw_text(screen, f"分数: {score}/{success_score}", small_font, WHITE, 60, 20)draw_text(screen, f"大小: {player.size}", small_font, WHITE, 60, 40)pygame.display.flip()  # 更新整个屏幕的显示# 游戏结束,显示结果if running:if success:# 如果游戏成功,显示成功屏幕,并等待5秒show_game_over_screen(score, success)while pygame.time.get_ticks() - success_time < 5000:clock.tick(FPS)for event in pygame.event.get():if event.type == pygame.QUIT:running = Falserunning = Falseelse:# 如果游戏失败,显示游戏结束屏幕,等待用户操作show_game_over_screen(score, success)waiting = Truewhile waiting:clock.tick(FPS)for event in pygame.event.get():if event.type == pygame.QUIT:running = Falsewaiting = Falsepygame.quit()  # 退出pygame库sys.exit()  # 退出程序if __name__ == "__main__":main()  # 程序入口,调用主函数开始游戏

模块化处理总结

  • 初始化模块:负责导入库、初始化pygame和字体模块、设置游戏窗口和帧率等。
  • 类定义模块:定义FishFood类,封装鱼和食物的属性和方法。
  • 辅助函数模块:包含创建鱼和食物对象、绘制文本、显示游戏开始和结束屏幕的函数。
  • 游戏主函数模块:控制游戏的主循环,处理游戏事件、碰撞检测、状态更新和画面渲染。

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

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

相关文章

【为什么在触发的事件中修改控件属性需要使用`Invoke`】

在C#中&#xff0c;特别是在使用Windows Forms或WPF等GUI框架时&#xff0c;控件的属性和状态通常只能在创建它们的线程&#xff08;即UI线程&#xff0c;即主线程或用户界面线程&#xff09;中直接修改。这是由于这些框架的设计基于单线程模型&#xff0c;其中所有与用户界面&…

Android 当apk是系统应用时,无法使用webView的解决方案

最近在做项目时&#xff0c;遇到了一个无法使用webView的问题&#xff0c;apk是系统应用&#xff0c;点击加载webView时应用就是崩溃&#xff0c;原因是系统应用时&#xff0c;Android会觉得webView不安全&#xff0c;不避让加载。 解决的思路就是使用映射&#xff0c;把原生的…

ArcGIS Pro无插件加载(无偏移)天地图!一次添加长久使用

以前我们介绍过&#xff1a;ArcGIS无插件加载&#xff08;无偏移&#xff09;天地图。这次我们来介绍ArcGIS Pro中如何添加天地图。 我们将通过从天地图官网自己添加服务链接并添加至收藏的方式以及应急的方法来做本次的介绍。天地图的数据主要包括影像、电子地图、地形图等。我…

Go堆内存管理

# Go堆内存管理 1. Go内存模型层级结构 Golang内存管理模型与TCMalloc的设计极其相似。基本轮廓和概念也几乎相同&#xff0c;只是一些规则和流程存在差异。 2. Go内存管理的基本概念 Go内存管理的许多概念在TCMalloc中已经有了&#xff0c;含义是相同的&#xff0c;只是名字…

零售 EDI:Chewy EDI 项目注意事项

在此前的文章《供应商对接Chewy的EDI需求》中&#xff0c;介绍了Chewy的EDI需求&#xff0c;本文主要为大家分享Chewy对于各个业务单据的细节性需求&#xff0c;了解这些细节性注意事项将帮助企业快速基于知行软件提供的EDI服务与Chewy建立EDI对接。 基于知行之桥EDI系统能够通…

Android录制视频自带铺满多行水印

文章目录 引言环境要求代码实现总结 引言 之前做过几种水印需求&#xff0c;这篇文章是关于使用Android原生库开发录制视频自带满帧文字水印。 环境要求 Android 7.0以上Android Studio &#xff0c;官方开发者官网视频录制功能参考开源库PictureSelector的camerax库 //用到的…

观远ChatBI:加速零售消费企业数据驱动的敏捷决策

近年来&#xff0c;随着国产大模型&#xff08;如DeepSeek&#xff09;的快速发展&#xff0c;企业对智能化数据分析工具的需求日益增长。观远数据推出的ChatBI&#xff0c;基于大语言模型&#xff08;LLM&#xff09;打造&#xff0c;旨在通过自然语言交互降低数据分析门槛&am…

鸿蒙NEXT-鸿蒙三层架构搭建,嵌入HMRouter,实现便捷跳转,新手攻略。(1/3)

接下来&#xff0c;我将手把手带领大家去完善&#xff0c;搭建一个鸿蒙的三层架构&#xff0c;另实现HMRouter的嵌入。完成后&#xff0c;大家可任意跳转页面&#xff0c;在三层架构中&#xff0c;书写属于自己的篇章。 第0步&#xff0c;项目与AGC华为控制台关联起来 首先AG…

鸿蒙ArkTs仿网易云音乐项目:架构剖析与功能展示

鸿蒙ArkTs仿网易云音乐项目&#xff1a;架构剖析与功能展示 一、引言 在移动应用开发的浪潮中&#xff0c;音乐类应用始终占据着重要的一席之地。网易云音乐凭借其丰富的音乐资源、个性化的推荐算法和独特的社交互动功能&#xff0c;深受广大用户的喜爱。本文将详细介绍一个基…

【web 安全】从 HTTP 无状态到现代身份验证机制

文章目录 Web 安全与系统设计Web存在的问题&#xff1a;Web 是无状态的解决方案一、早期解决方案&#xff1a;Session Cookie 的诞生二、第二阶段&#xff1a;Token 的出现&#xff08;前后端分离 移动端的解决方案&#xff09;三、分析总结&#xff1a;1.早期版本&#xff1…

FlutterUnit TolyUI | 布局游乐场

FlutterUnit 基于 TolyUI 大大简化了界面构建的代码复杂程度&#xff0c;因此之前想要实现的一些小功能&#xff0c;就可以轻松支持。布局游乐场是通过交互的方式来 直观体验 组件的布局特性&#xff0c;从而更易学和掌握。目前 FlutterUnit 已在 知识集录模块新增了 布局宝库&…

【数据分析一:Data Collection】信息检索

本节内容含有各典型数据集的推荐&#xff0c;以及其网址&#xff0c;大家根据需要自取 一、检索 最简单、最灵活的数据获取方式就是依靠检索&#xff1a; Google&#xff1a;更适合搜索英文信息 Google Dataset Search&#xff08;Google 数据集搜索&#xff09; 网址&…

23.ssr和csr的对比?如何依赖node.js实现

1.为什么说ssr 的node中间层请求速度快。相当于内网&#xff1f; 那vue.js加载怎么没有ssr和csr的说法啊 第一问&#xff1a;为什么说 SSR 的 Node 中间层请求速度快&#xff1f;是不是相当于内网&#xff1f; ✅ 是的&#xff0c;本质上就是「内网请求」&#xff0c;所以更快…

力扣刷题(第六十四天)

灵感来源 - 保持更新&#xff0c;努力学习 - python脚本学习 第一个错误的版本 解题思路 初始化左右边界&#xff1a;左边界 left 1&#xff0c;右边界 right n。二分查找循环&#xff1a; 计算中间版本号 mid。若 mid 是错误版本&#xff0c;说明第一个错误版本在 [le…

【图像处理入门】11. 深度学习初探:从CNN到GAN的视觉智能之旅

摘要 深度学习为图像处理注入了革命性动力。本文将系统讲解卷积神经网络(CNN)的核心原理,通过PyTorch实现图像分类实战;深入解析迁移学习的高效应用策略,利用预训练模型提升自定义任务性能;最后揭开生成对抗网络(GAN)的神秘面纱,展示图像生成与增强的前沿技术。结合代…

C++法则4: 如果一个构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数。

C法则4&#xff1a; 如果一个构造函数的第一个参数是自身类类型的引用&#xff0c;且任何额外参数都有默认值&#xff0c;则此构造函数是拷贝构造函数。 拷贝构造函数的定义&#xff1a; 第一个参数是自身类类型的引用&#xff1a; 必须是引用&#xff08;通常为const引用&…

从头搭建环境安装k8s遇到的问题

基本信息 master节点IP&#xff1a; 172.31.0.3 node01节点IP&#xff1a;172.31.0.4 node02节点IP&#xff1a;172.31.0.5 子网掩码&#xff1a;255.255.0.0 网关&#xff1a;172.31.0.2 DNS:114.114.114.114 安装前要检查的信息 检查三台主机的mac地址是否重复&#xff1a…

Flask入门指南:从零构建Python微服务

1. Flask 是什么&#xff1f; Flask 是一个 微框架&#xff08;Microframework&#xff09;&#xff0c;特点包括&#xff1a; 轻量灵活&#xff1a;核心仅包含路由和模板引擎&#xff0c;其他功能通过扩展实现易于学习&#xff1a;代码直观&#xff0c;适合快速开发小型应用…

【LINUX网络】网络socet接口的基本使用以及实现简易UDP通信

根据本系列上两篇关于网络的初识介绍&#xff0c;现在我们开始实现一个UDP接口&#xff0c;以加强对该接口的理解。 1 . 服务器端 在本篇中&#xff0c;主要按照下面内容来实现&#xff1a; 创建并封装服务端&#xff1a;了解创建服务端的基本步骤 创建并封装客户端&#xff0…

MySQL的索引事务

索引 是什么 类似于目录&#xff0c;提高查询的速度&#xff0c;但是本身会占用空间&#xff0c;增删数据的时候也需要维护索引。所以查询操作频繁的时候可以创建索引。如果非条件查询列&#xff0c;或经常做插入、修改操作&#xff0c;或磁盘空间不足时&#xff0c;不考虑创…