区块连游戏开发教程(代码片段)

awf133 awf133     2023-02-24     290

关键词:

区块链开发在过去几年中发展迅速,现在正被软件开发的各个领域采用。从去中心化应用程序

(DApps)到去中心化金融(DeFi)软件,再到 NFTs,再到 DAOs,区块链技术已经渗透到广泛的行业并服务于许多用例。

在本教程中,我们将探讨区块链游戏开发的新兴趋势。基于区块链的游戏也被称为连锁游戏。一旦您了解了编写智能合约并将其部署到区块链所涉及的基本结构,您就可以使用加密空间中可用的工具来构建游戏。

我们将构建一个彩票游戏来演示区块链上的游戏开发是如何工作的。我们还将回顾在区块链游戏中实现交易的基本结构。然后,我们将其部署到测试网网络。

什么是区块链?

区块链的底层数据结构是一串链表,或者说是唯一的“块”。添加到链中的每个区块都会自动链接到前一个添加的区块,并且前一个区块也指向其前一个区块。

这个链表链本身就是一个交易列表。在将这些块添加到列表数据结构之前就这些块达成一致的过程奠定了区块链给我们的关键创新:协议。该协议帮助网络决定如何将块添加到链中。

这个决策过程催生了区块链的去中心化性质。工作量证明 (PoW)、取证证明 (PoS) 和权威证明 (PoA) 是去中心化机制,通过这些机制,在将区块添加到链之前就可以做出这些决定并达成一致。

通过这些区块链出现的加密货币是一种激励人们运行软件以保护这些区块链周围网络安全的手段。

NEAR等区块链平台提供了一个加密安全平台,用于使用智能合约存储、更新和删除区块链中的数据。

Web3游戏开发

在区块链的上下文中,Web3 是指在区块链上运行的去中心化应用程序。这些应用程序允许任何人参与,而无需将其个人数据货币化。凭借对这些区块链支持的编程语言的深入了解,我们可以开始编写智能合约,将游戏应用程序构建为区块链上的 DApp。

随着区块链生态系统的发展,新的范式出现了。从 De-Fi 生态系统中汲取灵感,区块链游戏生态系统也进化为 GameFi。GameFi,也称为“游戏”,通过将普通用户转变为游戏行业重大决策背后的主导力量,引入了一种新的游戏方式。

在交易贵重物品以及通过代币

和不可替代的代币产生额外收入时,GameFi 促进了玩家拥有的经济。这意味着围绕特定游戏建立社区,这些游戏的用户可以赚取加密货币或资产,这些加密货币或资产在游戏的元空间内(以及游戏外)都很有价值。

在 NEAR 区块链上编写智能合约

在本教程中,我们将通过构建示例游戏项目来演示如何在 NEAR 区块链上构建游戏。

在这个游戏中,我们将探索如何设置代码库结构和编写在 Near 区块链上运行的智能合约所需的编程语言。完成后,我们将在本地环境中测试我们的应用程序,然后将我们的智能合约部署到测试网。

我们将克隆一个初学者工具包代码库。这个存储库提供了一个基本的样板,在我们构建游戏的各种功能时,可以在其上编写更多的智能合约代码。

git clone https : //github.com/I

kehAkinyemi/lottery-smart-contract.git

成功执行上述命令后,将目录更改为文件夹。您可以在任何文本编辑器中打开它;在本教程中,我们将使用 Visual Studio Code。lottery-smart-contract

从终端运行文件夹目录中的命令。code .

Ikeh Akinyemi 是驻尼日利亚河流州的一名软件工程师。他热衷于学习纯数学和应用数学概念、开源和软件工程。

区块链游戏开发指南

2021 年 11 月 12 日 8 分钟阅读

区块链开发在过去几年中发展迅速,现在正被软件开发的各个领域采用。从去中心化应用程序(DApps)到去中心化金融(DeFi)软件,再到 NFTs,再到 DAOs,区块链技术已经渗透到广泛的行业并服务于许多用例。

在本教程中,我们将探讨区块链游戏开发的新兴趋势。基于区块链的游戏也被称为连锁游戏。一旦您了解了编写智能合约并将其部署到区块链所涉及的基本结构,您就可以使用加密空间中可用的工具来构建游戏。

我们将构建一个彩票游戏来演示区块链上的游戏开发是如何工作的。我们还将回顾在区块链游戏中实现交易的基本结构。然后,我们将其部署到测试网网络。

什么是区块链?

区块链的底层数据结构是一串链表,或者说是唯一的“块”。添加到链中的每个区块都会自动链接到前一个添加的区块,并且前一个区块也指向其前一个区块。

这个链表链本身就是一个交易列表。在将这些块添加到列表数据结构之前就这些块达成一致的过程奠定了区块链给我们的关键创新:协议。该协议帮助网络决定如何将块添加到链中。

这个决策过程催生了区块链的去中心化性质。工作量证明 (PoW)、取证证明 (PoS) 和权威证明 (PoA) 是去中心化机制,通过这些机制,在将区块添加到链之前就可以做出这些决定并达成一致。

通过这些区块链出现的加密货币是一种激励人们运行软件以保护这些区块链周围网络安全的手段。

NEAR等区块链平台提供了一个加密安全平台,用于使用智能合约存储、更新和删除区块链中的数据。

Web3游戏开发

在区块链的上下文中,Web3 是指在区块链上运行的去中心化应用程序。这些应用程序允许任何人参与,而无需将其个人数据货币化。凭借对这些区块链支持的编程语言的深入了解,我们可以开始编写智能合约,将游戏应用程序构建为区块链上的 DApp。

随着区块链生态系统的发展,新的范式出现了。从 De-Fi 生态系统中汲取灵感,区块链游戏生态系统也进化为 GameFi。GameFi,也称为“玩游戏”,通过将普通用户转变为游戏行业重大决策背后的主导力量,引入了一种新的游戏方式。

在交易贵重物品以及通过代币和不可替代的代币产生额外收入时,GameFi 促进了玩家拥有的经济。这意味着围绕特定游戏建立社区,这些游戏的用户可以赚取加密货币或资产,这些加密货币或资产在游戏的元空间内(以及游戏外)都很有价值。

在 NEAR 区块链上编写智能合约

在本教程中,我们将通过构建示例游戏项目来演示如何在 NEAR 区块链上构建游戏。

在这个游戏中,我们将探索如何设置代码库结构和编写在 Near 区块链上运行的智能合约所需的编程语言。完成后,我们将在本地环境中测试我们的应用程序,然后将我们的智能合约部署到测试网。

我们将克隆一个初学者工具包代码库。这个存储库提供了一个基本的样板,在我们构建游戏的各种功能时,可以在其上编写更多的智能合约代码。

git clone https : //github.com/IkehAkinyemi/lottery-smart-contract.git

成功执行上述命令后,将目录更改为文件夹。您可以在任何文本编辑器中打开它;在本教程中,我们将使用 Visual Studio Code。lottery-smart-contract

从终端运行文件夹目录中的命令。code .

文件夹结构入门套件

上图显示了 NEAR 项目的基本文件夹结构,使用AssemblyScript作为其智能合约。

该script文件夹包含用于编译智能合约并将其部署到区块链的 shell 源文件。该src包含lottery的文件夹,里面其中,我们会写我们的智能合同所需的代码。

剩下的文件是 AssemblyScript 需要理解 Near 上定义的一些类型的配置文件。该库是用于在 AssemblyScript 中开发 NEAR 智能合约的包的集合。near-sdk-as

如何在 NEAR 区块链上构建彩票游戏

通过这个游戏,我们将探索使用 AssemblyScript 在 Near 区块链上编写智能合约的一些基本概念。

运行yarn installornpm install命令来安装库和任何必要的依赖项。near-sdk-as

接下来,创建一个名为assembly. 在此文件夹中,创建两个文件:和. 该文件包含我们将在文件中的整个代码中使用的不同对象类型。该文件包含以下内容:index.tsmodel.tsmodel.tsindex.tsmodel.ts

import RNG from "near-sdk-as";

@nearBindgen
export class Lottery
private luckyNum: u32 = 3;

constructor()
const randGen = new RNG<u32>(1, u32.MAX_VALUE);
this.id = "LO-" + randGen.next().toString();

用该play函数,任何玩家都可以调用它来使用该RNG对象生成一个随机数

。然后,我们导入了logging对象,这使我们可以访问本地控制台上的输出值——这是我们的本地机器终端。

该play函数返回一个bool值,该true或false值是比较的结果pickedNum对以确定猜测的数是否等于在彩票游戏定义。this.luckyNumluckyNum

接下来,我们将定义reset函数。顾名思义,这将使我们能够将 重置为新的随机数:this.luckyNum

import RNG, logging from "near-sdk-as";

@nearBindgen
export class Lottery
...

play(): bool
const randGen = new RNG<u32>(1, u32.MAX_VALUE);
const pickNum = randGen.next();

logging.log("You picked: " + pickedNum.toString());

return pickedNum === this.luckyNum

在上面的代码中,我们生成了另一个新的随机数。使用该assert函数,我们将其与当前值进行了比较。this.luckyNum

如果比较结果为true,则函数的其余代码将继续执行。如果不是,则函数在该点停止并返回断言消息。Rerun this function to generate a new random luckyNum

当assert为真时,我们将变量分配给新生成的数字。this.luckyNumrandNum

定义Player对象

对于彩票游戏的每个玩家,我们将定义一个基本类型结构。这种结构将玩家呈现在我们的游戏中。

使用以下代码更新文件:model.ts

...
@nearBindgen
export class Lottery
...

reset(): string
const randGen = new RNG<u32>(1, u32.MAX_VALUE);
const randNum = randGen.next();
assert(randNum !== this.luckyNum, "Rerun this function to generate a new random luckyNum");

this.luckyNum = randNum;
return "The luckyNum has been reset to another number";

layer对象类型包含两个接口:所述变量,它是一个类型,并且,这是布尔值

的数组。this.idAccountIDthis.guesses

PersistentVector数据结构是数组的数据类型。在初始化过程中,我们使用Context对象通过函数获取当前智能合约的调用者。然后,我们将其分配给。Context.senderthis.id

对于,我们初始化一个新对象并将其分配给。然后,使用 上可用的函数接口,我们将一个新的布尔值 , 附加到变量中。this.guessesPersistentVectorthis.guessespushPersistorVectorisRightthis.guesses

让我们定义在下一节中定义核心函数时将使用的其他类型和变量:

...
exsport const TxFee = u128.from("500000000000000000000000");
export const WinningPrize = u128.from("100000000000000000000000");
export const Gas: u64 = 20_000_000_000_000;

...

export const players = new PersistentMap<AccountID, Player>("p")
...

定义核心游戏功能

在文件夹内创建一个文件。我们将在这里定义游戏的核心功能。index.tsassembly

在文件里面,定义一个函数,如下图:index.tspickANum

import RNG, logging, PersistentVector, Context from "near-sdk-as";

export type AccountID = string;

@nearBindgen
export class

Lottery
...


@nearBindgen
export class Player
id: AccountId;
guesses: PersistentVector<bool>;

constructor(isRight: bool)
this.id = Context.sender;
this.guesses = new PersistorVector<bool>("g"); // choose a unique prefix per account

this.guesses.push(isRight);

在上述函数中,我们正在验证 0.5 NEAR 代币的存款,然后彩票游戏的任何玩家可以调用任何调用来玩智能合约上的游戏。这样,我们的玩家在玩游戏之前就支付了一定的钱。此外,一旦玩家开始比赛,我们会在玩家数据结构中更新该玩家的个人资料。

接下来,让我们定义一个函数,该函数将通过随机生成等于 的正确数字来处理支付获胜玩家的费用luckyNum

import TxFee, Lottery, Player, players, Gas, WinningPrize from "./model";
import Context, u128, ContractPromiseBatch, logging from "near-sdk-as";

function on_payout_complete(): string
logging.log("This winner has successfully been paid");


export function payout(): void
const player = players.get(Context.sender) as Player;

for (let x = 0; x < players.guesses.length; x++)
if (player.guesses[x] === true)
const to_winner = ContractPromiseBatch.create(Context.sender);
const self = Context.contractName;

to_winner.transfer(WinningPrize);
to_winner
.then(self)
.function_call("on_payout_complete", "", u128.Zero, Gas)


以上功能帮助我们向彩票中奖者进行转账交易。使用该ContractPromiseBatch对象,我们创建并设置一个转账交易到我们作为create方法参数传入的地址。然后,使用该transfer函数,我们将WinningPrize传递给它的令牌进行交易。

使用该function_call函数

,我们然后在交易成功发送时安排函数调用。对于这个游戏,我们打算在交易成功时调用的on_payout_complete函数是函数。

就本教程而言,我们不会专注于设置NEAR 测试网或测试网钱包,但我鼓励您查看链接以了解有关 NEAR 生态系统

中存在的各种网络的更多信息。

在本演示中,我们将构建我们的彩票游戏以生成二进制

格式的文件,然后使用该命令部署智能合约。.wasmnear dev-deploy

构建和部署智能合约

我们将首先使用以下asb命令构建智能合约:yarn asb

这是命令的别名命令,在位于根目录的文件中定义。yarn asb --verbose --nologopackage.json

在我们成功生成build包含文件夹

内文件的文件夹后,我们可以运行以下命令来部署它:lottery.wasmbuild/release/

near dev-deploy ./build/release/lottery.wasm

这将部署智能合约并为我们提供合约名称或 ID,我们可以使用它们在前端或通过 shell 文件与其交互。

$ near dev-deploy ./lottery.wasm
Starting deployment. Account id: dev-1635968803538-35727285470528, node: https://rpc.testnet.near.org, helper: https://helper.testnet.near.org, file: ./lottery.wasm
Transaction Id 4TWTTnLEx7hpPsVMfK31DDX3gVmG4dsqoMy7sA7ypHdo
To see the transaction in the transaction explorer, please open this url in your browser


Done deploying to dev-1635968803538-35727285470528

测试我们的区块链游戏

我已经编写了两个单元测试来确认我们的应用程序实际上是可运行的。这两个简单的测试将创建一个彩票游戏,并将luckyNum变量重置为新的随机数。

该文件夹包含测试文件。使用以下命令运行测试套件:/src/lottery/__test__

$ yarn test:unit
[Describe]: Checks for creating account

 [Success]: ✔ creates a new game
 [Success]: ✔ create and reset the luckyNum of a new game

    [File]: src/lottery/__tests__/index.unit.spec.ts
  [Groups]: 2 pass, 2 total
  [Result]: ✔ PASS
[Snapshot]: 0 total, 0 added, 0 removed, 0 different
 [Summary]: 2 pass,  0 fail, 2 total
    [Time]: 19.905ms
[Result]: ✔ PASS
   [Files]: 1 total
  [Groups]: 2 count, 2 pass
   [Tests]: 2 pass, 0 fail, 2 total
    [Time]: 13907.01ms
Done in 14.90s.

在本教程中,我们演示了如何在区块链平台上创建游戏应用程序。基于区块链的游戏可以作为多人游戏或单人游戏。

您还可以扩展区块链游戏的概念,以在您的游戏周围包含一个元节

(一个数字世界)。Metaverse 是一个玩家可以组队、创建治理甚至创建货币作为价值交换手段的世界。您可以在数字游戏世界中铸造 NFT 或形成 DAO。

查看 NEAR 文档,了解如何构建前端来使用本教程中创建的游戏智能合约。GitHub 上提供了智能合约

的完整代码库 本文转载于:http://www.wjyxt.net/sitemap.xml

 

兄弟连区块链教程fabric1.0源代码分析ledgerid数据(代码片段)

...多个Ledger,不同Ledger以ledgerID区分。多个ledgerID及其创世区块存储在idStore数据库中,idStore数据库基于leveldb实现。idStore默认使用路径:/var/hyperledger/production/ledgersData/ledgerProvider/。idStore库中特殊key"underCo 查看详情

flow区块链nft开发及部署教程cadence合约(代码片段)

Flow区块链是著名的加密猫团队特别针对NFT应用开发的新的公链,其目的是解决以太坊在NFT开发应用上存在的诸多问题,目前已经得到NBA、UFC等多个大牌厂商的支持。在这个教程中我们将学习如何创建Cadence智能合约并在Flo... 查看详情

cosmos基础--ignitecli(代码片段)

...LIv0.26.1官网DOCGitHubTryIgniteCLIonline你的项目值得拥有自己的区块链。Ignite使开发、增长和启动区块链项目比以往任何时候都更快。IgniteCLI是一个一体化平台,可以在自主和安全的区块链上构建、启动和维护任何加密应用程序Inst... 查看详情

python区块链教程(代码片段)

来源  https://zhuanlan.zhihu.com/p/142136802  此区块链教程将详细介绍区块链背后的理论。区块链是数字货币比特币的基本构建块,此教程将讨论比特币的复杂性,全面解释区块链架构,并建立我们自己的区块链。本教程... 查看详情

iovweavesdk快速教程-基于tendermint的区块链开发框架(代码片段)

IOVWeaveSDK是一个基于Tendermint共识引擎的区块链开发框架,Weave提供了很多常用功能的预置模块用于你自己的区块链,同时也支持自定义扩展。Weave的一些亮点包括基于Merkle树的数据存储、高度灵活的扩展支持系统以及核心... 查看详情

rust区块链开发包(代码片段)

...9个主流的用于以太坊、比特币、tendermint、eosio、polkadot等区块链开发的Rust包,可用于区块链应用的快速开发。区块链开发教程链接: 以太坊 | 比特币 | EOS | Tendermint | HyperledgerFabric | Omni/USDT | Ripple1、rust-bitcoi 查看详情

利用infura对接filecoin区块链教程(代码片段)

...a提供的FilecoinAPI来创建一个简单的Node.js程序来对接Filecoin区块链网络& 查看详情

cosmos区块链chainlink预言机教程(代码片段)

区块链预言机(Oracle)是一种第三方去中心化数据服务,可以为智能合约和区块链提供链外数据。预言机在封闭、确定性的区块链系统与现实世界之间搭建了一座桥梁。区块链开发教程链接:以太坊|比特币|EOS|Tend... 查看详情

微信小游戏开发教程-游戏实现1(代码片段)

微信小游戏开发教程-游戏实现1概述微信开发者工具官方提供一个飞机大战的游戏Demo,这里我们不再使用这个demo,我们以FlappyBird为例,为了让读者更加容易理解。源码https://github.com/onlynight/FlappyBird强烈建议读者根据... 查看详情

基于以太坊的智能合约开发教程solidity全局变量(代码片段)

...全局变量block.blockhash(uintblockNumber)neturns(bytes32):返回给定区块号的哈希值,只支持最近256个区块,且不包含当前区块。在版本0.4.22中奔用并被替换为。bLockhash(uintbLockNumben)block.coinbase(address):当前 查看详情

万字解析——区块链hyperledgerfabric2.2部署实战教程(代码片段)

导航一、前言二、hyperledgerfabric介绍三、测试网络示例3.1搭建开发环境3.2安装示例、二进制和Docker镜像3.3使用Fabric测试网络3.4使用认证机构建立网络四、汽车生产应用4.1搭建开发环境4.2注册登记等操作使用4.3智能合约4.4更新账本... 查看详情

flow区块链门票nft开发实战含源码(代码片段)

...个教程中,我们将门票作为一种NFT资产,利用FLow区块链的Cadence智能合约来解决票务市场的主要痛点,例如防伪、中介手续费、二级市场混乱等问题。区块链开发教程链接:以太坊| 查看详情

区块链教程以太坊源码分析core-state-process源码分析(代码片段)

兄弟连区块链教程以太坊源码分析core-state-process源码分析(二):关于g0的计算,在黄皮书上由详细的介绍和黄皮书有一定出入的部分在于ifcontractCreation&&homesteadigas.SetUint64(params.TxGasContractCreation)这是因为Gtxcreate+Gtransaction=Tx... 查看详情

区块链学习(代码片段)

...器开发六年多了,主要是做并发服务器和游戏相关开发,区块链技术新兴起,自己也是很感兴趣,我是零基础学区块链的,给自己设定了一个规划,先读一读区块链相关的基础和概念,以及基本算法,然后用成熟的引擎做一个dem... 查看详情

微信小游戏开发教程-游戏实现2(代码片段)

微信小游戏开发教程-游戏实现2绘制地面类似于绘制背景,读者自行完成代码。src/runtime/land.js简易View系统坐标布局对于复杂的页面来说维护相当困难,因此这里我们引入布局的概念。我们定义一个Group类(base/group.js&#... 查看详情

微信小游戏开发教程(代码片段)

微信小游戏开发教程-前言自18年年初对开发者开放小游戏接口以后小游戏越来越火热,本文就是对小游戏开发的入门教程,希望这篇文章能够帮到想要入门开发游戏的你。哈哈哈,看到有人说我故意分成好几篇刷PV... 查看详情

微信小游戏开发教程(代码片段)

微信小游戏开发教程-前言自18年年初对开发者开放小游戏接口以后小游戏越来越火热,本文就是对小游戏开发的入门教程,希望这篇文章能够帮到想要入门开发游戏的你。哈哈哈,看到有人说我故意分成好几篇刷PV... 查看详情

微信小游戏开发教程-新建项目(代码片段)

微信小游戏开发教程-新建项目1.新建小游戏项目我们这回使用空项目,不要勾选使用模板创建。2.添加小游戏必要文件项目创建好以后我们发现缺少一些必要的文件,我们手动添加即可:game.json这个文件是小游戏的配... 查看详情