」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何建立您的第一個 Python 遊戲:使用 PyGame 創建簡單射擊遊戲的逐步指南

如何建立您的第一個 Python 遊戲:使用 PyGame 創建簡單射擊遊戲的逐步指南

發佈於2024-11-07
瀏覽:674

How to Build Your First Python Game: A Step-by-Step Guide to Creating a Simple Shooter with PyGame

Hi lovely readers,

Have you ever wanted to create your own video game? Maybe you’ve thought about building a simple shooter game where you can move around, dodge incoming enemies, and blast away at targets. Well, today’s your lucky day! We’re going to dive into the wonderful world of PyGame, a fantastic Python library that makes game development accessible and fun, even if you’ve only dabbled in Python with basic console applications.

If you already know the basics of Python—things like variables, loops, conditions, and functions—you’re in the perfect spot to start building your own game. Don’t worry if you’ve never used PyGame before; by the end of this post, you’ll have a basic but functional game to show off. So let’s get started!

Why PyGame?

Before we jump into the code, let’s take a moment to talk about why PyGame is such a great tool for building games, especially if you’re a beginner. PyGame is a 2D desktop game library that is:

  • Easy to Learn: PyGame is straightforward and beginner-friendly. It abstracts many of the complex parts of game development, letting you focus on building your game.
  • Cross-Platform: Games made with PyGame can run on Windows, Mac, and Linux without any changes to your code.
  • Active: There’s a large and helpful community of developers using PyGame. You can find tons of tutorials, examples, and forums where you can ask questions and share your projects.

Setting Up Your Environment

Before we start coding, you’ll need to have Python installed on your computer. If you don’t have it yet, head over to python.org and download the latest version. It’s important to have Python set up correctly because it’s the foundation that PyGame runs on.

Next, you need to install PyGame. This is a library that provides the tools you need to create games, like managing windows, drawing shapes, and handling user input. Installing PyGame is easy—just open your terminal (or command prompt if you’re on Windows) and type:

pip install pygame

Once that’s done, you’re ready to start creating your game!

Step 1: Setting Up the Game Window

The first thing we need to do is create a window where the game will run. This window is where all the action will happen, so think of it as the stage for your game. Let’s write the code to set this up.

import pygame
import sys

# Initialize PyGame
pygame.init()

# Set up the game window
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Simple Shooter Game")

# Set the frame rate
clock = pygame.time.Clock()

# Main game loop
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    # Fill the screen with a color (black in this case)
    screen.fill((0, 0, 0))

    # Update the display
    pygame.display.flip()

    # Cap the frame rate at 60 frames per second
    clock.tick(60)

Let’s break this down:

  1. Importing Libraries: We start by importing pygame and sys. The pygame library is what we’ll use to create the game, while sys helps us cleanly exit the program when needed.

  2. Initializing PyGame: The line pygame.init() is crucial—it sets up all the modules that PyGame needs to run. You should always call this at the beginning of your PyGame projects.

  3. Creating the Game Window: We use pygame.display.set_mode() to create a window with a width of 800 pixels and a height of 600 pixels. This is where everything in our game will be displayed. The pygame.display.set_caption() function lets us set the title of the window to something meaningful, like "Simple Shooter Game".

  4. Setting Up the Frame Rate: The clock = pygame.time.Clock() line creates a clock object that helps us control how fast the game runs. By setting the frame rate to 60 frames per second, we ensure that the game runs smoothly.

  5. Main Game Loop: The while True loop is the heart of our game. It keeps running, allowing us to update the game and check for events like closing the window. Inside this loop:
    * Event Handling: We use pygame.event.get() to check if the player wants to quit the game. If they do, we call pygame.quit() to clean up and sys.exit() to exit the program.
    * Drawing the Background: The screen.fill((0, 0, 0)) line fills the screen with black, essentially clearing it for the next frame.
    * Updating the Display: Finally, pygame.display.flip() updates the window to show whatever we’ve drawn.

When you run this code, you should see a plain black window. Congratulations! You’ve just set up the foundation of your game.

Step 2: Adding the Player

Now that we have a game window, let’s add something more interesting—a player character. For simplicity, we’ll represent the player as a rectangle that you can move left and right. The enemies will also be represented as rectangles, keeping things simple and focused on the game logic rather than complex graphics

# Player settings
player_width = 50
player_height = 60
player_x = screen_width // 2 - player_width // 2
player_y = screen_height - player_height - 10
player_speed = 5

# Main game loop
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    # Handle player movement
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and player_x > 0:
        player_x -= player_speed
    if keys[pygame.K_RIGHT] and player_x 



Here’s what’s going on:

  1. Player Settings: We define the player’s size (player_width and player_height), starting position (player_x and player_y), and speed (player_speed). The starting position is calculated so that the player appears centered horizontally near the bottom of the window.

  2. Handling Player Movement: Inside the main game loop, we check which keys are pressed using pygame.key.get_pressed(). This function returns a list of all keys on the keyboard, with a True value for the keys that are currently pressed. If the left arrow key is pressed, and the player isn’t at the edge of the screen, we move the player to the left by subtracting player_speed from player_x. Similarly, we move the player to the right if the right arrow key is pressed.

  3. Drawing the Player: The pygame.draw.rect() function draws a rectangle (our player) on the screen. The parameters are the screen to draw on, the color of the rectangle (a shade of blue in this case), and the rectangle’s position and size.

When you run this code, you’ll see a blue rectangle that you can move left and right using the arrow keys. This rectangle is our player, and it will be the hero of our game.

Step 3: Shooting Bullets

What’s a shooter game without some shooting? Let’s add the ability to fire bullets. We’ll create a bullet each time the player presses the space bar.

# Bullet settings
bullet_width = 5
bullet_height = 10
bullet_speed = 7
bullets = []

# Main game loop
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                # Create a bullet at the current player position
                bullet_x = player_x   player_width // 2 - bullet_width // 2
                bullet_y = player_y
                bullets.append(pygame.Rect(bullet_x, bullet_y, bullet_width, bullet_height))

    # Handle player movement
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and player_x > 0:
        player_x -= player_speed
    if keys[pygame.K_RIGHT] and player_x  0]

    # Fill the screen with black
    screen.fill((0, 0, 0))

    # Draw the player
    pygame.draw.rect(screen, (0, 128, 255), (player_x, player_y, player_width, player_height))

    # Draw the bullets
    for bullet in bullets:
        pygame.draw.rect(screen, (255, 255, 255), bullet)

    # Update the display
    pygame.display.flip()

    # Cap the frame rate at 60 FPS
    clock.tick(60)

Let’s break this down:

  1. Bullet Settings: We define the bullet’s size (bullet_width and bullet_height), speed (bullet_speed), and a list (bullets) to keep track of all active bullets.

  2. Firing Bullets: Inside the main loop, we check for a KEYDOWN event, which occurs when any key is pressed. If the space bar (pygame.K_SPACE) is pressed, we create a new bullet at the player’s current position. The bullet’s x-position is calculated to be centered horizontally with the player, and the bullet is then added to the bullets list.

  3. Updating Bullet Positions: Each bullet in the bullets list is moved upwards by subtracting bullet_speed from its y-position. Bullets that move off the top of the screen are removed from the list to save memory.

  4. Drawing Bullets: We loop through the bullets list and use pygame.draw.rect() to draw each bullet on the screen.

Now, when you run the game, pressing the space bar will shoot white bullets from the player’s position. The bullets move upward, just like you’d expect in a shooter game.

Step 4: Adding Enemies

Let’s make the game more challenging by adding enemies that the player needs to shoot. We’ll start by creating some enemies that move down the screen toward the player. Again, we’ll keep things simple by representing the enemies as red rectangles.

import random

# Enemy settings
enemy_width = 50
enemy_height = 60
enemy_speed = 2
enemies = []

# Spawn an enemy every 2 seconds
enemy_timer = 0
enemy_spawn_time = 2000

# Main game loop
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                bullet_x = player_x   player_width // 2 - bullet_width // 2
                bullet_y = player_y
                bullets.append(pygame.Rect(bullet_x, bullet_y, bullet_width, bullet_height))

    # Handle player movement
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and player_x > 0:
        player_x -= player_speed
    if keys[pygame.K_RIGHT] and player_x  0]

    # Update enemy positions and spawn new ones
    current_time = pygame.time.get_ticks()
    if current_time - enemy_timer > enemy_spawn_time:
        enemy_x = random.randint(0, screen_width - enemy_width)
        enemy_y = -enemy_height
        enemies.append(pygame.Rect(enemy_x, enemy_y, enemy_width, enemy_height))
        enemy_timer = current_time

    for enemy in enemies:
        enemy.y  = enemy_speed

    # Remove enemies that are off the screen
    enemies = [enemy for enemy in enemies if enemy.y 



Here’s how we’ve added enemies:

  1. Enemy Settings: We define the size (enemy_width and enemy_height), speed (enemy_speed), and a list (enemies) to track all active enemies.

  2. Spawning Enemies: We use a timer to spawn a new enemy every 2 seconds. The current time is tracked with pygame.time.get_ticks(). If enough time has passed since the last enemy was spawned, we create a new enemy at a random horizontal position above the screen (so it moves downward). This enemy is then added to the enemies list.

  3. Updating Enemy Positions: Each enemy in the enemies list moves downward by adding enemy_speed to its y-position. If an enemy moves off the bottom of the screen, it’s removed from the list.

  4. Drawing Enemies: We loop through the enemies list and use pygame.draw.rect() to draw each enemy on the screen.

When you run this code, you’ll see red rectangles (our enemies) falling from the top of the screen. The game is starting to take shape!

Step 5: Detecting Collisions

Now, let’s add some logic so that when a bullet hits an enemy, both the bullet and the enemy disappear. This involves detecting collisions between bullets and enemies.

# Collision detection function
def check_collision(rect1, rect2):
    return rect1.colliderect(rect2)

# Main game loop
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                bullet_x = player_x   player_width // 2 - bullet_width // 2
                bullet_y = player_y
                bullets.append(pygame.Rect(bullet_x, bullet_y, bullet_width, bullet_height))

    # Handle player movement
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and player_x > 0:
        player_x -= player_speed
    if keys[pygame.K_RIGHT] and player_x  0]

    # Update enemy positions and spawn new ones
    current_time = pygame.time.get_ticks()
    if current_time - enemy_timer > enemy_spawn_time:
        enemy_x = random.randint(0, screen_width - enemy_width)
        enemy_y = -enemy_height
        enemies.append(pygame.Rect(enemy_x, enemy_y, enemy_width, enemy_height))
        enemy_timer = current_time

    for enemy in enemies:
        enemy.y  = enemy_speed

    # Check for collisions
    for bullet in bullets[:]:
        for enemy in enemies[:]:
            if check_collision(bullet, enemy):
                bullets.remove(bullet)
                enemies.remove(enemy)
                break

    # Remove enemies that are off the screen
    enemies = [enemy for enemy in enemies if enemy.y 



Here’s what we did:

  1. Collision Detection: We define a function check_collision that takes the positions and sizes of two rectangles and checks if they overlap using colliderect(). This is how we detect if a bullet has hit an enemy.

  2. Removing Colliding Objects: Inside the main loop, after updating the positions of the bullets and enemies, we check if any bullet has collided with any enemy. If they have, both the bullet and the enemy are removed from their respective lists.

Now, when you run the game, bullets that hit enemies will make the enemies disappear. You’ve created a basic but functioning shooter game!

Important Note: In this simple game, there is no penalty for colliding with an enemy. The player can move through enemies without taking damage or losing the game. This keeps things straightforward but might be something you want to change in a more advanced version.

Putting it all together

In case you need it, here's everything we wrote:

import pygame
import sys
import random

# Initialize PyGame
pygame.init()

# Set up the game window
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Simple Shooter Game")

# Set the frame rate
clock = pygame.time.Clock()

# Player settings
player_width = 50
player_height = 60
player_x = screen_width // 2 - player_width // 2
player_y = screen_height - player_height - 10
player_speed = 5

# Bullet settings
bullet_width = 5
bullet_height = 10
bullet_speed = 7
bullets = []

# Enemy settings
enemy_width = 50
enemy_height = 60
enemy_speed = 2
enemies = []

# Spawn an enemy every 2 seconds
enemy_timer = 0
enemy_spawn_time = 2000

# Collision detection function
def check_collision(rect1, rect2):
    return pygame.Rect(rect1).colliderect(pygame.Rect(rect2))

# Main game loop
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                # Create a bullet at the current player position
                bullet_x = player_x   player_width // 2 - bullet_width // 2
                bullet_y = player_y
                bullets.append([bullet_x, bullet_y])

    # Handle player movement
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and player_x > 0:
        player_x -= player_speed
    if keys[pygame.K_RIGHT] and player_x  0]

    # Update enemy positions and spawn new ones
    current_time = pygame.time.get_ticks()
    if current_time - enemy_timer > enemy_spawn_time:
        enemy_x = random.randint(0, screen_width - enemy_width)
        enemy_y = -enemy_height
        enemies.append([enemy_x, enemy_y])
        enemy_timer = current_time

    for enemy in enemies:
        enemy[1]  = enemy_speed

    # Check for collisions
    for bullet in bullets[:]:
        for enemy in enemies[:]:
            if check_collision((bullet[0], bullet[1], bullet_width, bullet_height),
                               (enemy[0], enemy[1], enemy_width, enemy_height)):
                bullets.remove(bullet)
                enemies.remove(enemy)
                break

    # Remove enemies that are off the screen
    enemies = [enemy for enemy in enemies if enemy[1] 



What's Next?

Congratulations, you’ve just built your first simple shooter game with PyGame! But this is just the beginning—there’s so much more you can do:

  • Add a Scoring System: Track how many enemies the player destroys and display the score on the screen.
  • Create Different Enemy Types: Make enemies that move differently, shoot back, or take multiple hits to destroy.
  • Enhance Graphics: Replace the rectangles with images for the player, bullets, and enemies.
  • Add Sound Effects: Make the game more immersive by adding sounds for shooting, hitting enemies, and other actions.
  • Introduce Levels: Add different levels or waves of enemies to increase the difficulty as the player progresses.
  • Add Player Health and Damage: Allow the player to take damage when colliding with an enemy and lose the game if their health reaches zero.

PyGame is incredibly flexible, so let your imagination run wild and keep experimenting. The more you play with the code, the more you’ll learn and the better your game will become.

It's a wrap!

And that’s it! You’ve gone from an empty window to a functioning shooter game in just a few steps. Whether you’re planning to expand this project or move on to something new, you’ve taken a big step in your game development journey. Don’t hesitate to share your progress or ask questions—I'm here to help!

Do you have any questions or comments? Be sure to leave them here or contact me at @lovelacecoding on most social media platforms. Thanks for coding along!

版本聲明 本文轉載自:https://dev.to/lovelacecoding/how-to-build-your-first-python-game-a-step-by-step-guide-to-creating-a-simple-shooter-with- pygame-f0k?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何使用 std::locale 在 C++ 中使用逗號格式化數字?
    如何使用 std::locale 在 C++ 中使用逗號格式化數字?
    在C 中用逗號格式化數字在C 中,std::locale 類別提供了一種依賴於區域設定的方式用逗號格式化數字.std::locale 與std::stringstream要將數字格式化為帶逗號的字串,可以將std::locale 與std::stringstream 一起使用如下:#include ...
    程式設計 發佈於2024-11-07
  • 如何避免在 Python 中列印素數序列中的奇數?
    如何避免在 Python 中列印素數序列中的奇數?
    如何在 Python 中列印素數序列許多程式設計師都在努力創建一個在 Python 中準確列印素數的函數。一個常見的問題是列印奇數列表。要解決這個問題,必須徹底了解素數屬性並修改程式碼。 質數只能被 1 和它們本身整除。因此,改進的程式碼檢查從 2 到數字的平方根(如果數字較小,則為數字本身)範圍內...
    程式設計 發佈於2024-11-07
  • 如何在 Pygame 中向滑鼠方向發射子彈?
    如何在 Pygame 中向滑鼠方向發射子彈?
    如何在 Pygame 中朝滑鼠方向發射子彈在 Pygame 中,可以創建一顆朝滑鼠方向發射的子彈。為此,需要建立一個代表子彈的類,並根據滑鼠位置設定其初始位置和方向。 子彈的類別首先,為項目符號建立一個類別。該類別應包含子彈的位置、大小和表面的屬性。表面就是將在螢幕上渲染的內容。 import py...
    程式設計 發佈於2024-11-07
  • 優化效能的 GG 編碼技巧:加快程式碼速度
    優化效能的 GG 編碼技巧:加快程式碼速度
    在软件开发领域,优化代码性能对于交付用户喜爱的快速响应的应用程序至关重要。无论您从事前端还是后端工作,学习如何编写高效的代码都是至关重要的。在本文中,我们将探讨各种性能优化技术,例如降低时间复杂度、缓存、延迟加载和并行性。我们还将深入探讨如何分析和优化前端和后端代码。让我们开始提高代码的速度和效率!...
    程式設計 發佈於2024-11-07
  • 如何使用 PHP 的 strtotime() 函數找出一週中特定一天的日期?
    如何使用 PHP 的 strtotime() 函數找出一週中特定一天的日期?
    確定一周中指定日期(星期一、星期二等)的日期如果您需要確定日期戳一周中的特定一天,例如星期一、星期二或任何其他工作日,可以使用strtotime() 函數。當指定日期在本週內尚未出現時,此函數特別有用。 例如,要獲取下週二的日期戳,只需使用以下代碼:strtotime('next tuesday')...
    程式設計 發佈於2024-11-07
  • 使用 Socket.io 和 Redis 建置和部署聊天應用程式。
    使用 Socket.io 和 Redis 建置和部署聊天應用程式。
    在本教程中,我们将使用 Web 套接字构建一个聊天应用程序。当您想要构建需要实时传输数据的应用程序时,Web 套接字非常有用。 在本教程结束时,您将能够设置自己的套接字服务器、实时发送和接收消息、在 Redis 中存储数据以及在渲染和 google cloud run 上部署您的应用程序。 ...
    程式設計 發佈於2024-11-07
  • SQL 連結內部
    SQL 連結內部
    SQL 连接是查询数据库的基础,它允许用户根据指定条件组合多个表中的数据。连接分为两种主要类型:逻辑连接和物理连接。逻辑联接代表组合表中数据的概念方式,而物理联接是指这些联接在数据库系统(例如 RDS(关系数据库服务)或其他 SQL 服务器)中的实际实现。在今天的博文中,我们将揭开 SQL 连接的神...
    程式設計 發佈於2024-11-07
  • 你該知道的 Javascript 特性
    你該知道的 Javascript 特性
    在本文中,我們將探討如何在嘗試存取可能是未定義或null 的資料時防止錯誤,並且我們將介紹您可以使用的方法用於在必要時有效管理資料。 透過可選連結進行安全訪問 在 JavaScript 中,當您嘗試存取嵌套物件中的值或函數時,如果結果為 undefined,您的程式碼可能會引發錯誤...
    程式設計 發佈於2024-11-07
  • JavaScript 中的 Promise:理解、處理和掌握非同步程式碼
    JavaScript 中的 Promise:理解、處理和掌握非同步程式碼
    简介 我曾经是一名 Java 开发人员,我记得第一次接触 JavaScript 中的 Promise 时。尽管这个概念看起来很简单,但我仍然无法完全理解 Promise 是如何工作的。当我开始在项目中使用它们并了解它们解决的案例时,情况发生了变化。然后灵光乍现的时刻到来了,一切都变...
    程式設計 發佈於2024-11-07
  • 如何將金鑰整合到 Java Spring Boot 中
    如何將金鑰整合到 Java Spring Boot 中
    Java Spring Boot 中的密钥简介 密钥提供了一种现代、安全的方式来验证用户身份,而无需依赖传统密码。在本指南中,我们将引导您使用 Thymeleaf 作为模板引擎将密钥集成到 Java Spring Boot 应用程序中。 我们将利用 Corbado 的密钥优先 UI...
    程式設計 發佈於2024-11-07
  • 馬裡奧·羅伯托·羅哈斯·埃斯皮諾擔任危地馬拉前環境部長的影響
    馬裡奧·羅伯托·羅哈斯·埃斯皮諾擔任危地馬拉前環境部長的影響
    作為危地馬拉前環境部長,馬裡奧·羅伯托·羅哈斯·埃斯皮諾在執行環境政策方面發揮了至關重要的作用,為該國的可持續發展做出了貢獻。他作為該部門領導的管理留下了重要的遺產,特別是在環境立法和保護項目方面。在本文中,我們探討了他的影響以及他在任期內推行的主要政策。 主要環境政策 在擔任部長...
    程式設計 發佈於2024-11-07
  • 如何追蹤和存取類別的所有實例以進行資料收集?
    如何追蹤和存取類別的所有實例以進行資料收集?
    追蹤資料收集的類別實例假設您正在接近程式末尾,並且需要從多個變數中提取特定變數來填充字典的類別的實例。當處理包含需要聚合或分析的基本資料的物件時,可能會出現此任務。 為了說明這個問題,請考慮這個簡化的類別結構:class Foo(): def __init__(self): ...
    程式設計 發佈於2024-11-07
  • 如何在 PHP 關聯數組中搜尋 – 快速提示
    如何在 PHP 關聯數組中搜尋 – 快速提示
    關聯數組是 PHP 中的基本資料結構,允許開發人員儲存鍵值對。它們用途廣泛,通常用於表示結構化資料。在 PHP 關聯數組中搜尋特定元素是一項常見任務。但 PHP 中可用的最原生函數可以很好地處理簡單的陣列。 出於這個原因,我們經常必須找到允許我們在關聯數組上執行相同操作的函數組合。可能沒有記憶體不...
    程式設計 發佈於2024-11-07
  • Web 開發的未來:每個開發人員都應該了解的新興趨勢和技術
    Web 開發的未來:每個開發人員都應該了解的新興趨勢和技術
    介绍 Web 开发从早期的静态 HTML 页面和简单的 CSS 设计已经走过了漫长的道路。多年来,在技术进步和用户对更具动态性、交互性和响应性的网站不断增长的需求的推动下,该领域发展迅速。随着互联网成为日常生活中不可或缺的一部分,网络开发人员必须不断适应新趋势和技术,以保持相关性并...
    程式設計 發佈於2024-11-07
  • 初學者 Python 程式設計師可以使用 ChatGPT
    初學者 Python 程式設計師可以使用 ChatGPT
    作为一名 Python 初学者,您面临着无数的挑战,从编写干净的代码到排除错误。 ChatGPT 可以成为您提高生产力和简化编码之旅的秘密武器。您可以直接向 ChatGPT 提问并获得所需的答案,而无需筛选无休止的文档或论坛。无论您是在调试一段棘手的代码、寻找项目灵感,还是寻求复杂概念的解释,Ch...
    程式設計 發佈於2024-11-07

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3