羊了个羊区块链闯关游戏系统开发模式代码实现技术介绍

简介: 羊了个羊区块链闯关游戏系统开发模式代码实现技术介绍

羊了个羊-gamefi 是一款基于 Web3 和 BNBChain 开发的区块链游戏。游戏玩法与Web2版本的一样,保持了三消游戏的特性。并创新性的加入了 Play2Earn 的机制,区块链游戏I34-系统I633-开发5319搭建,将游戏的所有收入公平的分配给所有玩家,从而实现游戏生命周期的长久维持!

实现概要

游戏的整体很简单,但其中有几个实现的重点需要注意:

牌堆数据结构的实现
如何检测和更新可拾取的牌
先做个小定义,一个牌堆中可被拾取的牌以下将简称其为:“窗口牌”。
牌堆模式A
A.png

牌堆模式B
B堆牌.png

牌堆模式C
堆牌C.png

02 牌堆的数据结构
将其定义为MContainerBase基类

MContainerBaseextends Node2Dclass_name MContainerBase

func _ready:add_to_group(name)add_to_group("game")varMask = FileReader.read(mask_file,null)box.resize(size_x)fori inrange(size_x):box[i]= []box[i].resize(size_y)forj inrange(size_y):boxi= []boxi.resize(size_z)fork inrange(size_z):ifMask== nullor Maski == 1:boxi[k] = add_tile(i,j,k,get_parent.distribute_face)else:boxi[k] = null

forx inrange(size_x):fory inrange(size_y):forz inrange(size_z):check_is_on_top(x,y,z)

最基础的牌堆就是一个 xyz的三维数组,我们可以使用一切方法构造想要的排队形状:柱形、条形、甚至金字塔形。这都不会影响后面程序的实现。

03 如何检测和更新可拾取的牌

三种牌堆模式分别派生自MContainerBase,并对应着如下三种检测方式:

牌堆模式A:仅检测自己正上方是否有牌

1Cover1extends MContainerBase

funccheck_is_on_top(x,y,z):ifhas_tile(x,y,z):ifnot has_tile(x,y,z + 1) :(boxx[z] asMTile).set_is_on_top(true)

牌堆模式B:检测自己上方两方位是否有牌

1 Cover 2extends MContainerBase

func check_is_on_top(x,y,z):if has_tile(x,y,z):if z%2 == 0:if not has_tile(x,y,z + 1) and not has_tile(x - 1 ,y,z + 1):(boxx[z] as MTile).set_is_on_top(true)else:if not has_tile(x,y,z + 1) and not has_tile(x + 1 ,y,z + 1):(boxx[z] as MTile).set_is_on_top(true)

牌堆模式C:检测自己上方四方位是否有牌

1 Cover 4extends MContainerBase

func check_is_on_top(x,y,z):if has_tile(x,y,z):if z%2 == 0:if not has_tile(x,y,z + 1) and not has_tile(x - 1 ,y,z + 1) and not has_tile(x,y - 1 ,z + 1) and not has_tile(x - 1,y - 1,z + 1):(boxx[z] as MTile).set_is_on_top(true)else:if not has_tile(x,y,z + 1) and not has_tile(x + 1 ,y,z + 1) and not has_tile(x,y + 1 ,z + 1) and not has_tile(x + 1,y + 1,z + 1):(boxx[z] as MTile).set_is_on_top(true)

04 如何生成新关卡

简单了解游戏规则后,我们就不难推导出,每个关卡能被通过的一个必要条件就是每一种图案的总数,必须能被3整除。实现方法如下:
vartiles = []exportvar initial_tiles = {0:10,1:10,2:10,3:10,4:10,5:10,6:10,7:10,8:10,9:10,10:10,11:10,12:10,13:10,14:10,15:10}
func_init:forkey in initial_tiles:varnum = initial_tiles[key]*3fori in range(0,num):tiles.append(key)tiles.shuffle

其中字典initial_tiles 的key对应着每一种图案,后面的value对应着这一关该图案出现的“对数”(此处1对等于3个)。按照value乘以3的数量存入数组tiles(下文称之为:待发牌池),然后把待发牌池中的元素打乱顺序,等待“发牌”。

05 洗牌道具的实现

洗牌的实现原理很简单,把当前桌面的牌记录在一个数组tiles中,当需要洗牌时,先打乱一下数组中牌的顺序,然后让桌面上每一张牌到tiles中重新取一个值。再来个眼花缭乱点的动画,还真挺像那么回事儿。
funcshuffle_tiles:tiles.shuffletiles_index = -1
funcredistribute_face-> int:tiles_index += 1returntiles[tiles_index]

相关文章
|
5月前
|
存储 安全 区块链
区块链与游戏:颠覆传统的数字娱乐新纪元
**区块链技术颠覆游戏行业,赋予玩家真实所有权,增强资产安全与经济系统创新。去中心化、不可篡改的特性确保公平性,智能合约驱动新盈利模式。虽有技术复杂性与扩展性挑战,但未来区块链游戏有望带来更丰富、安全、公平的体验,推动行业持续革新。**
区块链与游戏:颠覆传统的数字娱乐新纪元
|
4月前
|
存储 安全 前端开发
区块链 DAPP 互助逻辑模式系统开发技术方案[源码示例]
Dapp(Decentralized Application)是指不受任何中心化组织或机构控制的、使用特定区块链技术为基础的去中心化应用程序。Dapp 是一种特殊类型的应用,它可以在任何基于区块链技术的系统,例如 Ethereum、EOS 或其他的智能合约系统上运行。
|
4月前
|
存储 安全 区块链
SWAP交易所系统开发|区块链交易所系统开发方案
尽管Web3.0的前景仍然不确定,但像尤派数字传媒这样的先行者正在积极尝试元宇宙,并加速转型的步伐。在面对即将到来的新一代互联网时,尤派数字传媒既不会过于骄傲自大,也不会过于谨小慎微。唯有在当前基础上稳步推进,夯实基础,才能在不确定的环境中获得最大的确定性。
|
5月前
|
安全 算法 区块链
区块链游戏在社交方面的创新应用
**区块链游戏创新:** 利用去中心化与透明性,实现社区决策民主化,通过智能合约保障公正。玩家通过投票影响游戏发展,参与社区获代币奖励,促进内容生产和社交。虚拟物品所有权确保,交易安全,增强游戏互动。跨游戏资产互通打造虚拟世界,去中心化社交平台保护用户数据。这些变革提升游戏体验,推动行业进步。
|
4月前
|
安全 编译器 区块链
区块链代币 DAPP 通缩燃烧模式系统开发技术方案
合约代码部署流程可能因区块链技术的不同实现而略有不同,但基本步骤如下:
|
6月前
|
存储 供应链 安全
构建未来:智能合约在区块链生态系统中的关键作用
【5月更文挑战第30天】 随着区块链技术的迅猛发展,智能合约已成为推动这一领域创新的核心机制。本文深入探讨了智能合约的技术基础、运作原理及其在各行各业中的应用潜力。我们将分析智能合约如何提高交易效率,减少法律纠纷,并为分布式应用(DApps)提供坚实的基础。文章还将讨论智能合约面临的挑战与未来的发展方向,为读者提供一个全面且深入的视角,以理解这一变革性技术如何塑造数字经济的未来。
|
5月前
|
供应链 区块链
基于区块链的供应链管理追溯系统研究
基于区块链的供应链管理追溯系统研究
|
3天前
|
存储 供应链 安全
探索区块链技术在供应链管理中的应用
本文深入探讨了区块链技术在供应链管理中的应用,分析了其如何提高透明度、安全性和效率。通过具体案例研究,展示了区块链如何解决传统供应链中的信任问题,降低成本,并促进更高效的物流管理。文章还讨论了实施区块链技术面临的挑战和未来发展趋势。
|
4天前
|
存储 供应链 区块链
区块链技术在供应链管理中的应用与实践
区块链技术在供应链管理中的应用与实践
|
7天前
|
供应链 区块链 数据安全/隐私保护
区块链技术在供应链管理中的革新应用
区块链技术在供应链管理中的革新应用