前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >羊了个羊APP/H5网页/小程序游戏系统开发搭建教程及部署源码

羊了个羊APP/H5网页/小程序游戏系统开发搭建教程及部署源码

原创
作者头像
VX_I357O98O7I8
发布2022-09-21 10:27:56
1.6K0
发布2022-09-21 10:27:56
举报
文章被收录于专栏:商业模式策划

将其定义为MContainerBase基类

代码语言:javascript
复制
#MContainerBaseextends Node2Dclass_name MContainerBase
func _ready():        add_to_group(name)        add_to_group("game")        var Mask = FileReader.read(mask_file,null)        box.resize(size_x)        for i in range(size_x):                box[i] = []                box[i].resize(size_y)                for j in range(size_y):                        box[i][j] = []                        box[i][j].resize(size_z)                        for k in range(size_z):                                if Mask == null or Mask[i][j] == 1:                                        box[i][j][k] = add_tile(i,j,k,get_parent().distribute_face())                                else:                                        box[i][j][k] = null                for x in range(size_x):                for y in range(size_y):                        for z in range(size_z):                                check_is_on_top(x,y,z)

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

项目中为了增加这个“大方块”的多样性,我还给它设置了如下的“遮罩”,这就是游戏中CSDN文字的由来。当然我们还可以通过“遮罩”来自由定义窗口牌,这部分就请大家自由发挥了。

代码语言:javascript
复制
# S形遮罩[        [0,0,0,0,0],        [0,0,0,0,0],        [1,1,1,0,1],        [1,0,1,0,1],        [1,0,1,1,1],]
图片
图片

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

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

牌堆模式A

仅检测自己正上方是否有牌

代码语言:javascript
复制
#1 Cover 1extends MContainerBase
func check_is_on_top(x,y,z):        if has_tile(x,y,z):                if not has_tile(x,y,z + 1) :                                (box[x][y][z] as MTile).set_is_on_top(true)

牌堆模式B

检测自己上方两方位是否有牌

代码语言:javascript
复制
#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):                                (box[x][y][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):                                (box[x][y][z] as MTile).set_is_on_top(true)

牌堆模式C

检测自己上方四方位是否有牌

代码语言:javascript
复制
#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):                                (box[x][y][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):                                (box[x][y][z] as MTile).set_is_on_top(true)

在Godot中,这三种牌堆模式还可以通过场景节点制作成预制体,这样关卡设计师就可以轻松地制作出美观的关卡了。

图片
图片
图片
图片

如何生成新关卡

简单了解游戏规则后,我们就不难推导出,每个关卡能被通过的一个必要条件就是每一种图案的总数,必须能被3整除。实现方法如下:

代码语言:javascript
复制
var tiles = []export var 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():        for key in initial_tiles:                var num = initial_tiles[key]*3                for i in range(0,num):                        tiles.append(key)        tiles.shuffle()

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何检测和更新可拾取的牌
  • 如何生成新关卡
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档