区块连游戏开发教程

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

(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

 

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>