Python开发植物大战僵尸游戏,能不能通关我说了算!

python基础之--人机大战,编程思维! 阅读详情

开发思路

1.引入需要的模块,配置图片路径,设置界面宽高背景颜色,创建游戏主入口。

Python资源共享群:484031800

#1引入需要的模块
import pygame
import random
#1配置图片地址
IMAGE_PATH = 'imgs/'
#1设置页面宽高
scrrr_width=800
scrrr_height =560
#1创建控制游戏结束的状态
GAMEOVER = False
#1主程序
class MainGame():
     #1加载游戏窗口
    def init_window(self):
        #1调用显示模块的初始化
        pygame.display.init()
        #1创建窗口
        MainGame.window = pygame.display.set_mode([scrrr_width,scrrr_height])  #
    #1开始游戏
    def start_game(self):
        #1初始化窗口
        self.init_window()
        #1只要游戏没结束,就一直循环
        while not GAMEOVER:
            #1渲染白色背景
            MainGame.window.fill((255, 255, 255))
            #1实时更新
            pygame.display.update()
#1启动主程序
if __name__ == '__main__':
    game = MainGame()
    game.start_game()

2.文本绘制,创建要动态改变的属性,渲染的位置

#2 创建关数,得分,剩余分数,钱数
shaoguan = 1
score = 0
remnant_score = 100
money = 200
#2 文本绘制
def draw_text(self, content, size, color):
    pygame.font.init()
    font = pygame.font.SysFont('kaiti', size)
    text = font.render(content, True, color)
    return text
#2 加载帮助提示
def load_help_text(self):
    text1 = self.draw_text('1.按左键创建向日葵 2.按右键创建豌豆射手', 26, (255, 0, 0))
    MainGame.window.blit(text1, (5, 5))
#2 渲染的文字和坐标位置
        MainGame.window.blit(self.draw_text('当前钱数$: {}'.format(MainGame.money), 26, (255, 0, 0)), (500, 40))
        MainGame.window.blit(self.draw_text(
            '当前关数{},得分{},距离下关还差{}分'.format(MainGame.shaoguan, MainGame.score, MainGame.remnant_score), 26,
            (255, 0, 0)), (5, 40))
        self.load_help_text()

3.创建地图类,初始化地图和坐标

#3 创建地图类
class Map():
    #3 存储两张不同颜色的图片名称
    map_names_list = [IMAGE_PATH + 'map1.png', IMAGE_PATH + 'map2.png']
    #3 初始化地图
    def __init__(self, x, y, img_index):
        self.image = pygame.image.load(Map.map_names_list[img_index])
        self.position = (x, y)
        # 是否能够种植
        self.can_grow = True
    #3 加载地图
    def load_map(self):
         MainGame.window.blit(self.image,self.position)
    
    #3 存储所有地图坐标点
    map_points_list = []
    #3 存储所有的地图块
    map_list = []
    
    #3 初始化坐标点
    def init_plant_points(self):
        for y in range(1, 7):
            points = []
            for x in range(10):
                point = (x, y)
                points.append(point)
            MainGame.map_points_list.append(points)
            print("MainGame.map_points_list", MainGame.map_points_list)
    #3 初始化地图
    def init_map(self):
        for points in MainGame.map_points_list:
            temp_map_list = list()
            for point in points:
                # map = None
                if (point[0] + point[1]) % 2 == 0:
                    map = Map(point[0] * 80, point[1] * 80, 0)
                else:
                    map = Map(point[0] * 80, point[1] * 80, 1)
                # 将地图块加入到窗口中
                temp_map_list.append(map)
                print("temp_map_list", temp_map_list)
            MainGame.map_list.append(temp_map_list)
        print("MainGame.map_list", MainGame.map_list)
    #3 将地图加载到窗口中
    def load_map(self):
        for temp_map_list in MainGame.map_list:
            for map in temp_map_list:
                map.load_map()
    
    #3 初始化坐标和地图
    self.init_plant_points()
    self.init_map()
    
    #3 需要反复加载地图
    self.load_map()

4.创建植物类,图片加载报错处理,加载植物方法

#4 图片加载报错处理
LOG = '文件:{}中的方法:{}出错'.format(__file__,__name__)
#4 植物类
class Plant(pygame.sprite.Sprite):
    def __init__(self):
        super(Plant, self).__init__()
        self.live=True
    # 加载图片
    def load_image(self):
        if hasattr(self, 'image') and hasattr(self, 'rect'):
            MainGame.window.blit(self.image, self.rect)
        else:
            print(LOG)
        
#4 存储所有植物的列表
plants_list = []

5.创建向日葵类

#5 向日葵类
class Sunflower(Plant):
    def __init__(self,x,y):
        super(Sunflower, self).__init__()
        self.image = pygame.image.load('imgs/sunflower.png')
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.price = 50
        self.hp = 100
        #5 时间计数器
        self.time_count = 0
    #5 功能:生成阳光(生产钱)
    def produce_money(self):
        self.time_count += 1
        if self.time_count == 25:
            MainGame.money += 5
            self.time_count = 0
    #5 向日葵加入到窗口中
    def display_sunflower(self):
        MainGame.window.blit(self.image,self.rect)

6.创建豌豆射手类

#6 豌豆射手类
class PeaShooter(Plant):
    def __init__(self,x,y):
        super(PeaShooter, self).__init__()
        # self.image 为一个 surface
        self.image = pygame.image.load('imgs/peashooter.png')
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.price = 50
        self.hp = 200
        #6 发射计数器
        self.shot_count = 0
    #6 增加射击方法
    def shot(self):
        #6 记录是否应该射击
        should_fire = False
        for zombie in MainGame.zombie_list:
            if zombie.rect.y == self.rect.y and zombie.rect.x < 800 and zombie.rect.x > self.rect.x:
                should_fire = True
        #6 如果活着
        if self.live and should_fire:
            self.shot_count += 1
            # 计数器到25发射一次
            if self.shot_count == 25:
                #6 基于当前豌豆射手的位置,创建子弹
                peabullet = PeaBullet(self)
                #6 将子弹存储到子弹列表中
                MainGame.peabullet_list.append(peabullet)
                self.shot_count = 0
    #6 将豌豆射手加入到窗口中的方法
    def display_peashooter(self):
        MainGame.window.blit(self.image,self.rect)
        
    #6 增加豌豆射手发射处理
    def load_plants(self):
        for plant in MainGame.plants_list:
            #6 优化加载植物的处理逻辑
            if plant.live:
                if isinstance(plant, Sunflower):
                    plant.display_sunflower()
                    plant.produce_money()
                elif isinstance(plant, PeaShooter):
                    plant.display_peashooter()
                    plant.shot()
            else:
                MainGame.plants_list.remove(plant)
     #6 调用加载植物的方法
     self.load_plants()

7.创建子弹类

#7 豌豆子弹类
class PeaBullet(pygame.sprite.Sprite):
    def __init__(self,peashooter):
        self.live = True
        self.image = pygame.image.load('imgs/peabullet.png')
        self.damage = 50
        self.speed  = 10
        self.rect = self.image.get_rect()
        self.rect.x = peashooter.rect.x + 60
        self.rect.y = peashooter.rect.y + 15
    def move_bullet(self):
        #7 在屏幕范围内,实现往右移动
        if self.rect.x < scrrr_width:
            self.rect.x += self.speed
        else:
            self.live = False
    #7 新增,子弹与僵尸的碰撞
    def hit_zombie(self):
        for zombie in MainGame.zombie_list:
            if pygame.sprite.collide_rect(self,zombie):
                #打中僵尸之后,修改子弹的状态,
                self.live = False
                #僵尸掉血
                zombie.hp -= self.damage
                if zombie.hp <= 0:
                    zombie.live = False
                    self.nextLevel()
    #7闯关方法
    def nextLevel(self):
        MainGame.score += 20
        MainGame.remnant_score -=20
        for i in range(1,100):
            if MainGame.score==100*i and MainGame.remnant_score==0:
                    MainGame.remnant_score=100*i
                    MainGame.shaoguan+=1
                    MainGame.produce_zombie+=50
    def display_peabullet(self):
        MainGame.window.blit(self.image,self.rect)
   
    #7 存储所有豌豆子弹的列表
    peabullet_list = []
    
    #7 加载所有子弹的方法
def load_peabullets(self):
    for b in MainGame.peabullet_list:
        if b.live:
            b.display_peabullet()
            b.move_bullet()
            #7  调用子弹是否打中僵尸的方法
            b.hit_zombie()
        else:
            MainGame.peabullet_list.remove(b) 
    #7 调用加载所有子弹的方法
    self.load_peabullets()

8.事件处理

#8事件处理
def deal_events(self):
    #8 获取所有事件
    eventList = pygame.event.get()
    #8 遍历事件列表,判断
    for e in eventList:
        if e.type == pygame.QUIT:
            self.gameOver()
        elif e.type == pygame.MOUSEBUTTONDOWN:
            # print('按下鼠标按键')
            print(e.pos)
            # print(e.button)#左键1  按下滚轮2 上转滚轮为4 下转滚轮为5  右键 3
            x = e.pos[0] // 80
            y = e.pos[1] // 80
            print(x, y)
            map = MainGame.map_list[y - 1][x]
            print(map.position)
            #8 增加创建时候的地图装填判断以及金钱判断
            if e.button == 1:
                if map.can_grow and MainGame.money >= 50:
                    sunflower = Sunflower(map.position[0], map.position[1])
                    MainGame.plants_list.append(sunflower)
                    print('当前植物列表长度:{}'.format(len(MainGame.plants_list)))
                    map.can_grow = False
                    MainGame.money -= 50
            elif e.button == 3:
                if map.can_grow and MainGame.money >= 50:
                    peashooter = PeaShooter(map.position[0], map.position[1])
                    MainGame.plants_list.append(peashooter)
                    print('当前植物列表长度:{}'.format(len(MainGame.plants_list)))
                    map.can_grow = False
                    MainGame.money -= 50
                    
                    #8 调用事件处理的方法
                    self.deal_events()

9.创建僵尸类

#9 僵尸类
class Zombie(pygame.sprite.Sprite):
    def __init__(self,x,y):
        super(Zombie, self).__init__()
        self.image = pygame.image.load('imgs/zombie.png')
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.hp = 1000
        self.damage = 2
        self.speed = 1
        self.live = True
        self.stop = False
    #9 僵尸的移动
    def move_zombie(self):
        if self.live and not self.stop:
            self.rect.x -= self.speed
            if self.rect.x < -80:
                #8 调用游戏结束方法
                MainGame().gameOver()
    #9 判断僵尸是否碰撞到植物,如果碰撞,调用攻击植物的方法
    def hit_plant(self):
        for plant in MainGame.plants_list:
            if pygame.sprite.collide_rect(self,plant):
                #8  僵尸移动状态的修改
                self.stop = True
                self.eat_plant(plant)
    #9 僵尸攻击植物
    def eat_plant(self,plant):
        #9 植物生命值减少
        plant.hp -= self.damage
        #9 植物死亡后的状态修改,以及地图状态的修改
        if plant.hp <= 0:
            a = plant.rect.y // 80 - 1
            b = plant.rect.x // 80
            map = MainGame.map_list[a][b]
            map.can_grow = True
            plant.live = False
            #8 修改僵尸的移动状态
            self.stop = False
    #9 将僵尸加载到地图中
    def display_zombie(self):
        MainGame.window.blit(self.image,self.rect)
    
    #9 新增存储所有僵尸的列表
    zombie_list = []
    count_zombie = 0
    produce_zombie = 100     
       
    #9 新增初始化僵尸的方法
    def init_zombies(self):
        for i in range(1, 7):
            dis = random.randint(1, 5) * 200
            zombie = Zombie(800 + dis, i * 80)
            MainGame.zombie_list.append(zombie)
    #9将所有僵尸加载到地图中
    def load_zombies(self):
        for zombie in MainGame.zombie_list:
            if zombie.live:
                zombie.display_zombie()
                zombie.move_zombie()
                # v2.0 调用是否碰撞到植物的方法
                zombie.hit_plant()
            else:
                MainGame.zombie_list.remove(zombie)                 
    #9 调用初始化僵尸的方法
        self.init_zombies()
        
    #9 调用展示僵尸的方法
            self.load_zombies()
            #9 计数器增长,每数到100,调用初始化僵尸的方法
            MainGame.count_zombie += 1
            if MainGame.count_zombie == MainGame.produce_zombie:
                self.init_zombies()
                MainGame.count_zombie = 0
            #9 pygame自己的休眠
            pygame.time.wait(10)

10.游戏结束方法

#10 程序结束方法
def gameOver(self):
    MainGame.window.blit(self.draw_text('游戏结束', 50, (255, 0, 0)), (300, 200))
    pygame.time.wait(400)
    global GAMEOVER
    GAMEOVER = True

11.完整项目地址: https://github.com/371854496/...

觉得还OK的话,点下Star,作者不易,thank you!

 

 

 

 

 

 

Python开发植物大战僵尸游戏 开发思路 1.引入需要的模块,配置图片路径,设置界面宽高背景颜色,创建游戏主入口。 #1引入需要的模块 import pygame import random #1配置图片地址 IMAGE_PATH = 'imgs/' #1设置页面宽高 scrrr_width=800 scrrr_height =560 #1创建控制游戏结束的状态 GAMEOVER = False #1主程序 class M... 阅读详情

相关推荐

用Python给我写一个植物大战僵尸的代码

我可以用 Python 为您编写一个简单的植物大战僵尸游戏。请注意,这只是一个简单的版本,没有图形界面和音效,仅用于演示游戏的基本原理。 # Plant vs Zombies class Plant: def __init__(self, name, power): self.name = name self.power = power class Zo...

weixin_35751412的博客 2680

python人机大战小游戏代码

import random def computer(user_score,comp_score,n): #user_score接受玩家得分,comp_score接受电脑得分,n接受回合数 print(f'*********** 回合【{n}】:电脑攻击 ***********') comp = random.randint(1,3) #电脑随机取值 print(f'---------作弊{comp}') user = int(input('玩家请输入:')) .

qq958566955的博客 18万+

Python Pygame复刻植物大战僵尸:从游戏循环到面向对象设计实战

面向对象编程是构建复杂软件系统的核心范式,它将数据和操作封装成对象,通过继承和多态实现代码复用与扩展。在游戏开发领域,这一原理尤为关键,游戏世界中的每个实体,如植物、僵尸、子弹,都可以被抽象为具有特定属性和行为的对象。Pygame作为Python中轻量级的2D游戏开发库,为实践这一技术提供了绝佳平台。它通过事件循环、表面渲染和矩形碰撞检测等基础模块,将面向对象的设计思想转化为可交互的游戏体验。其技术价值在于,开发者能够在一个具体、有趣的项目中,直观理解类与对象、继承与多态、模块化设计等抽象概念,并将碰撞检测

weixin_29504571的博客 326

python基础之--人机大战,编程思维

python 编程思维

qq_40333984的博客 13万+

Python Pygame实战:复刻《植物大战僵尸》游戏开发全解析

游戏开发是理解软件工程和面向对象编程的绝佳实践领域。其核心原理在于通过游戏循环、事件驱动和状态机来模拟动态世界。在技术实现上,2D游戏开发常借助轻量级框架快速构建原型,其中碰撞检测和资源管理是关键性能优化点。这些技术不仅对开发完整应用有重要价值,也是学习编程思想、提升架构设计能力的有效途径。本文以经典塔防游戏《植物大战僵尸》的Python复刻项目为例,深入剖析了如何使用Pygame库实现网格化地图、精灵行为状态机和高效的碰撞检测策略。项目采用模块化设计,清晰分离了植物、僵尸、UI等精灵的职责,并详细介绍了从

weixin_30907935的博客 377

植物大战僵尸MOD开发教程:从文件结构到自定义植物实战

游戏MOD开发是游戏二次创作的重要技术领域,其核心原理是通过修改游戏资源文件和逻辑脚本来实现内容扩展。从技术实现角度看,MOD开发涉及文件结构解析、资源替换机制和脚本编程等基础概念。在工程实践中,合理的开发工具链配置和系统化的测试流程是确保MOD稳定性的关键。植物大战僵尸作为经典塔防游戏,其相对简单的文件结构为MOD开发提供了良好基础,特别是资源加载的优先级机制使得MOD可以无缝集成。通过自定义植物开发实战,开发者能够掌握属性配置、图像资源制作、技能逻辑实现等完整技术栈。融合版MOD的成功案例证明了社区协作

weixin_30879833的博客 494

【已开源】PyQt5实现植物VS僵尸游戏

笔者近期没有发布新的PyQt5软件,并不是去摸鱼了,而是在认真研发新游戏。本次使用PyQt5开发了一款植物VS僵尸游戏,包含45种植物和28种僵尸,欢迎各位下载体验啊!撰写本篇记录下我的开发思路和设计流程。本次是笔者第二次开发2d游戏,望大家不喜勿喷哈~强烈推荐去下载体验一下,欢迎大家提交BUG,欢迎欢迎!

懷淰メ的博客 2324

Python复刻植物大战僵尸:从游戏循环到打包分发的完整实战指南

游戏开发是理解编程逻辑与软件工程实践的绝佳领域,其核心在于构建一个实时交互的模拟世界。从原理上讲,游戏通过主循环驱动,持续处理事件、更新状态与渲染画面,形成动态体验。在技术层面,面向对象编程与精灵系统是组织复杂游戏对象的基础,而碰撞检测、状态机与资源管理则是保障游戏逻辑正确性与性能的关键。这些技术共同支撑了塔防、角色扮演等多种游戏类型的实现。具体到塔防游戏,其核心价值在于构建一套资源生产、防御部署与敌人进攻的循环体系,并通过关卡设计控制游戏节奏与难度。本文以经典塔防游戏《植物大战僵尸》为蓝本,深入剖析如何使

weixin_29009339的博客 286

用快马AI三分钟搞定《植物大战僵尸》辅助脚本:从零到一键通关

整个开发过程在InsCode(快马)平台需求描述转代码用自然语言说明"需要自动瞄准最近的僵尸",AI就能生成完整的坐标计算和点击逻辑,省去查API文档的时间。实时调试反馈内置的预览功能可以直接测试脚本效果,发现BUG时能快速定位到问题行。比如自动攻击偏移的问题,通过实时坐标显示很快找到原因。一键部署分享生成的可执行文件可以直接分发给朋友,他们无需安装Python环境就能使用。对于想快速实现游戏辅助的新手,这种从构思到落地的流畅体验确实很友好。

StarfallRaven13的博客 1113

C1认证:修改《植物大战僵尸》游戏存档文件

任务1:修改任意关卡、更改用户金币、解锁新模式 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代

m0_56914100的博客 850

《植物大战僵尸》辅助开发:内存修改与自动化实战

游戏辅助开发是通过技术手段改变游戏运行逻辑或数据的技术实践,核心原理包括内存修改、函数Hook和自动化控制。在单机游戏领域,这类技术常用于研究游戏机制和开发辅助工具,涉及内存扫描、逆向分析和脚本编写等关键技术。以《植物大战僵尸》为例,通过Cheat Engine等工具实现阳光值修改、植物冷却消除等功能,展示了游戏数据结构的分析方法。这类技术在游戏机制研究、自动化测试等领域具有应用价值,但需注意遵守相关法律法规。内存修改和自动化脚本是当前游戏辅助开发的热点方向。

weixin_34401479的博客 659

使用Claude Code开发植物大战僵尸游戏(pygame,附源码)

植物大战僵尸(Plants vs. Zombies)是无数玩家的童年回忆。你是否想过,不依赖任何图片、音频等外部资源,仅用纯代码能否复刻这款经典塔防游戏?本文将带你走进一个完全基于 Pygame 的植物大战僵尸克隆项目——所有图形通过几何图元程序化绘制,所有音效通过数学公式程序化生成,界面全中文支持,整个项目仅约 2000 行 Python 代码。

penngo的专栏 743

植物大战僵尸辅助开发:内存分析与自动化脚本实战

游戏辅助开发是逆向工程与自动化技术的典型应用场景,其核心技术包括内存分析和图像识别。通过Cheat Engine等工具进行内存数据分析,可以定位游戏关键变量(如阳光值、冷却时间)的存储结构;而基于OpenCV的计算机视觉方案则能实现非侵入式的自动化操作。这些技术在单机游戏辅助、自动化测试等领域具有重要价值,既能提升游戏体验效率,又可作为学习内存安全、进程通信等底层知识的实践案例。以《植物大战僵尸》为例,其植物数组、僵尸队列等内存结构为开发者提供了研究游戏逻辑的绝佳样本,而遗传算法优化的布阵策略则展示了AI与

weixin_34389926的博客 345

植物大战僵尸95版深度解析:硬核Mod设计、策略重构与实战进阶

游戏模组(Mod)是玩家社区基于原有游戏框架进行二次创作的重要形式,它通过修改游戏数据、逻辑与内容,扩展游戏的可玩性与生命周期。其技术原理通常涉及对游戏资源文件、内存数据及运行逻辑的解析与修改,需要开发者具备一定的逆向工程与程序设计能力。这种技术的核心价值在于,它能让经典游戏焕发新生,为硬核玩家群体提供更深层次的策略挑战与探索乐趣。在塔防游戏这一具体应用场景中,优秀的Mod作品往往通过对经济系统、敌人机制、关卡设计进行系统性重构,来创造全新的游戏体验。以《植物大战僵尸》的知名非官方改版“95版”为例,它正是

weixin_34364071的博客 329

用Scratch复刻植物大战僵尸:交互界面与核心逻辑实现详解

游戏开发的核心在于理解事件驱动编程和对象生命周期管理。事件驱动编程通过消息广播机制实现不同游戏模块间的通信与响应,例如角色间的交互触发;对象生命周期管理则涉及游戏实体的创建、状态更新与销毁,确保资源高效利用。这些原理构成了现代游戏引擎的基础,对于培养计算思维和项目架构能力至关重要。在工程实践中,通过图形化编程工具Scratch,开发者可以直观地运用克隆体模拟对象实例,利用变量与列表管理状态,从而复刻复杂游戏的交互逻辑。本文以复刻经典塔防游戏《植物大战僵尸》的交互界面为例,具体展示了如何通过Scratch的广

weixin_34122604的博客 319

【经典项目】python实现植物大战僵尸的小游戏(附源码)

《植物大战僵尸》以其创新的玩法、丰富的策略性和可爱的设计风格成为了一款备受欢迎的游戏,吸引了众多玩家并产生了深远影响。

m0_46013789的博客 2417

游戏自动化工具部署与测试指南:以《植物大战僵尸》辅助为例

游戏自动化技术通过内存读取、进程注入和脚本控制,实现了对单机游戏行为的程序化操作。其核心原理在于识别并修改游戏进程的内存数据,或通过图像识别与模拟输入来执行预定策略。这项技术的价值在于为游戏机制研究、极限玩法验证和重复性操作解放提供了工程化解决方案,常应用于单机游戏的自动化测试、策略模拟与辅助工具开发。本文聚焦于《植物大战僵尸》社区工具“PE 河洛十炮 ch5u”的部署与验证,详细阐述了从环境准备、功能测试到稳定性评估的全流程实践,为技术爱好者提供了一套通用的游戏辅助工具评估框架。

weixin_33796177的博客 342

Java与Python之间使用jython工具类实现数据交互

今天小编就为大家分享一篇关于Java与Python之间使用jython工具类实现数据交互,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

上一篇: MicroPython TPYBoard v201 简易家庭气象站的实现过程!
下一篇: Python3结合Dlib实现人脸识别和剪切 !
普通网友
博客等级 码龄7年 438粉丝 263原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值