NFT卡牌链游开发盲盒系统搭建技术

332 阅读4分钟

  链游卡牌系统开发是与元宇宙NFT的形式开发,搭建NFT的链游系统属于是一个大型的工程,游戏的开发也是回合制,格斗类的,或者是合成制的,所有的模式基本都能开发,主要是在游戏规则制定好就能实现界面和功能的开发。

  所谓区块游戏,即链游,主要是依托区块技术搭建将用户信息分布存储于整个区块中,不存在绝对的中心控制体,它将创作的权利赋予玩家。

  所谓的卡牌类链游主要是依托区块技术搭建的将用户信息分布存储在整个区块中,不存在绝对的中心控制体,它将创作的权利赋予玩家。而NFT的链游中的游戏物品,虚拟形象,土地,服装,武器,黄金,代币等都是虚拟的固定资产,游戏玩家通过玩游戏获得这些物品,也可以在市场上进行交易获得利润,NFT卡牌游戏系统13z开4z77发z558。

  卡牌回合制链游模式介绍:

  人物卡,装备和技能都是以盲盒的形式开发的,任务卡盲盒卖完后才会出现新的装备和技能盲盒。所有的装备技能都是以盲盒的形式交易手续费使用支付。

62e.jpg

  人物卡:

  首发数量是可以控制的,随机开出1-3个属性任务,任务星级合成需要24小时左右,宝石可增加合成的概率,同属性的星级也是可以合成的。

  升级成为星级,成为平台的元老会员,享受交易手续费分工:

  1、所有交易都是收取相关的手续费的,X星英雄加权平分x%,项目方获得x%。

  2、星级英雄分工一周结算一次,当期手续费为x%加权平分,x%流入下一期分红。

  游戏的人物孵化,装备技能,交易商城,人数属性,人物级别,PK模式,关卡通关等灯饰功能也是如此。

  该款游戏属于的链游的模式也可以开发成常规的形式,卡牌驱动,玩家通过合约创建新的任务,通过合成合约将两张牌合成新的人物。通过交易合约在市场上挑选心仪的人物出售自己的人物,派出自己的任务进行打怪或者和其他的玩家进行格斗获得奖励,玩家获得可以奖励也可以去兑换奖品。

  以下非同质化代币的铸造分析,原始代码参考以太坊ERC721提案。

  ​首先非同质化代币的铸造会执行

  ​_safeMint函数,该函数存在两个参数,他们分别的作用是:

  to:新铸的代币接受地址

  tokenId:新铸代币的id序列

  function _safeMint(address to,uint256 tokenId)internal virtual{

  _safeMint(to,tokenId,"");//接收以上两个参数加上空字符凑齐3个参数传入同名_safeMint函数(重载)

  }

  ​可以看到接下来调用三参数同名_safeMint函数,

  function _safeMint(address to,uint256 tokenId,bytes memory _data)internal virtual{//接收_safeMint函数传参

  _mint(to,tokenId);//将传参to和tokenId传入_mint函数

  require(_checkOnERC721Received(address(0),to,tokenId,_data),"ERC721:transfer to non ERC721Receiver implementer");//调用_checkOnERC721Received函数来检测函数接口合法性

  }

  ​最后调用_mint函数进行铸币:

  function _mint(address to,uint256 tokenId)internal virtual{//接收来自_safeMint函数的传参

  require(to!=address(0),"ERC721:mint to the zero address");//校验传参地址是否为空(为假继续后续操作,为真终止操作)

  require(!_exists(tokenId),"ERC721:token already minted");//接着校验tokenId是否已经存在(为假继续后续操作,为真终止操作)

  _beforeTokenTransfer(address(0),to,tokenId);//初始化;

  _balances[to]+=1;//在传参地址to上生成一个token

  _owners[tokenId]=to;//将传参地址to与引索tokenId进行绑定

  emit Transfer(address(0),to,tokenId);//触发token生成事件

  }

  ​就这样一个独一无二的NFT被铸造出来了。总体过程如下:

  合约中使用_safeMint函数调用铸币函数并检查函数的ERC721函数接口合法性,该函数在ERC721中有所体现,代码如下:

  function _checkOnERC721Received(address from,address to,uint256 tokenId,bytes memory _data)

  private returns(bool)

  {

  if(to.isContract()){

  try IERC721Receiver(to).onERC721Received(_msgSender(),from,tokenId,_data)returns(bytes4 retval){

  return retval==IERC721Receiver(to).onERC721Received.selector;

  }catch(bytes memory reason){

  if(reason.length==0){

  revert("ERC721:transfer to non ERC721Receiver implementer");

  }else{

  //solhint-disable-next-line no-inline-assembly

  assembly{

  revert(add(32,reason),mload(reason))

  }

  }

  }

  }else{

  return true;

  }

  }

  在_mint函数中首先检查了地址是否是0地址,还有tokenId是否已存在。该tokenId在ERC721标准中生成规则是一个不可互换的通证。检测通过后为to地址铸币(相应的tokenId),同时记录余额与该NFT艺术品的归属者。