改进提取 Beyond Lunch 成员的工具

今天工作完成得很好。
我是系统开发部的松山。

上次,我为 Beyond Lunch 团队创建了一个简单的分组工具。
之前的博文可以在这里找到。
多亏了这个工具,组织文化委员会的成员们都非常感激。(想象)
然而,原冈会长给了我一些严厉但友善的反馈,认为仅仅随机分组是不够的,
所以我们来进一步改进一下。(现实)

要求

① 由于每月举行一次,请允许指定月份。②
允许保存(加载)所选数据。③
如果选择已选月份,请显示已确定的分组。④
尽量避免与上个月的成员相同。
* 已更新至 Unity 2019.4.18f1 (LTS)

大概就是这样。
就 Unity 的功能而言,主要在步骤 ② 和 ③ 中使用了 PlayerPrefs。
其余部分则取决于具体的程序。

① 允许您指定月份

在上一步中,大约在我们创建抽奖按钮的时候,我们会添加一个UI元素(按钮和文本)来指定月份。
它看起来会像这样。

对于日期,我们可以使用 System.DateTime,这样就能在启动时获取当前日期和时间,然后
使用 AddMonth() 函数通过左右按钮(◀︎ / ▶︎)更新它。
由于只显示年份和月份,我们将年份和月份设置为 Text 类型。

接下来,我将检查屏幕尺寸。WebGL
的默认分辨率为 960x600,但我可以在项目设置中更改它,所以我将其设置为 1960x1080。我还会

更改画布的大小并调整 UI 布局。

整体效果就是这样。
两侧略显稀疏,请见谅。

② 允许保存(加载)彩票数据

保存所选群组的数据(成员)。
本地保存建议使用 PlayerPrefs。PlayerPrefs
的使用说明请点击此处查看。

由于您可以为任何键设置值,因此第一步是定义键的规则。我们
将使用年份、月份和组号来创建一个唯一的键。

string key = string.Format("group_{0}_{1}_{2}", GroupNo, date.Year, date.Month);

要保存的值是成员姓名。
稍后我们将使用 Split() 函数将其拆分,因此我们将使用空格(半角字符)将其拆分为字符串。

string val = ""; for(int i=0; i<memberNames.Count; i++) { if (i > 0) val += " "; val += memberNames[i]; }

现在我们有了键和值,我们可以将它们保存在 PlayerPrefs 中。

PlayerPrefs.SetString(key, val); PlayerPrefs.Save();

很简单。
如果是正式工作用途,我会加密后再保存,但因为这是公司内部工具,我觉得纯文本格式没问题。

③ 选择抽奖月份后,将显示已确定的组别。

从 PlayerPrefs 加载在 ② 中保存的数据。

string val = PlayerPrefs.GetString(key); string[] members = val.Split(' ');

剩下的工作就是将加载的数据反映到用户界面上。

④ 尽量避免与上个月的成员相同。

最后,我们将在抽签过程中增加一项检查,以确保不会出现与上个月相同的成员。
本次抽签将在以下情况下进行重抽:
1. 与上个月不在同一组(组长);
2. 与上个月的成员不同。
但是,为了防止无限循环,如果连续重抽5次,即使出现重复成员也不会影响抽签结果。

首先,我们加载上个月各组的成员信息。
然后,我们随机选择候选人并进行以下评估。

不要加入上个月的同一个小组(组长)。

我们判断选中的候选人是否与上个月在同一组。
上个月的成员存储在一个列表中,因此我们使用 `Contains()` 函数进行检查。
如果相同,则再次抽取。

不要与上个月的成员重叠。

我们检查所选候选人上个月所属的小组。
我们将上个月小组的成员与候选人本月预期加入的小组中已注册的成员进行比较,
如果存在重复成员,则重新抽取小组成员。
由于两个成员列表都是列表,我们使用 foreach 循环遍历它们,并使用 Contains() 函数进行检查。

public bool IsSameMember(List<string> lastManthMembers) { // 检查本月成员是否与上月成员不同 bool isSame = false; foreach (string mem in memberNames) { if(lastManthMembers.Contains(mem)) { isSame = true; break; } } return isSame; }

嗯,有点差强人意,但我实在想不出什么好主意。
不过,我觉得它应该能正常运行。

概括

我觉得我勉强满足了这些要求。-
允许指定月份(System.DateTime)
- 保存(加载)选定的成员(PlayerPrefs)
- 防止与上个月的成员重叠(自定义实现)
- 还可以调整分辨率(WebGL)。再次强调
,我只使用了基本函数就实现了这个功能。

目前,Beyond Ranch 工具已开发完成(版本 1.0.0)。
如果您有任何功能改进建议,请随时与我们联系。
今天的内容就到这里。

我会更新 Git。
希望这能有所帮助。Unity
示例

最后

我已推出“SEKARAKU Lab”,这是我所属系统开发公司的服务网站。Beyond
提供从服务器设计、构建到运维的一站式服务,如果您在服务器端开发方面遇到任何问题,欢迎随时联系我们。SEKARAKU
Lab:[https://sekarakulab.beyondjapan.com/](https://sekarakulab.beyondjapan.com/)

如果您觉得这篇文章对您有帮助,请点个“赞”!
0
加载中...
0票,平均分:0.00/10
698
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者

松山健翔

我曾在一家游戏开发公司工作多年,负责编程和项目管理等工作。
2019年,我加入Beyond Inc.,在横滨办公室工作。
我主要负责服务器端开发的项目管理(偶尔也参与编程)。
我的爱好是公路自行车赛和观看赛马。