前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >元宇宙NFT链游系统开发DAPP技术方案分析

元宇宙NFT链游系统开发DAPP技术方案分析

原创
作者头像
开发v_StPv888
发布2022-11-03 11:03:49
3750
发布2022-11-03 11:03:49
举报
文章被收录于专栏:making

链游就是指区块链技术上运作的手机游戏,使游戏玩家第一次变成手机游戏真正的主人。游戏玩家在游戏里面所具备的的武器装备是可以随意交易的NFT,不会受到游戏开发商的操纵。别的游戏开发商可以对于游戏玩家的NFT搭建新的游戏。假如之前的游戏软件开发得不太好,游戏玩家可以将NFT取得新的游戏里玩儿。我们团队针对区块链游戏这块在很早的时候已经开始布局。当下来讲的话链游开发技术在同行中来讲算是先行者了。

从上面看我们的结构的项目,我们可以推断出以下类型:

  • [u8; 16] dna- 使用 16 个字节来表示小猫的 DNA。
  • BalanceOf price- 使用 FRAME 的自定义类型Currencytrait.
  • 性别 gender- 我们将创建!

首先,我们需要在声明结构之前添加自定义类型BalanceOfAccountOf。将操作 #1 替换为以下代码段:

代码语言:javascript
复制
type AccountOf<T> = <T as frame_system::Config>::AccountId;
type BalanceOf<T> =
    <<T as Config>::Currency as Currency<<T as frame_system::Config>::AccountId>>::Balance;

// Struct for holding Kitty information.
#[derive(Clone, Encode, Decode, PartialEq, RuntimeDebug, TypeInfo, MaxEncodedLen)]
#[scale_info(skip_type_params(T))]
#[codec(mel_bound())]
pub struct Kitty<T: Config> {
    pub dna: [u8; 16],
    pub price: Option<BalanceOf<T>>,
    pub gender: Gender,
    pub owner: AccountOf<T>,
}

请注意我们如何使用derive宏来包含各种辅助traits用到我们的结构中。我们需要添加TypeInfo,以便让我们的结构访问此特征。在pallet顶部添加以下行:

代码语言:javascript
复制
use scale_info::TypeInfo;

对于Gender类型 ,我们需要构建自己的自定义枚举和帮助程序函数。

编写自定义类型Gender

我们刚刚创建了一个结构名为Gender,此类型将处理我们定义的Kitty 性别的枚举。要创建它,您将构建以下部分:

  • 枚举声明,指定 MaleFemale
  • 为我们的 Kitty 结构实现一个帮助程序函数
  1. 声明自定义枚举

将 ACTION 项 #2 替换为以下枚举声明:

代码语言:javascript
复制
#[derive(Clone, Encode, Decode, PartialEq, RuntimeDebug, TypeInfo, MaxEncodedLen)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
pub enum Gender {
    Male,
    Female,
}

注意derive宏必须在枚举声明之前使用。包裹着我们枚举的数据结构,需要与runtime中的其他类型进行交互。为了使用SerializeDeserialize,需要将serde添加到pallets/kitties/Cargo.toml中。目前,我们知道如何创建自定义结构。但是,为Kitty结构提供一种分配性别的方法呢?为此,我们需要再学习一件事。

  1. 为我们的 Kitty 结构实现帮助程序函数

配置结构对于在结构中预定义值非常有用。例如,当设置与另一个函数返回的值相关的值时。在我们的例子中,我们有一个类似的情况,我们需要以一种根据Kitty的DNA设置的方式配置我们的Kitty的Gender

我们只会在creating Kittes用到这个函数。我们将创建一个名为gen_gender的公共函数,该函数返回类型Gender并使用随机函数在Gender枚举值之间进行选择。

将 ACTION #4 替换为以下代码段:

代码语言:javascript
复制
fn gen_gender() -> Gender {
    let random = T::KittyRandomness::random(&b"gender"[..]).0;
    match random.as_ref()[0] % 2 {
        0 => Gender::Male,
        _ => Gender::Female,
    }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 编写自定义类型Gender
相关产品与服务
区块链
云链聚未来,协同无边界。腾讯云区块链作为中国领先的区块链服务平台和技术提供商,致力于构建技术、数据、价值、产业互联互通的区块链基础设施,引领区块链底层技术及行业应用创新,助力传统产业转型升级,推动实体经济与数字经济深度融合。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档