Beyond Ranch 成员提取工具的改进
感谢您的辛勤工作。
我是系统开发室的松山。
上次,我创建了一个简单的工具来对“超越午餐”进行分组。
这里查看最后一篇博客。
非常感谢组织文化委员会的成员。 (妄想)
原冈社长向我指出,单纯的随机分组在功能上是不够的, (现实)
要求
① 由于每月都会举行,因此可以指定月份。
② 可以保存(加载)抽取的数据。
如果
选择已经抽取的月份,则将显示已确定的组。与上个月相同的成员 避免这种情况(尽可能) *更新至 Unity 2019.4.18f1 (LTS)
是这样吗?
就Unity功能而言,我想说的是PlayerPrefs用在了②和③中。
其余的取决于程序。
① 可以指定月份
上次,我们将添加 UI(按钮和文本)来指定创建彩票按钮时的月份。
是这样的。
对于日期,您可以使用 System.DateTime,因此在启动时获取当前日期和时间,并
使用左右按钮 (◀︎ / ▶︎) 使用 AddMonth() 更新它。
由于仅显示年份和月份,因此将年份和月份设置为“文本”。
另外,还要考虑屏幕尺寸。
WebGL的默认分辨率是960x600,但我可以在ProjectSettings中更改它,所以我将其设置为1960x1080。
我们还将更改 Canvas 的大小并调整 UI 布局。
整个事情是这样的。
左右两边稀疏,却迷人。
② 可以保存(加载)绘制的数据
保存所选组的数据(成员)。
最好使用PlayerPrefs保存在本地。
单击此处查看 PlayerPrefs 的说明
由于您可以为任何键设置值,因此首先确定该键的规则。
使用年、月和组号作为唯一键。
string key = string.Format("group_{0}_{1}_{2}", GroupNo, date.Year, date.Month);
要保存的值是成员的名称。
稍后我们将使用 Split() 将它们分开,因此用空格(半角字符)分隔它们以创建字符串。
字符串 val = ""; for(int i=0; i<memberNames.Count; i++) { if (i > 0) val += " "; val += 成员名称[i];
现在我们有了 Key 和 Value,我们可以将它们保存到 PlayerPrefs 中。
PlayerPrefs.SetString(key, val); PlayerPrefs.Save();
这很容易。
当我在工作中认真使用它时,我会在保存之前对其进行加密,但由于这是一个内部工具,我认为纯文本就可以了。
③ 选择已抽签的月份后,显示已决定的组别。
从 PlayerPrefs 加载 ② 中保存的数据。
string val = PlayerPrefs.GetString(key); string[] 成员 = val.Split(' ');
您现在要做的就是在 UI 上反映加载的数据。
④ 避免与上个月相同的成员(尽可能)
最后,在抽奖的时候,我们会增加一个判断,使得和上个月(上个月)相同的会员不会中奖。
本次,以下情况我们将重新抽奖。
1. 与上个月不在同一组(领导者)
2. 与上个月不在同一组
但是,作为无限循环的对策,如果连续重画 5 次,在也是可以的同一个小组(领导者)。
首先,加载每个组上个月的成员。
之后,随机抽取候选人并做出以下判断。
没有加入与上个月相同的小组(领导者)
确定所选候选人上个月是否属于同一组。
上个月的成员存储在列表中,因此请使用 Contains() 检查它。
如果相同,则重新抽签。
不要与上个月相同的成员重叠。
了解上个月选定的候选人属于哪个组。
将上个月的群组成员与本月计划加入的群组中已注册的成员进行比较,
如果有相同的成员,则重新抽奖。
两个成员列表都是列表,因此使用 foreach 遍历它们并使用 Contains() 检查它们。
公共 bool IsSameMember(列表<string>lastManthMembers) { // 检查本月的成员是否包含上个月的成员 bool isSame = false; foreach (string mem in memberNames) { if(lastManthMembers.Contains(mem)) { isSame = true } } return isSame ;
嗯,我不认为这是一个好主意,但我也没有什么好主意。
但是,我认为它工作正常。
概括
我想我已经满足了要求。
・可以指定月份(System.DateTime)
・保存(加载)所选成员(PlayerPrefs)
・防止它们与上个月的成员重叠(内部实现)
・调整分辨率(WebGL)
这次的基本功能我也只是在组装它。
目前,Beyond Ranch 工具现已完成(ver1.0.0)。
如果您有任何要求,我们将改进功能,请随时与我们联系。
好了,现在就这些了。
保持 Git 更新。
我希望这会对您有所帮助。
统一示例
最后
我开设了我所属的系统开发服务网站“SEKARAKU Lab”。
Beyond是从服务器设计搭建到运营的一站式服务,所以如果您在服务器端开发方面遇到任何问题,请随时联系我们。
SEKARAKU 实验室: [https://sekarakulab.beyondjapan.com/](https://sekarakulab.beyondjapan.com/)