Pygame 大魚吃小魚

【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;不考慮創…