NFT卡牌鏈遊開發盲盒系統搭建技術

搭建猿punk2558發表於2023-04-14

鏈遊卡牌系統開發是與元宇宙NFT的形式開發,搭建NFT的鏈遊系統屬於是一個大型的工程,遊戲的開發也是回合制,格鬥類的,或者是合成制的,所有的模式基本都能開發,主要是在遊戲規則制定好就能實現介面和功能的開發。

所謂區塊遊戲,即鏈遊,主要是依託區塊技術搭建將使用者資訊分佈儲存於整個區塊中,不存在絕對的中心控制體,它將創作的權利賦予玩家。

所謂的卡牌類鏈遊主要是依託區塊技術搭建的將使用者資訊分佈儲存在整個區塊中,NFT卡牌鏈遊系統13z開4z77發z558,不存在絕對的中心控制體,它將創作的權利賦予玩家。而NFT的鏈遊中的遊戲物品,虛擬形象,土地,服裝,武器,黃金,代幣等都是虛擬的固定資產,遊戲玩家透過玩遊戲獲得這些物品,也可以在市場上進行交易獲得利潤。

卡牌回合制鏈遊模式介紹:

人物卡,裝備和技能都是以盲盒的形式開發的,任務卡盲盒賣完後才會出現新的裝備和技能盲盒。所有的裝備技能都是以盲盒的形式交易手續費使用支付。

人物卡:

先發數量是可以控制的,隨機開出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藝術品的歸屬者。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70020115/viewspace-2945828/,如需轉載,請註明出處,否則將追究法律責任。

相關文章