【Python实战】Google Chrome的离线小恐龙游戏

在这里插入图片描述在这里插入图片描述

Google Chrome的离线小恐龙游戏

本文章通过详细的列举项目结构大纲和列举逐步编码过程和思路,便于学习者能够更加快速方便地掌握该游戏的开发。

项目结构大纲 📊👣
t_rex_game/
│
├── main.py        # 主程序文件
├── trex.py        # T-Rex角色类
├── assets/
│   └── trex.png   # T-Rex图片文件
├── obstacles.py   # 障碍物类

逐步编码过程 🧩💡
第一步:项目初始化与主程序框架

main.py

import pygame
import sys
from trex import TRex

# 初始化pygame
pygame.init()

# 设置屏幕尺寸
screen_width = 800
screen_height = 400
screen = pygame.display.set_mode((screen_width, screen_height))

# 定义颜色
white = (255, 255, 255)

# 设置帧率
clock = pygame.time.Clock()
fps = 30

# 游戏主循环
def game_loop():
    t_rex = TRex(screen_width, screen_height)

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

        screen.fill(white)
        t_rex.draw(screen)

        pygame.display.update()
        clock.tick(fps)

if __name__ == "__main__":
    game_loop()

trex.py

import pygame
import os

class TRex:
    def __init__(self, screen_width, screen_height):
        # 获取当前脚本文件所在的目录
        current_path = os.path.dirname(__file__)
        # 拼接图片文件的完整路径
        image_path = os.path.join(current_path, 'assets', 'trex.png')
        self.image = pygame.image.load(image_path)
        self.image = pygame.transform.scale(self.image, (50, 50))  # 缩放图片
        self.x = 50
        self.y = screen_height - 70
        self.screen_width = screen_width
        self.screen_height = screen_height

    def draw(self, screen):
        screen.blit(self.image, (self.x, self.y))

注意点
首先,trex.png指的是小恐龙的照片,要先保证照片能够正常显示;然后要使用pygame.transform.scale函数来缩放图片大小。调整后的图片大小为50x50像素,你可以根据需要调整这个尺寸。

第二步:实现T-Rex的跳跃功能

main.py

import pygame
import sys
from trex import TRex

# 初始化pygame
pygame.init()

# 设置屏幕尺寸
screen_width = 800
screen_height = 400
screen = pygame.display.set_mode((screen_width, screen_height))

# 定义颜色
white = (255, 255, 255)

# 设置帧率
clock = pygame.time.Clock()
fps = 30

# 游戏主循环
def game_loop():
    t_rex = TRex(screen_width, screen_height)

    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:
                    t_rex.jump()

        t_rex.update()  # 更新T-Rex的状态

        screen.fill(white)
        t_rex.draw(screen)

        pygame.display.update()
        clock.tick(fps)

if __name__ == "__main__":
    game_loop()

trex.py

import pygame
import os

class TRex:
    def __init__(self, screen_width, screen_height):
        # 获取当前脚本文件所在的目录
        current_path = os.path.dirname(__file__)
        # 拼接图片文件的完整路径
        image_path = os.path.join(current_path, 'assets', 'trex.png')
        self.image = pygame.image.load(image_path)
        self.image = pygame.transform.scale(self.image, (50, 50))  # 缩放图片
        self.x = 50
        self.y = screen_height - 70
        self.jump_speed = 20  # 跳跃速度(增加)
        self.gravity = 2  # 重力(增加)
        self.velocity = 0  # 初始速度
        self.is_jumping = False  # 跳跃状态
        self.screen_width = screen_width
        self.screen_height = screen_height

    def jump(self):
        if not self.is_jumping:
            self.is_jumping = True
            self.velocity = -self.jump_speed

    def update(self):
        if self.is_jumping:
            self.y += self.velocity
            self.velocity += self.gravity

            # 检查是否着地
            if self.y >= self.screen_height - 70:
                self.y = self.screen_height - 70
                self.is_jumping = False
                self.velocity = 0

    def draw(self, screen):
        screen.blit(self.image, (self.x, self.y))

注意点
在完成跳跃功能时,我们会使小恐龙跳跃回弹到地面的时间尽可能短。我们可以通过设置:
跳跃速度:将self.jump_speed从15增加到20。
重力加速度:将self.gravity从1增加到2。

第三步:添加障碍物和碰撞检测

我们需要创建一个Obstacle类,并在主程序中生成障碍物。同时,实现T-Rex与障碍物的碰撞检测。
项目结构大纲 📊👣

t_rex_game/
│
├── main.py        # 主程序文件
├── trex.py        # T-Rex角色类
├── obstacles.py   # 障碍物类
├── assets/
│   └── trex.png   # T-Rex图片文件
│   └── cactus.png # 障碍物图片文件
└── utils.py       # 工具函数

main.py

import pygame
import sys
from trex import TRex
from obstacles import Obstacle
import random

# 初始化pygame
pygame.init()

# 设置屏幕尺寸
screen_width = 800
screen_height = 400
screen = pygame.display.set_mode((screen_width, screen_height))

# 定义颜色
white = (255, 255, 255)

# 设置帧率
clock = pygame.time.Clock()
fps = 30

# 游戏主循环
def game_loop():
    t_rex = TRex(screen_width, screen_height)
    obstacles = []

    def create_obstacle():
        obstacle = Obstacle(screen_width, screen_height)
        obstacles.append(obstacle)

    # 每隔一段时间创建一个新障碍物
    obstacle_timer = 0

    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:
                    t_rex.jump()

        t_rex.update()  # 更新T-Rex的状态

        # 创建新障碍物
        obstacle_timer += 1
        if obstacle_timer > 50:
            create_obstacle()
            obstacle_timer = 0

        # 更新障碍物状态
        for obstacle in obstacles:
            obstacle.update()
            # 检测碰撞
            if t_rex.x < obstacle.x + obstacle.width and \
               t_rex.x + t_rex.width > obstacle.x and \
               t_rex.y < obstacle.y + obstacle.height and \
               t_rex.height + t_rex.y > obstacle.y:
                # 碰撞检测到
                pygame.quit()
                sys.exit()

        # 清除离开屏幕的障碍物
        obstacles = [obstacle for obstacle in obstacles if obstacle.x + obstacle.width > 0]

        screen.fill(white)
        t_rex.draw(screen)
        for obstacle in obstacles:
            obstacle.draw(screen)

        pygame.display.update()
        clock.tick(fps)

if __name__ == "__main__":
    game_loop()

trex.py

import pygame
import os

class TRex:
    def __init__(self, screen_width, screen_height):
        # 获取当前脚本文件所在的目录
        current_path = os.path.dirname(__file__)
        # 拼接图片文件的完整路径
        image_path = os.path.join(current_path, 'assets', 'trex.png')
        self.image = pygame.image.load(image_path)
        self.image = pygame.transform.scale(self.image, (50, 50))  # 缩放图片
        self.x = 50
        self.y = screen_height - 70
        self.width = 50
        self.height = 50
        self.jump_speed = 20  # 跳跃速度
        self.gravity = 2  # 重力
        self.velocity = 0  # 初始速度
        self.is_jumping = False  # 跳跃状态
        self.screen_width = screen_width
        self.screen_height = screen_height

    def jump(self):
        if not self.is_jumping:
            self.is_jumping = True
            self.velocity = -self.jump_speed

    def update(self):
        if self.is_jumping:
            self.y += self.velocity
            self.velocity += self.gravity

            # 检查是否着地
            if self.y >= self.screen_height - 70:
                self.y = self.screen_height - 70
                self.is_jumping = False
                self.velocity = 0

    def draw(self, screen):
        screen.blit(self.image, (self.x, self.y))

obstacles.py

import pygame
import os

class Obstacle:
    def __init__(self, screen_width, screen_height):
        # 获取当前脚本文件所在的目录
        current_path = os.path.dirname(__file__)
        # 拼接图片文件的完整路径
        image_path = os.path.join(current_path, 'assets', 'cactus.png')
        self.image = pygame.image.load(image_path)
        self.image = pygame.transform.scale(self.image, (50, 50))  # 缩放图片
        self.x = screen_width
        self.y = screen_height - 70
        self.width = 50
        self.height = 50
        self.speed = 10

    def update(self):
        self.x -= self.speed

    def draw(self, screen):
        screen.blit(self.image, (self.x, self.y))

解释
障碍物类:Obstacle类用于表示游戏中的障碍物。每个障碍物都有位置、大小和速度属性。
创建和更新障碍物:在主程序中,我们定期创建新障碍物,并在每一帧更新它们的位置。
碰撞检测:在主程序的每一帧,我们检查T-Rex与每个障碍物是否发生碰撞。如果发生碰撞,游戏结束。

第四步:添加得分机制和显示得分

main.py

import pygame
import sys
from trex import TRex
from obstacles import Obstacle
import random

# 初始化pygame
pygame.init()

# 设置屏幕尺寸
screen_width = 800
screen_height = 400
screen = pygame.display.set_mode((screen_width, screen_height))

# 定义颜色
white = (255, 255, 255)
black = (0, 0, 0)

# 设置帧率
clock = pygame.time.Clock()
fps = 30

# 游戏主循环
def game_loop():
    t_rex = TRex(screen_width, screen_height)
    obstacles = []
    score = 0

    def create_obstacle():
        obstacle = Obstacle(screen_width, screen_height)
        obstacles.append(obstacle)

    # 每隔一段时间创建一个新障碍物
    obstacle_timer = 0

    # 创建字体对象
    font = pygame.font.Font(None, 36)

    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:
                    t_rex.jump()

        t_rex.update()  # 更新T-Rex的状态

        # 创建新障碍物
        obstacle_timer += 1
        if obstacle_timer > 50:
            create_obstacle()
            obstacle_timer = 0

        # 更新障碍物状态
        for obstacle in obstacles:
            obstacle.update()
            # 检测碰撞
            if t_rex.x < obstacle.x + obstacle.width and \
               t_rex.x + t_rex.width > obstacle.x and \
               t_rex.y < obstacle.y + obstacle.height and \
               t_rex.height + t_rex.y > obstacle.y:
                # 碰撞检测到
                pygame.quit()
                sys.exit()

        # 更新得分
        for obstacle in obstacles:
            if obstacle.x + obstacle.width < t_rex.x:
                score += 1
                obstacles.remove(obstacle)  # 删除已通过的障碍物

        screen.fill(white)
        t_rex.draw(screen)
        for obstacle in obstacles:
            obstacle.draw(screen)

        # 显示得分
        score_text = font.render(f'Score: {score}', True, black)
        screen.blit(score_text, (10, 10))

        pygame.display.update()
        clock.tick(fps)

if __name__ == "__main__":
    game_loop()

trex.py

import pygame
import os

class TRex:
    def __init__(self, screen_width, screen_height):
        # 获取当前脚本文件所在的目录
        current_path = os.path.dirname(__file__)
        # 拼接图片文件的完整路径
        image_path = os.path.join(current_path, 'assets', 'trex.png')
        self.image = pygame.image.load(image_path)
        self.image = pygame.transform.scale(self.image, (50, 50))  # 缩放图片
        self.x = 50
        self.y = screen_height - 70
        self.width = 50
        self.height = 50
        self.jump_speed = 20  # 跳跃速度
        self.gravity = 2  # 重力
        self.velocity = 0  # 初始速度
        self.is_jumping = False  # 跳跃状态
        self.screen_width = screen_width
        self.screen_height = screen_height

    def jump(self):
        if not self.is_jumping:
            self.is_jumping = True
            self.velocity = -self.jump_speed

    def update(self):
        if self.is_jumping:
            self.y += self.velocity
            self.velocity += self.gravity

            # 检查是否着地
            if self.y >= self.screen_height - 70:
                self.y = self.screen_height - 70
                self.is_jumping = False
                self.velocity = 0

    def draw(self, screen):
        screen.blit(self.image, (self.x, self.y))

obstacles.py

import pygame
import os

class Obstacle:
    def __init__(self, screen_width, screen_height):
        # 获取当前脚本文件所在的目录
        current_path = os.path.dirname(__file__)
        # 拼接图片文件的完整路径
        image_path = os.path.join(current_path, 'assets', 'cactus.png')
        self.image = pygame.image.load(image_path)
        self.image = pygame.transform.scale(self.image, (50, 50))  # 缩放图片
        self.x = screen_width
        self.y = screen_height - 70
        self.width = 50
        self.height = 50
        self.speed = 10

    def update(self):
        self.x -= self.speed

    def draw(self, screen):
        screen.blit(self.image, (self.x, self.y))

解释
更新得分机制:在每一帧中,检查每个障碍物是否已经通过了T-Rex的位置(obstacle.x + obstacle.width < t_rex.x)。如果通过,增加得分,并从障碍物列表中删除该障碍物。

第五步:游戏结束处理和重新开始选项

main.py

import pygame
import sys
from trex import TRex
from obstacles import Obstacle
import random

# 初始化pygame
pygame.init()

# 设置屏幕尺寸
screen_width = 800
screen_height = 400
screen = pygame.display.set_mode((screen_width, screen_height))

# 定义颜色
white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)

# 设置帧率
clock = pygame.time.Clock()
fps = 30

# 显示游戏结束画面
def show_game_over_screen(score):
    screen.fill(white)
    font = pygame.font.Font(None, 48)
    game_over_text = font.render('Game Over', True, red)
    score_text = font.render(f'Score: {score}', True, black)
    restart_text = font.render('Press R to Restart', True, black)
    
    screen.blit(game_over_text, (screen_width // 2 - game_over_text.get_width() // 2, screen_height // 2 - 50))
    screen.blit(score_text, (screen_width // 2 - score_text.get_width() // 2, screen_height // 2))
    screen.blit(restart_text, (screen_width // 2 - restart_text.get_width() // 2, screen_height // 2 + 50))
    
    pygame.display.update()

    # 等待用户按下 R 键重新开始
    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_r:
                    return  # 重新开始游戏

# 游戏主循环
def game_loop():
    t_rex = TRex(screen_width, screen_height)
    obstacles = []
    score = 0

    def create_obstacle():
        obstacle = Obstacle(screen_width, screen_height)
        obstacles.append(obstacle)

    # 每隔一段时间创建一个新障碍物
    obstacle_timer = 0

    # 创建字体对象
    font = pygame.font.Font(None, 36)

    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:
                    t_rex.jump()

        t_rex.update()  # 更新T-Rex的状态

        # 创建新障碍物
        obstacle_timer += 1
        if obstacle_timer > 50:
            create_obstacle()
            obstacle_timer = 0

        # 更新障碍物状态
        for obstacle in obstacles:
            obstacle.update()
            # 检测碰撞
            if t_rex.x < obstacle.x + obstacle.width and \
               t_rex.x + t_rex.width > obstacle.x and \
               t_rex.y < obstacle.y + obstacle.height and \
               t_rex.height + t_rex.y > obstacle.y:
                # 碰撞检测到,显示游戏结束画面
                show_game_over_screen(score)
                return

        # 更新得分
        for obstacle in obstacles:
            if obstacle.x + obstacle.width < t_rex.x:
                score += 1
                obstacles.remove(obstacle)  # 删除已通过的障碍物

        screen.fill(white)
        t_rex.draw(screen)
        for obstacle in obstacles:
            obstacle.draw(screen)

        # 显示得分
        score_text = font.render(f'Score: {score}', True, black)
        screen.blit(score_text, (10, 10))

        pygame.display.update()
        clock.tick(fps)

if __name__ == "__main__":
    while True:
        game_loop()

第六步:添加背景和地面

项目结构大纲

t_rex_game/
│
├── main.py        # 主程序文件
├── trex.py        # T-Rex角色类
├── obstacles.py   # 障碍物类
├── assets/
│   └── trex.png   # T-Rex图片文件
│   └── cactus.png # 障碍物图片文件
│   └── ground.png # 地面图片文件
└── utils.py       # 工具函数

main.py

import pygame
import sys
from trex import TRex
from obstacles import Obstacle
import random

# 初始化pygame
pygame.init()

# 设置屏幕尺寸
screen_width = 800
screen_height = 400
screen = pygame.display.set_mode((screen_width, screen_height))

# 定义颜色
white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)

# 设置帧率
clock = pygame.time.Clock()
fps = 30

# 加载地面图片
ground = pygame.image.load('assets/ground.png')
ground_height = 20
ground = pygame.transform.scale(ground, (screen_width, ground_height))

# 显示游戏结束画面
def show_game_over_screen(score):
    screen.fill(white)
    font = pygame.font.Font(None, 48)
    game_over_text = font.render('Game Over', True, red)
    score_text = font.render(f'Score: {score}', True, black)
    restart_text = font.render('Press R to Restart', True, black)
    
    screen.blit(game_over_text, (screen_width // 2 - game_over_text.get_width() // 2, screen_height // 2 - 50))
    screen.blit(score_text, (screen_width // 2 - score_text.get_width() // 2, screen_height // 2))
    screen.blit(restart_text, (screen_width // 2 - restart_text.get_width() // 2, screen_height // 2 + 50))
    
    pygame.display.update()

    # 等待用户按下 R 键重新开始
    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_r:
                    return  # 重新开始游戏

# 游戏主循环
def game_loop():
    t_rex = TRex(screen_width, screen_height)
    obstacles = []
    score = 0

    def create_obstacle():
        obstacle = Obstacle(screen_width, screen_height)
        obstacles.append(obstacle)

    # 每隔一段时间创建一个新障碍物
    obstacle_timer = 0

    # 创建字体对象
    font = pygame.font.Font(None, 36)

    # 背景颜色控制
    bg_color = white
    bg_color_change_timer = 0
    bg_color_change_interval = 500  # 颜色变化间隔(帧数)

    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:
                    t_rex.jump()

        t_rex.update()  # 更新T-Rex的状态

        # 创建新障碍物
        obstacle_timer += 1
        if obstacle_timer > 50:
            create_obstacle()
            obstacle_timer = 0

        # 更新障碍物状态
        for obstacle in obstacles:
            obstacle.update()
            # 检测碰撞
            if t_rex.x < obstacle.x + obstacle.width and \
               t_rex.x + t_rex.width > obstacle.x and \
               t_rex.y < obstacle.y + obstacle.height and \
               t_rex.height + t_rex.y > obstacle.y:
                # 碰撞检测到,显示游戏结束画面
                show_game_over_screen(score)
                return

        # 更新得分
        for obstacle in obstacles:
            if obstacle.x + obstacle.width < t_rex.x:
                score += 1
                obstacles.remove(obstacle)  # 删除已通过的障碍物

        # 变换背景颜色
        bg_color_change_timer += 1
        if bg_color_change_timer > bg_color_change_interval:
            bg_color = black if bg_color == white else white
            bg_color_change_timer = 0

        screen.fill(bg_color)
        screen.blit(ground, (0, screen_height - ground_height))  # 显示地面

        t_rex.draw(screen)
        for obstacle in obstacles:
            obstacle.draw(screen)

        # 显示得分
        score_text = font.render(f'Score: {score}', True, black if bg_color == white else white)
        screen.blit(score_text, (10, 10))

        pygame.display.update()
        clock.tick(fps)

if __name__ == "__main__":
    while True:
        game_loop()

trex.py

import pygame
import os

class TRex:
    def __init__(self, screen_width, screen_height):
        # 获取当前脚本文件所在的目录
        current_path = os.path.dirname(__file__)
        # 拼接图片文件的完整路径
        image_path = os.path.join(current_path, 'assets', 'trex.png')
        self.image = pygame.image.load(image_path)
        self.image = pygame.transform.scale(self.image, (50, 50))  # 缩放图片
        self.x = 50
        self.y = screen_height - 70 - 20  # 调整位置以适应地面高度
        self.width = 50
        self.height = 50
        self.jump_speed = 20  # 跳跃速度
        self.gravity = 2  # 重力
        self.velocity = 0  # 初始速度
        self.is_jumping = False  # 跳跃状态
        self.screen_width = screen_width
        self.screen_height = screen_height

    def jump(self):
        if not self.is_jumping:
            self.is_jumping = True
            self.velocity = -self.jump_speed

    def update(self):
        if self.is_jumping:
            self.y += self.velocity
            self.velocity += self.gravity

            # 检查是否着地
            if self.y >= self.screen_height - 70 - 20:
                self.y = self.screen_height - 70 - 20
                self.is_jumping = False
                self.velocity = 0

    def draw(self, screen):
        screen.blit(self.image, (self.x, self.y))

obstacles.py

import pygame
import os

class Obstacle:
    def __init__(self, screen_width, screen_height):
        # 获取当前脚本文件所在的目录
        current_path = os.path.dirname(__file__)
        # 拼接图片文件的完整路径
        image_path = os.path.join(current_path, 'assets', 'cactus.png')
        self.image = pygame.image.load(image_path)
        self.image = pygame.transform.scale(self.image, (50, 50))  # 缩放图片
        self.x = screen_width
        self.y = screen_height - 70 - 20  # 调整位置以适应地面高度
        self.width = 50
        self.height = 50
        self.speed = 10

    def update(self):
        self.x -= self.speed

    def draw(self, screen):
        screen.blit(self.image, (self.x, self.y))

解释
背景颜色切换:在主程序中,我们使用一个计时器bg_color_change_timer来控制背景颜色的变化。每当计时器达到设定的间隔时,背景颜色在白色和黑色之间切换。
地面调整:调整了T-Rex和障碍物的垂直位置以适应地面高度。

效果图

在这里插入图片描述

在这里插入图片描述

  • 12
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
很抱歉,根据提供的引用内容,没有找到关于Python制作谷歌小恐龙游戏的相关信息。但是,我可以为您提供一些关于Python游戏开发的基本知识和资源,帮助您开始制作自己的游戏Python是一种功能强大且易于学习的编程语言,可以用于制作各种类型的游戏,包括2D和简单的3D游戏。以下是一些您可以使用的Python游戏开发库和工具: 1. Pygame:Pygame是一个流行的Python游戏开发库,提供了许多用于创建2D游戏的功能和工具。您可以使用Pygame创建图形、动画、音效等。 2. Panda3D:Panda3D是一个用于创建3D游戏和应用程序的开源引擎。它使用Python作为主要编程语言,并提供了许多用于创建复杂游戏的功能。 3. Arcade:Arcade是一个简单易用的Python库,专门用于创建2D游戏。它提供了绘制图形、处理用户输入、播放声音等功能。 4. Pyglet:Pyglet是一个用于创建多媒体应用程序和游戏Python库。它提供了对OpenGL的封装,可以用于创建2D和简单的3D游戏。 除了这些库之外,还有许多其他的Python游戏开发库和工具可供选择。您可以根据自己的需求和兴趣选择适合您的库。 如果您想开始学习Python游戏开发,我建议您先学习Python的基础知识,然后深入了解所选库的文档和示例代码。您还可以参考一些在线教程和书籍,以帮助您更好地理解和应用Python游戏开发的概念和技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Byyyi耀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值