算法
鹿野素材屋
独立游戏/应用开发,《香椿勇者》开发者,长期接各类外包。
对动作游戏、游戏AI具有浓厚兴趣,现在主要进行模拟经营类型游戏开发。
展开
-
用正弦函数实现跳跃弧线
在游戏中,需要实现一个跳跃的功能,我最开始用的是重力加速度。即水平速度不变,垂直速度加等于重力,但策划觉得不好调。最后决定使用固定的曲线函数实现,即X轴速度不变,Y轴按照距离最高点的距离求位置。有了以上储备,我们就可以得到如下函数。这样就可以就联想到了正弦函数。原创 2024-06-14 16:20:41 · 227 阅读 · 0 评论 -
算法:给出指定整数区间、期望值,得到最终结果
在游戏中,我们经常会遇到以下情况:打开宝箱,获得x个卡牌碎片。原创 2023-11-24 14:09:57 · 581 阅读 · 0 评论 -
《羊了个羊》牌规则堆摆放生成
这两张牌我们可以称之为一个层级,如果再放入一张牌C盖在牌B上,那就是两个层级。依次类推,层级越多的情况下,玩家能拿到消除卡牌的几率越低,游戏也就越难。比如我们是100*150像素的卡牌,安全区域为900*900.为了避免牌堆超出界限,X轴的区间可以设为(-4,4),Y轴区间可以设为(-3,3)。另外我们可以观察到,牌B如果想盖住牌A,则牌B的X/Y轴需要在牌A的位置+-0.5张牌的距离。最近在研究规则卡牌堆的生成规则,如果想摆成规则图案的话,是需要配合表格来实现的。原创 2022-11-08 16:55:33 · 1093 阅读 · 0 评论 -
矩形的镜像算法
目前到这步就实现了位置颠倒,如果要做到显示颠倒,就需要将物体旋转相应角度。2,x值=x2-(a1-x1)=(a2-a1)需求:绿色矩形中,红色左右颠倒到黄色位置。上下镜像,对称镜像算法类似。原创 2022-10-12 16:46:56 · 221 阅读 · 0 评论 -
地图生成:如何用多种矩形填满整个矩形区域
需求:已知一块矩形区域,基本单元格是1*1,如何用多种矩形基本单位,填满整个矩形区域?例如上图红色框区域,第一次放入绿色基本矩形,被切割为两个红色区域;然后再放入蓝色基本矩形,各个未放置区域被切割为黑色区域。2,依次放入可放置的矩形单位,并针对可放置区域进行切割。3D及其它规则空间,可以用 类似的思路去解决。直到填满整个矩形平面为止。原创 2022-10-12 10:00:42 · 516 阅读 · 0 评论 -
C#:如何判断两个矩形是否相交
假设有两个矩形a、b,如果要求两个矩形在平面中是否相交?原创 2022-10-11 15:56:07 · 1167 阅读 · 0 评论 -
一个简单的抽奖算法
简单的抽奖算法原创 2022-06-28 16:54:16 · 678 阅读 · 0 评论 -
遗传算法入门:族群繁衍问题
前言记得学遗传算法的时候,有个案例大致意思是:山羊会在山坡不同高度出生,然后朝着不同的方向行走,当低于一定高度的时候山羊会死亡。当N代以后,模拟山羊的属性。这个案例的最大高度就是山顶,山羊会不停奔走,繁衍会产生后代,是一道比较经典的族群繁衍问题。这里我做下延伸,改编为人口问题。规则/// 管理器/// 规则:/// 1,管理器控制初始人口的数量,最大寿命区间等初始数值/// 2,管理器汇总人口的出生,并分配初始位置x/性别/// 3,管理器汇总人口的死亡,并在代际全部死亡的时候原创 2021-07-11 14:16:37 · 673 阅读 · 0 评论 -
用Dotween做的一次数值折返运动
需求:求一个值单位时间内,从最大值X到0再返回到X代码如下:using System.Collections;using System.Collections.Generic;using UnityEngine;using DG.Tweening;public class 测试插值运动 : MonoBehaviour{ public float get; // Start is called before the first frame update void原创 2021-05-19 15:55:37 · 359 阅读 · 0 评论 -
Unity广度寻路算法
由于项目中的连接点是逻辑上的点,采用的是图的连接方式,所以采用广度寻路的方法。路径点命名规则如下:用逗号隔开,第一位代表本名,后面跟的是可寻路径点名字。寻路方法如下:using System.Collections;using System.Collections.Generic;using UnityEngine;public class FindWayPath{ class Node { public string name;//真名原创 2020-12-30 10:33:45 · 267 阅读 · 0 评论 -
Unity3D FindPonitWay:通过路径点寻路,个人编写的简单易用小插件
最近开发的模拟经营游戏中,有人物寻路的需求。具体如下图所示,人物会沿着固定轨迹走到工作的地点,进行相应的行为逻辑。由于人物基本按照直线进行行走,使用A*等寻路插件不太符合自己的需求。将大地图简化为路径点之后。画出路线图如下:由图可分析出,我们只需要做到,不停的找离终点最近的相邻点,就可以实现寻路的目的。理清思路之后,代码写起来就比较简单了;首先是新建一个路径类,处理该父节点下的所有路径:using System.Collections;using System.Collect..原创 2020-12-09 15:08:30 · 1282 阅读 · 0 评论 -
游戏与现实时间流速的单位换算
通常游戏中的时间,与现实时间有很大的区别。比如说策划会给我们类似的需求:在游戏中的一天,在现实过程中只有12分钟。这个时候就需要用到单位换算,为了防止切换地图影响时间,我们以现实时间为准,推导出如下结论:500ms=0.5s=1m,30s=1h,12m=一天由此可以通过如下步骤求解:第一步,通过时间戳,算出当前已经过去的毫秒数 /// <summary> /// 转换时间戳 /// </summary> public ..原创 2020-11-17 18:11:11 · 1556 阅读 · 0 评论 -
我曾在极度愤怒的情况下,完成几百位的乘法运算
晚上加班的时候,策划一直在念叨数值的事儿。有些心烦意乱,顺口吐槽到,不如把数值运算丢给服务器人员去算。哪知策划立马就说,这不行,他们原来服务器进行六十多位的运算时候,服务器炸了。一说这个我就不乐意了,正好前端时间写了个超大数运算的方法,拿来检测下。 var _nu = "83497893246298346827346872346982360823579357623984623957438574309580293583209572309857846982364932784687236478921原创 2020-09-24 21:19:33 · 159 阅读 · 0 评论 -
C#算法题:随机生成1-100,越靠近中位(50、51)的数概率越大
今天策划提了个比较特殊的要求:随机生成1-100,越靠近中位(50、51)的数概率越大。目前想到的,首先还是用随机数的方法,就是把每个数得一个比例值,比如说1的概率值为1...33的概率值为33...100的概率值为1;最后加上所有的概率值,随机出来一个数。解码得出最终随机出来的数。代码如下:public int GetCentre() { var _all = 0; for (var _i = 1; _i <= 100; _i++)原创 2020-08-24 16:17:29 · 1117 阅读 · 0 评论