改进提取 Beyond Lunch 成员的工具

感谢您的辛勤工作。
我是系统开发室的松山。

上次,我做了一个简单的“午餐后分组”工具。你可以
在这里阅读之前的博客。
多亏了这个工具,我收到了组织文化委员会成员的很多感谢。(想象)
然而,原冈会长严厉但和蔼地指出,仅仅随机分组是不够的,
所以我打算再改进一下。(现实)

要求

① 由于抽奖活动每月举行,您可以指定月份。②
您可以保存(加载)抽奖数据。③
选择已举行抽奖的月份后,将显示已确定的分组。④
请确保下个月的成员与上个月的成员不重复(尽可能避免重复)。
*已更新至 Unity 2019.4.18f1 (LTS)

大概是这样的。
就 Unity 的功能而言,步骤 ② 和 ③ 可能需要用到 PlayerPrefs。
其余部分则取决于程序本身。

① 允许您指定月份

上次我们创建了一个抽奖按钮,这次我们将添加一个用户界面(按钮和文本)来指定月份。
它看起来大概是这样的。

日期可以使用 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. 与上个月的成员不同
但是,为了防止无限循环,即使出现重叠,如果连续五次抽签也允许。

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

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

确定所选候选人是否与上个月在同一组。
上个月的成员存储在一个列表中,因此使用 `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)
这次我只实现了基本功能。

目前,“午餐之外”工具已开发完成(版本 1.0.0)。
如果您有任何建议或意见,请随时联系我们,我们将改进其功能。
今天就到这里。

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

最后

我开设了我所属的系统开发服务网站“SEKARAKU Lab”。
Beyond是从服务器设计搭建到运营的一站式服务,所以如果您在服务器端开发方面遇到任何问题,请随时联系我们。
SEKARAKU 实验室: [https://sekarakulab.beyondjapan.com/](https://sekarakulab.beyondjapan.com/)

如果您觉得这篇文章有帮助,请点赞!
0
加载中...
0 票,平均:0.00 / 10
644
X Facebook 哈特纳书签 口袋

写这篇文章的人

关于作者

松山贤章

他长期在一家游戏开发公司工作,从事程序和项目管理工作。
2019年加入超越株式会社。
在横滨办事处工作。 主要负责服务器端开发工作的项目管理。
(有时编程)我的爱好是骑自行车(公路赛车)和观看赛马。