H5/小程序小游戏项目系统开发技术(成熟概念)

简介: H5/小程序小游戏项目系统开发技术(成熟概念)

​​“羊了个羊”这个微信小游戏真实让人欲罢不能,沉迷其中。每天打开朋友圈、微信群,大家都在问第二关过了吗?甚至于小编有个当医生的朋友,忙碌亿整天之后,晚上也在争分夺秒的玩“羊了个羊”。

如果我们希望能够区分这些小猫,我们需要赋予它们独特的属性!在上一步中,我们使用了尚未实际定义的KittyRandomness。

我们将使用frame_support 中的Randomness trait执行此操作。它将能够生成一个随机的种子,我们将用它来创建独特的小猫,并培育新的小猫。

在pallet的配置特征中,定义受Randomness特征约束的新类型。
来自frame_support中Randomnesstrait 需要使用参数来指定Output和BlockNumber泛型。

将 ACTION #5 行替换为:

type KittyRandomness: Randomness<Self::Hash, Self::BlockNumber>;
复制

在runtime中指定实际类型。
鉴于我们在pallet的配置中添加了一个新类型,我们需要配置runtime以设置其具体类型。如果我们想更改正在使用的算法,而无需修改pallet内的使用位置,KittyRandomness可能会派上用场。为了展示这一点,我们将设置 KittyRandomness 类型为 FRAME 的 RandomnessCollectiveFlip 的一个实例。 方便的是,node template已经有一个 RandomnessCollectiveFlip pallet的实例。

在runtime的runtime/src/lib.rs 中设置 KittyRandomness 类型:

impl pallet_kitties::Config for Runtime {

type Event = Event;
type Currency = Balances;
type KittyRandomness = RandomnessCollectiveFlip; // <-- ACTION: add this line.

}
复制

在这里,我们从其接口(Randomness<Self::Hash, Self::BlockNumber>)中抽象出随机性生成实现(RandomnessCollectiveFlip)。

随机生成DNA
生成DNA类似于使用随机性随机分配性别类型。不同之处在于,我们将使用在上一部分中导入的blake2_128。如果我们在同一块中多次调用此函数,我们还将使用extrinsic_index从frame_systempallet中生成不同的哈希。将 ACTION #6 行替换为:

impl pallet_kitties::Config for Runtime {

type Event = Event;
type Currency = Balances;
type KittyRandomness = RandomnessCollectiveFlip; // <-- ACTION: add this line.

}
复制

写入剩余的存储项

为了轻松跟踪我们所有的小猫咪,我们将标准化我们的逻辑,以使用唯一的 ID 作为存储项的全局KEY。这意味着单个唯一键将指向我们的Kitty对象(即我们之前声明的结构)。

为了使其正常工作,我们需要确保新Kitty的ID始终是唯一的。我们可以使用新的存储项Kitties来执行此操作,该存储项将从ID(哈希)映射到Kitty对象。

使用此对象,我们只需检查此存储项是否已包含使用特定 ID 的映射,即可轻松检查冲突。例如,从可调度函数内部,我们可以使用以下命令进行检查:

ensure!(!<Kitties>::exists(new_id), "This new id already exists");
复制

我们的runtime需要注意:

独特的资产,如货币或小猫(这将由名为Kitties的存储map持有)。
这些资产的所有权,如帐户ID(这将处理一个名为KittiesOwned的新存储映射)。
要为结构Kitty创建存储实例,我们将使用StorageMap — FRAME 提供给我们的。

存储项的外观如下:

[pallet::storage]

[pallet::getter(fn kitties)]

pub(super) type Kitties<T: Config> = StorageMap<

_,
Twox64Concat,
T::Hash,
Kitty<T>,
;
复制

KittiesOwned存储项与此类似,只是我们将使用BoundedVec来跟踪我们将在runtime/src/lib.s中配置的 Kitties 的最大数量。

[pallet::storage]

[pallet::getter(fn kitties_owned)]

/// Keeps track of what accounts own what Kitty.
pub(super) type KittiesOwned<T: Config> = StorageMap<

_,
Twox64Concat,
T::AccountId,
BoundedVec<T::Hash, T::MaxKittyOwned>,
ValueQuery,
;
复制

复制上面的两个代码片段以替换操作 #7 行。

在检查pallet编译之前,我们需要在配置特征中添加一个新类型MaxKittyOwned,这是一个pallet常量类型(类似于前面KittyRandomness的步骤)。将操作 #9 替换为:

[pallet::constant]

type MaxKittyOwned: Get;
复制

最后,我们在runtime/src/lib.rs中定义类型MaxKittyOwned。这与我们对 Currency 和 KittyRandomness 遵循的模式相同,只是我们将使用 parameter_types ! 宏添加一个固定的 u32!

parameter_types! { // <- add this macro

// One can own at most 9,999 Kitties
pub const MaxKittyOwned: u32 = 9999;

}

/// Configure the pallet-kitties in pallets/kitties.
impl pallet_kitties::Config for Runtime {

type Event = Event;
type Currency = Balances;
type KittyRandomness = RandomnessCollectiveFlip;
type MaxKittyOwned = MaxKittyOwned; // <- add this line

}
复制

检查Kitties 区块链编译

cargo build --release

相关文章
|
9天前
|
存储 传感器 小程序
跳绳计数小程序开发系统
首先,我们需要明确跳绳计数小程序的核心功能:为用户提供跳绳计数的便捷方式。这意味着小程序需要能够准确地记录用户的跳绳次数,并为用户提供清晰、直观的计数展示。
|
13天前
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
102 3
|
23天前
|
XML 小程序 JavaScript
小程序入门之项目配置说明和数据绑定
小程序入门之项目配置说明和数据绑定
34 1
|
24天前
|
移动开发 小程序 数据可视化
一招学会DIY官网可视化设计支持导出微擎、UNIAPP、H5、微信小程序源码
一招学会DIY官网可视化设计支持导出微擎、UNIAPP、H5、微信小程序源码
33 2
|
19天前
|
缓存 开发框架 移动开发
uni-app:下载使用uni&创建项目&和小程序链接&数据缓存&小程序打包 (一)
uni-app 是一个跨平台的开发框架,它允许开发者使用 Vue.js 来构建应用程序,并能够同时发布到多个平台,如微信小程序、支付宝小程序、H5、App(通过DCloud的打包服务)等。uni-app 的目标是通过统一的代码库,简化多平台开发过程,提高开发效率。 在这一部分中,我们将逐步介绍如何下载和使用uni-app、创建一个新的项目、如何将项目链接到小程序,以及实现数据缓存的基本方法。
|
3月前
|
小程序 前端开发 Java
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
JavaDog Chat v1.0.0 是一款基于 SpringBoot、MybatisPlus 和 uniapp 的简易聊天软件,兼容 H5、小程序和 APP,提供丰富的注释和简洁代码,适合初学者。主要功能包括登录注册、消息发送、好友管理及群组交流。
92 0
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
|
2月前
|
小程序 JavaScript 开发者
微信小程序分包的相关概念和使用
本文介绍了微信小程序分包的概念、优势、配置方法、加载规则、体积限制,以及独立分包和分包预下载的配置,旨在帮助开发者优化小程序的加载速度和开发效率。
|
20天前
|
小程序 API
微信小程序更新提醒uniapp
在小程序开发中,版本更新至关重要。本方案利用 `uni-app` 的 `uni.getUpdateManager()` API 在启动时检测版本更新,提示用户并提供立即更新选项,自动下载更新内容,并在更新完成后重启小程序以应用新版本。适用于微信小程序,确保用户始终使用最新版本。以下是实现步骤: ### 实现步骤 1. **创建更新方法**:在 `App.vue` 中创建 `updateApp` 方法用于检查小程序是否有新版本。 2. **测试**:添加编译模式并选择成功状态进行模拟测试。
35 0
微信小程序更新提醒uniapp
|
3月前
|
小程序 前端开发 JavaScript
【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序
【避坑宝】是一款企业黑红名单吐槽小程序,旨在帮助打工人群体辨别企业优劣。该平台采用SpringBoot+MybatisPlus+uniapp+uview2等技术栈构建,具备丰富的注释与简洁的代码结构,非常适合实战练习与学习。通过小程序搜索“避坑宝”即可体验。
91 0
【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序
|
3月前
|
存储 小程序 JavaScript