开发者社区> 小蚂蚁教你做游戏> 正文

微信小游戏开发实战13-随机生成形状功能的实现

简介: **微信小游戏开发实战系列的第13篇,点击上方的#微信小游戏开发实战话题可以查看本系列的所有内容。 本节内容包括:通过使用列表来实现可以设置权重的随机功能,以及游戏中的随机生成形状功能的具体实现。
+关注继续查看


**微信小游戏开发实战系列的第13篇,点击上方的#微信小游戏开发实战话题可以查看本系列的所有内容。

本节内容包括:通过使用列表来实现可以设置权重的随机功能,以及游戏中的随机生成形状功能的具体实现。

如果你没有任何的游戏开发经验,欢迎阅读我的“人人都能做游戏”系列教程,它会手把手的教你做出自己的第一个小游戏。


**游戏项目已开源到社区:https://gamemaker.weixin.qq.com/#/game?game_id=lbMmQzN2FkODUtZWZjZC00ZDA1LTkwOTctZTE5NWIwNGZjZjNj

大家可以拿到项目之后,对照着项目进行研究和学习。


在精致1010游戏中,包含 10 种不同类型的形状,这一节我们就来讲一下如何通过使用列表来控制不同形状的生成概率。


640.png

如图是游戏中使用的 10 种类型的形状,我为其进行了编号,有的类型只包含一种,如 7, 8, 10,有的类型包含两种,如 1,2,3,4,有的类型包含四种,如 5,6,9。


640.png

在游戏的下方存在 3 个形状槽,每个形状槽中都会随机的产生一种形状。我们可以通过设置不同类型的形状的生成概率来调整游戏的难度,例如 1,8 两种类型的形状出现的概率高的话,游戏的难度就会增大。反之,难度就会减小。


下面,我们就来实现一下如何根据设定的概率随机的生成形状。


首先,创建一个列表,用于设置 10 种类型的形状的权重(权重可以理解成概率,数值越大,则该图形出现的概率越高)。


640.png

如图,列表中包含了 10 个数值,我们将每个数值对应一种形状的类型,例如列表的第一个数值对应的是形状 1 的生成概率。这里我默认的将 10 种形状的权重都设置为 10,也就是说 10 种类型的形状出现的概率是均等的。


## 随机算法


接下来,我们了解一下一个简单的计算随机的算法。

640.png


假设我们当前需要在 3 项中进行随机,每一项的权重都是 10。首先我们计算一下总权重为 30,接着从 1~30 的数字中随机一个数字,当前假设随机到了 25。接下来进行循环遍历比对:


循环 1: 25 比第一个数值 10 要大,所以不是第 1 项,将 25 减去第 1 项的数值 10,进入下一循环。


循环 2: 15 比第一个数值 10 要大,所以不是第 2 项,将 15 减去第 2 项的数值10,进入下一循环。


循环 3: 5 比第一个数值 10 要小,所以是第 3 项,循环结束找到最终结果,随机到的是第 3 项。


这个算法只使用了一个列表就实现了根据不同的权重进行随机的功能,列表的项可以对应着任何的东西,例如可以设置一,二,三等奖,分别对着列表的 1,2,3 项,然后就可以通过设置三项的数值来决定随机的概率了,比如说可以这样设置 1,100,10000,这样极大的概率都是三等奖了。所以,你知道游戏和应用中的各种转盘,抽奖活动的原理了吧!


可能有人会说,我直接使用如果“那么,逻辑”不就行了?何必使用列表和循环这么麻烦。现在只有 3 项随机,可以使用“如果,那么”逻辑,但是如果有 30 项呢?如果每一项的权重需要经常设置和调整呢?


使用这个方法不论有多少项,不论每项的数值如何调整,都可以简单的通过调整列表中的数值满足要求。可以说是非常的好用,大家可以把它收录到自己的算法库中,每当遇到需要设置权重值的随机功能时,就可以拿过来用了。


## 随机生成形状的实现


接下来,看一下具体的实现。

640.png


首先,遍历一下列表,将所有的权重累加,计算总权重。接着在 1~总权重 间随机一个数值。然后,再次遍历列表逐项比对,直到找到当前的值小于当前项的值,那么当前的项的索引就是我们要找的随机项了。


在获取到了随机的项之后,接下来就要去生成对应的形状了。

640.png

逻辑非常简单,就是根据随机项的数值,生成不同类型的形状。


图中可以看到,这里我将“生成形状”都包装成了“函数”,下面我们就来了解一下如何在微信小游戏制作工具中使用函数。


## 使用函数


在积木区中找到“函数”类别,然后点击“新建函数”按钮。

640.png


给函数起一个名字,点击确定后,当前的积木区就会显示出当前要制作的函数了。

640.png


可以通过点击积木块上的“加号”和“减号”按钮来添加和删除参数。参数的作用就是向函数内传递用于计算和处理的东西。

640.png


如果你有过编程经验,就会知道根据返回类型来区分的话,函数分为两种,一种有返回类型,一个没有返回类型。但是在微信小游戏开发工具中,只有一种没有返回的类型的函数。


假设当前我们的函数有这样的功能,将两个参数中的数值进行相加,得到结果。由于函数不能返回值,所以这里我们需要借助一个全局变量来存储函数处理的结果值。

640.png


函数制作好后,可以直接拖拽对应的函数积木进行使用。函数计算的结果保存在了“全局-相加结果值”中,后续如果我们需要使用函数处理的结果值,就直接使用这个全局变量即可。

640.png


所有创建的函数都会显示在资源管理器中的函数模块下,可以右键点击对应的函数进行重命名和删除处理。

640.png


## 生成对应形状的实现


最后,让我们看一下项目中的生成形状5的具体实现。


游戏中的形状5包含了 4 种不同的形态。

640.png


生成形状5的函数,根据传入的参数,生成不同形态的形状。

640.png


生成形状5函数的使用,传入一个1~4的随机数值。

640.png


看一下最终游戏中生成新形状的效果。

640.gif


这节内容就到这里了。总结一下,我们了解一个非常好用的可以设置权重值的随机算法,只需要使用一个列表就可以满足各种各样的情况。另外我们了解了微信小游戏制作工具中的函数的创建和使用,最后,看了一下游戏中的随机生成形状功能的具体实现。


欢迎体验我的微信小游戏作品“精致1010”,一个精致而温暖的小游戏。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
18816 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
27994 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
13069 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
22050 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
15498 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的,?mysql的 3306,?mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建. ? have?fun! ?将编程看作是一门艺术,而不单单是个技术。
20109 0
+关注
小蚂蚁教你做游戏
关注我的微信公众号【小蚂蚁教你做游戏】
96
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载
http://www.vxiaotou.com