AS3.0中的区块设计

PHP语言的区块链 区块链是一种去中心化的分布式数据库技术,它通过密码学技术确保数据的安全性和完整性。区块链由一系列按时间顺序链接的“区块”组成,每个区块包含多条交易记录,以及指向前一个区块的哈希值。由于每个区块都依赖于前一个区块,因此一旦数据被记录到区块链上,就难以篡改。PHP(Hypertext Preprocessor)是一种广泛使用的开源服务器端脚本语言,特别适合于网页开发。简易性:语法简单,易于学习和使用。跨平台性:支持多个操作系统,包括Windows、Linux等。广泛的支持。 阅读详情
这篇文章主要是讲解如何基于AS3来制作一个区块游戏,但仍然保持OOP的结构。
这篇文章的代码能够被诸如FlexBuilder,FlashDevilop这里的编译器解释,当然Flash IDE也可以,但是要在主场景上指明main类。
该应用程序需要一个XML文件存储地图数据,它将会被转换为实际地图显示在屏幕上。这里面是没有什么交互的,不过是区块的放置位置和管理。
程序需要X类,每个来都负责不同的功能。
1、main类:管理所有的类和所创建的实例。
2、XmlLoader:载入一个xml文件并保存他的数据。
3、Parser:解析xml到一个二维的数组当中。
4、Screen:接收parser所创建的数字来构造一个区块的矩阵。
5、Tile:单个区块,保存类型x位置和y位置。
在最后我将会给出main文件:
第一个类:XmlLoader:
package tools
{
  import flash.events.EventDispatcher;
  import flash.net.URLRequest;
  import flash.net.URLLoader;
  import flash.events.Event;
  
  public class XmlLoader extends EventDispatcher{
    
    private var _loader:URLLoader;
    
    private var _xml:XML;
    
    public function XmlLoader(path:String){
      _loader = new URLLoader();
      try{
        _loader.load(new URLRequest(path));
      }catch(e:Error){
        trace("error in loading the XML file")
      }
      _loader.addEventListener(Event.COMPLETE,onLoadXml);
    }
    
    private function onLoadXml(event:Event):void{
      //trace("xml loaded")
      _xml = XML(URLLoader(event.target).data)
      dispatchEvent(new Event(Event.COMPLETE));
    }  
    
    public function get xml():XML{
      return _xml;
    }
  }
}

这个类接收XML文件的路径,尝试载入它。xml被载入以后,类将会dispatch一个事件,以便创建XmlLoader实例的类能够知道载入已经完成了,我们可以继续了。(这是一个非即时的操作,所有我们需要一个事件机制)。
请注意:有一个事件监听来监听载入的操作,还有一个事件的派遣-main 来接收该事件。第一个市内置的,第二个是同其他的类来连接。载入了xml数据以后,XmlLoader 的实例会保存该数据然后通过其他的类中的一个指定的getter函数来获得它。另一个应该注意到的是try & catch
来处理一些特定的错误事件,这样可以防止一个错误信息在运行中发送给用户。

第二个类:parser
解析的工作是非常的简单的,-获得一个xml对象,然后分割成行,每一行对应一个数字。在完成了划分以后,这个类的一个实例会保存数组中的行以便其他的类能够读取它。这也是由一个getter函数来完成的。_rows数组是一个二维数组。根据xml文件,其中的每一个单元都被描述成一行,每行都有若干的数字。
接收xml文件的类的结构如下所示:
package tools
{
  public class Parser{
    
    private var _xml:XML;
    private var _rows:Array;
    
    
    public function Parser(xml:XML){
      _xml = xml;
      _rows = new Array();
      getRows();
    }
    
    private function getRows():void{
      // get all rows
      var rows:XMLList = _xml.screen.children();
      var singleRow:Array;
      var rowString:String = rows[i];
      for(var i:uint=0;i<rows.length();i++){
        rowString= rows[i];
        // split numbers in string to cells in singleRow array
        singleRow = rowString.split("");
        //save singleRow in _rows array;        
        _rows.push(singleRow);
      }  
    }
    
    //return an arra of all rows (every row is an array of numbers
    public function get rows():Array{
      return _rows;
    }
    
  }
}


为了能让该工作完成,xml文件的结构应该是这样的:
<?xml version='1.0' encoding='UTF8'?>
<data>
  <screen id="" title="">
    <row>111111111111111111111111111111</row>
    <row>100000000000000000000000000001</row>
    <row>101000000000000000003300000001</row>
    <row>101000000000000000000000000001</row>
    <row>101111110000001111000000000001</row>
    <row>100000000000004400000000000001</row>
    <row>100000000000000000000111510001</row>
    <row>100000000000000000000000000001</row>
    <row>111111111111111111111111111111</row>
  </screen>
</data>

如果你是其他的结构需要改变一下parser。
Parser和XmlLoader都在一个名为tools的包中。
第三个类:一个视觉上的Screen:

Screen类的实例接收到数组中的数据(Parser类中所解析成的样子)然后根据数组构建一个区块的矩阵。它需要一个两层的for循环。第一层循环遍历所有的行。内部的循环来遍历行里面的所有的数字。内部的for循环每执行一次都创建一个区块,然后将他放到一个数组中(这样做可以让我们以后访问到所有的区块)。
这个类和Tile类都在一个名为"visual"的包中:
package visual
{
  import visual.Tile;
  import flash.display.Sprite;
  
  public class Screen extends Sprite{
    
    private var _screenArray:Array;
    private var _tiles:Array;
    
    public function Screen(screenArray:Array){
      _screenArray = screenArray;
      _tiles = new Array();
      var tile:Tile;
      var row:Array;
      
      // create matrix
      for(var i:uint=0;i<_screenArray.length;i++){
        row = _screenArray[i] as Array;
        for(var j:uint=0;j<row.length;j++){
          // create a new tile and push it to _tiles
          tile = new Tile(Number(row[j]),j,i)
          addChild(tile)
          _tiles.push(tile);
        }  
      }    
    }
    
    //let other classes get the tiles array.
    public function get allTiles():Array{
      return _tiles;
    }
  }
}

第四个类:Tile:

最后的visual类是Tile类,它提供单个的区块,具有3个属性:
Type:(代码在XML来描述这一区块)
locationX-描述他在矩阵中的水平位置-数字的位置而不是像素的。
locationY-描述他在矩阵中的垂直的位置。
三个属性都是getter函数。外部的对象可以"ask"每一个区块的属性。我决定使用颜色来区分区块类型的不同。
以下是Tile类的代码:
package visual{
  import flash.display.Sprite;
  
  public class Tile extends Sprite{
    
    private var _type:uint;
    private var _locationX:uint;
    private var _locationY:uint;
    
    // colors of tiles
    static private var TILE_TYPES:Array = [0xDDDDDD,
0xFF00AA,
0xCC00CC,
0xCCCC00,
0x3300FF];
    private const TILE_SIZE:uint = 10;
      
    public function Tile(type:uint,locationX:uint,locationY:uint){
      // get parameters
      _type = type;
      _locationX = locationX;
      _locationY = locationY;
      //draw a square
      graphics.lineStyle(1,0x000000,0.2);
      // different color by type parameter
      graphics.beginFill(  TILE_TYPES[_type],1);
      graphics.drawRect(0,0,TILE_SIZE,TILE_SIZE);
      graphics.endFill();
      x=TILE_SIZE*_locationX;
      y=TILE_SIZE*_locationY;
    }
    
    public function get type():uint{
      return _type;
    }
    public function get locationX():uint{
      return _locationX;
    }
    public function get locationY():uint{
      return _locationY;
    }
  }
}

main 类:
最后,我们让所有的东西都运行起来:
package {
  import flash.display.Sprite;
  import tools.XmlLoader;
  import flash.events.Event;
  import tools.Parser;
  import visual.Screen

  public class TileGame extends Sprite{
    
    private var _xmlLoader:XmlLoader;
    private var _xmlData:XML;
    private var _screenParser:Parser;
    private var _screenArray:Array;
    private var _screen:Screen;
    
    
    public function TileGame(){
  var url:String = "http://www.avgil.com/as3/tilegame/screen1.xml";
      try{
      _xmlLoader = new XmlLoader(url);
      } catch(e:Error){
        trace("couldn't load XML file")
      }
      // wait till the XmlLoader will finish loading the data
      _xmlLoader.addEventListener(Event.COMPLETE,onXmlReady);      
    }
    
    private function onXmlReady(event:Event):void{
      //recieve the XML data from the event
      _xmlData = XmlLoader(event.target).xml as XML;
      //parse and build a screen from parsed data
      _screenParser = new Parser(_xmlData);
      _screenArray = _screenParser.rows;
      _screen = new Screen(_screenArray);
      _screen.x = 50;
      _screen.y = 50;
      addChild(_screen);
    }
  }
}

需要注意的是在创建了XmlLoader以后,需要等到XmlLoader说"OK-done"才能做起他的事情。
下载Flex的打包文件。
http://www.gotoandplay.it/_articles/2007/10/tileLayout/TileGame.zip
 
java实现区块设计 package com.mindata.blockchain.block; import java.util.List; /** * 区块body,里面存放交易的数组 * @author wuweifeng wrote on 2018/2/28. */ public class BlockBody { private List<Instruction> instructions; @Override public String toString() { . 阅读详情

相关推荐

LT码与Raptor码的性能仿真

从数据分析看来,在数据块大小较小时(100 - 200 左右 ),LT 码和 Raptor 码的平均冗余符号数量差距相对较小,但 LT 码的冗余符号数量始终高于 Raptor 码。现在采用MATLAB进行仿真,直观展示不同数据块大小下,两种解码方式的解码时间差异.如图4.1所示,LT解码(绿色圆点折线)LT 解码方式的解码时间随数据块大小的变化情况。从实际应用的角度来看,LT码由于其简单的编码机制,适用于资源受限或对编码效率要求较高的场景,但其较高的解码复杂度限制了其在一些实时性要求较高的应用中的使用。

道亦无名 1136

一文看懂区块链架构设计

转自:http://www.8btc.com/ebook-blockchain 前言 区块链作为一种架构设计的实现,与基础语言或平台等差别较大。区块链是加密货币背后的技术,是当下与VR虚拟现实等比肩的热门技术之一,本身不是新技术,类似Ajax,可以说它是一种技术架构,所以我们从架构设计的角度谈谈区块链的技术实现。 无论你擅长什么编程语言,都能够参考这种设计去实现一款区块链

lucky_greenegg的专栏 8万+

手把手教你用FPGA实现SGMII接口:从IP核配置到板级调试全流程

本文详细介绍了如何在Xilinx 7系列FPGA上实现SGMII(Serial Gigabit Media Independent Interface)接口的全流程,包括IP核配置、约束编写和硬件调试。通过具体的硬件选型建议、软件工具链配置和PCB设计规范,帮助开发者快速构建稳定可靠的千兆通信链路,并提供了常见故障排查和性能优化技巧。

weixin_29194693的博客 296

区块链设计原则

区块链已经到来了 - 不仅在技术层面,而且在文化层面。我们知道这个是因为我们六十岁的母亲已经开始向我们询问它了。另外,因为它出现在Dilbert漫画中。在Emerson Stone,我们期待着这个新兴技术带来的挑战和机遇。作为设计行业的从业者,我们需要仔细考虑区块链的设计 - 从视觉到数字到UX。我们的职责是在企业和用户之间进行调和,帮助前者构建被后者采用的产品和平台。那有哪些真实的区块链的使用例...

程序猿开发日志【学习永无止境】 802

[GXYCTF2019]BabyUpload1 -- .htaccess文件解析与蚁剑实战指南

本文深入解析了[GXYCTF2019]BabyUpload1文件上传漏洞的实战利用。通过绕过后缀名与内容检测,上传包含PHP代码的.jpg文件,并利用.htaccess文件强制服务器将其解析为PHP脚本。文章详细介绍了.htaccess的原理、构造方法、Content-Type绕过技巧,并演示了如何使用中国蚁剑连接Webshell获取Flag,为Web安全学习提供了完整实战指南。

weixin_29016315的博客 509

直流无刷BLDC六步换相“电流环”、“速度环”的关系

4、在电流闭环模式下,电机的电流严格按给定电流运行,负载大小变化时,电流不变,电机速度跟随负载非正常变化,例如速度严重“超速”时,需要“限速”保护,这个任务是“速度环”的,这时“速度环”会根据设定的速度上限,控制触发器,将电机速度迅速将下来,电流降下来,在“限速”保护期间,“电流环”失去对触发器的控制作用;3、在电流闭环模式下,电机的电流严格按给定电流运行,负载大小变化时,电流不变,电机速度跟随负载正常变化,“速度环”对速度大小的控制作用是没有的;6、很多人想当然,“电流环”不工作,电机“电流”哪里来的?

u011878611的博客 5471

【基础篇】理解区块链的结构及其设计原理

国内目前已经有众多关于区块链、比特币等的新闻和文章,但大多只是粗浅的讲述了“区块链是去中心化的分布式账本”等概念,且在去中心化、加密货币等方面大做文章。 对比国外在区块链技术原理、技术改进和内在逻辑等的讨论,国内的新闻媒体、大佬和所谓的三点钟区块链群等,还多集中在绿皮火车化的讨论,一些深层次的讨论文章实在是少之又少。 我每每在回顾并感慨区块链近几年的快速发展时,总是在思考:如果我是中本聪的话,当初为何会想到要提出区块链的概念?我为何会引入哈希(Hash)函数、创造比特币呢?又为何会想到用PoW的共识模型

qq_42200107的博客 2781

PyTorch GPU版本安装避坑指南:解决RuntimeError: No CUDA GPUs are available报错

本文详细解析了PyTorch GPU版本安装过程中常见的`RuntimeError: No CUDA GPUs are available`报错问题,从硬件驱动检查、CUDA Toolkit与cuDNN安装到PyTorch GPU版本的正确配置,提供了全面的避坑指南和实战验证方法,帮助开发者高效搭建深度学习开发环境。

r2s3t4的博客 297

产品设计-- 划分区块

在出产品UE的时候,如果一个页面的内容多,样式多样化。我们在设计的时候可能会感觉到头晕,不知道这个该摆在哪里,那个又摆在哪里,这个时候不妨用一下抽象逐步的出图方法。我们先看一下百度的原图和抽象图:原图 抽象图这个只是一个简单的例子,至于抽象图的形成 每个产品人员应该都有自己的经验,平时在浏览网页的时候也要注意积累这种经验,用抽象的眼光去看一个网页,看他的区块组成顺序 大

smartview的专栏 904

5、数字图像采集:X射线成像技术全解析

本文全面解析了数字图像采集中的X射线成像技术,涵盖数字X射线探测器、荧光透视与血管造影、乳腺摄影以及计算机断层扫描(CT)的图像重建原理。详细介绍了TFT平板探测器的优势、DSA技术在血管成像中的应用、乳腺摄影对高对比度和分辨率的需求,以及CT中基于Radon变换和滤波反投影的重建方法。同时探讨了噪声、部分容积效应、金属伪影和运动伪影等常见问题及其影响。最后总结了各类X射线成像技术的特点与应用场景,并展望了未来在图像质量提升和剂量优化方面的技术发展方向。

l6m7n8的博客 128

YOLOv8首发优化:遥感目标检测 | 专为低质量遥感图像设计的边缘 - 高斯聚合(EGA)模块,解决低空间分辨率、传感器噪声、目标模糊、低光照退化和部分遮挡等限制

一种轻量级网络,其创新性地整合了专为低质量遥感图像设计的边缘 - 高斯聚合(EGA)模块。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 491

区块链 web_我们如何处理web3js中的区块链重新连接

区块链 web 在本文中,我们将学习如何使用Web3JS在生产环境中自动处理区块链断开连接。 下述方法适用于Web3JS 1.0.0-beta.35版本,但对于稳定的1.2。*版本也应适用。 问题描述 如果您的团队在生产中使用Web3JS,那么您必须意识到Web3JS中没有内置的重新连接功能来处理区块链断开或重新启动。 因此,通常,当连接断开时,NodeJS服务也需要重新启动才能再次连接...

编程故事的地方 527

Python爬虫实战:使用最新技术爬取新浪新闻首页数据

本文详细介绍了三种爬取新浪新闻首页的技术方案,从简单的requests-html到强大的Playwright,再到分布式Scrapy架构。小规模爬取:requests-html或aiohttp方案需要JavaScript渲染:Playwright方案大规模分布式爬取:Scrapy-Redis方案。

2201_76125261的博客 1243

我们如何处理web3js中的区块链重新连接

在本文中,我们将学习如何使用Web3JS在生产环境中自动处理区块链断开连接。 下述方法适用于Web3JS 1.0.0-beta.35版本,但对于稳定的1.2。*版本也应适用。 问题描述 如果您的团队在生产中使用Web3JS,那么您必须意识到Web3JS中没有内置的重新连接功能来处理区块链断开或重新启动。 因此,通常,当连接断开时,NodeJS服务也需要重新启动才能再次连接到区块链。 这不是一...

编程故事的地方 1319

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

as3.0动态文本大全

var my_fmt = new TextFormat();//常用样式my_fmt.align = "center";my_fmt.blockIndent = 50; //区块缩进my_fmt.bold = true;my_fmt.bullet = true;my_fmt.color = 0xff0000;my_fmt.font = "黑体";my_fmt.indent ...

baocun6294的博客 426

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

掌握Rust区块链开发的10项核心技能,抢占Web3.0时代先机

掌握Rust区块链开发的10项核心技能,解决高性能与安全性难题。涵盖智能合约、共识算法、Web3.0应用等场景,结合内存安全与并发优势,提升开发效率。系统学习路径助你快速进阶,值得收藏。

CodeIsle的博客 991

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

超级账本与区块链应用场景

区块链3.0 去中心化应用的新需求 区块链技术在行业应用中的条件 区块链3.0架构与超级账本 区块链3.0架构 超级账本(Hyperledger Fabric) 超级账本的项目 Fabric Fabric的典型运行模型 在Fabric中完成一次交易的整体步骤 Fabric的节点 链码(Chaincode) 数字身份证书 组织 通道 区块链技术的典型应用场景 区块链技术实现版权登记 广告传媒的去中心化

timerring的博客 1909

Python在区块链开发与智能合约编写中的应用

本文介绍了利用Python进行区块链开发和智能合约编写的流程,并提供了代码示例来演示这些概念。首先,我们了解了区块链的基础知识,包括区块链是如何工作的以及为什么它是一种重要的技术。接着,我们学习了如何使用Python编写一个简单的区块链,并演示了创建区块、添加交易以及验证区块的过程。然后,我们介绍了智能合约的概念,以及如何使用Solidity语言编写智能合约。接着,我们演示了如何使用Python与以太坊区块链进行交互,并部署一个简单的智能合约。

一键难忘的博客 3813

区块链 truffle 3.0开发入门

区块链 truffle 3.0 网上的教程大多是在2.0基础上的,按照网上文章学习过程中会有一些困惑,整个 demo 的过程基本上网上别人遇到的报错我也都踩了个遍,在这里面记录一下整个学习过程 配置环境 安装truffle 环境 npm install -g truffle 安装 ethereum 客户端 npm install -g ethereumjs-testrpc

github_27372715的专栏 2746

Python 区块链与Web3开发指南

通过这八篇系列教程,你已经掌握了:区块链基础原理与Python实现Web3.py与以太坊交互智能合约开发与部署NFT与DeFi应用开发区块链数据分析安全最佳实践完整DApp架构下一步学习建议深入协议层学习以太坊EVM原理研究零知识证明(ZKP)技术探索Layer2解决方案参与生态贡献开源Web3项目参加黑客松活动加入DAO组织专业领域DeFi协议开发NFT平台架构区块链安全审计扩展知识IPFS与去中心化存储Oracles与链外数据跨链技术。

gohacker的博客 1416

【区块链新手快速入门】如何构建一个区块链

本文翻译自《Learn Blockchains by Building One》,作者@dvf,原文链接:https://hackernoon.com/learn-blockchains-by-building-one-117428612f46 去年10月24日,区块链被提升至国家战略地位,包括传统大企业、央企等在内的公司纷纷布局区块链。社会上掀起了一阵学习区块链的热潮,而区块链人才也...

WXblockchain1的博客 6592

C++语言的区块链

C++语言以其卓越的性能、灵活的内存管理及丰富的库支持成为实现区块链技术的理想选择。通过对区块链基本原理的深入理解和对C++编程的熟练掌握,开发者可以在这一领域开拓出更为广阔的应用场景。尽管当前区块链技术还面临诸多挑战,如扩展性、安全性和能耗等问题,但随着技术的不断演进和创新,相信未来将会出现更多高效、安全和环保的区块链解决方案。C++在这个过程中将继续担当重要角色,助力区块链技术的进步与应用。以上就是关于C++语言实现区块链的基本探讨与实践,希望能对读者在区块链开发的道路上提供一些启示和帮助。

2501_90384006的博客 1239

搭建FISCO BCOS 3.0 Pro版区块链网络集群

本文主要是针对于生产环境搭建FISCO BCOS 3.0过程中遇到的问题进行了整理。FISCO BCOS 3.0支持Pro版本微服务区块链架构,Pro版本FISCO BCOS包含RPC服务、Gateway服务和节点服务,每个服务均可独立部署和扩容,本章通过单机搭建Pro版本2节点FISCO BCOS联盟链,帮助用户掌握Pro版本FISCO BCOS区块链的部署流程。请参考这里使用支持的硬件和平台进行操作。

fangshaojun的博客 1928

as3 java 通用 加解密_AS3和php DES通用加密解密(注:经测试不可用于AMF格式通信)

前一段时间需要对数据进行一些加密,曾经在论坛里发帖问过这个问题!后来经过自己百度和看书等途径把它搞掂了! 今天又看到有人需要就分享一下吧! 觉得可以的就顶吧! 好了,废话不说了看代码!首先看AS3端的,主要是利用as3.0Crypto包来完成的,谷歌下载地址:http://code.google.com/p/as3cryp ... ail?name=Crypto.zipDES加密的例子:var s...

weixin_31443757的博客 581

web3.0涉及的技术

NFTs 是基于区块链技术的数字资产,用于表示和证明数字或实物资产的唯一性、稀缺性和所有权。分布式存储技术还包括分布式数据库系统,如Cassandra、MongoDB、Arweave等,这些系统允许数据在多个节点上分布式存储和检索,提高了数据的可用性和冗余性。区块链是一种分布式账本技术,它可以实现信息的安全、透明、不可篡改的存储和传输。区块链是DAO的基础技术之一。它提供了去中心化的账本,记录了DAO的规则、资产、成员和交易。智能合约是在区块链上执行的自动化合同,它们包含了DAO的规则、操作和决策逻辑。

xxx 1916
上一篇: Javascript:小心使用innerHTML
下一篇: flash使用FlashVars接收html参数
wx红杉树
博客等级 码龄21年 383粉丝 296原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值