模通过检测
Modulo Pass Through Detection
我目前正在为纸笔 RPG 游戏编写一个小型时间转换应用程序。这是一个时间旅行设置,它使用自定义日历系统。有 12 个正常月份,但它们都有 30 天,除了第 4 个(更名为 Mapril)有 60 天。我正在寻找一种算法、参考或任何其他可以帮助计算之一的东西。为了简短起见,我有:
- 当前月份[0-11]
- 几个月的旅行时间 [0-11]
- 行进方向 [-1 或 1]
所以将月份描绘成一个环 mod 12,我需要一种方法来确定当前月份 + 旅行月份是否在顺时针方向经过 3,或者在逆时针方向到达 on/passes 3顺时针。您可以将 3 视为所有其他月份的两倍。需要澄清的是,从任何一个月的 5 号开始,您将到达任何其他月份的 5 号(包括 60 天的月份)。从说马普里尔的 31 号开始,您将转到相应月份的 1 号。
感谢您提供的任何帮助。如果这还不够清楚,我可以尝试更好地解释或提供图片。
前进时,想知道c
→c+d
是否经过3
,相当于:
c-3
→c+d-3
穿过0
(c+9)%12
→(c+d+9)%12
穿过0
(c+9)%12 + d > 12
对于最后一步,注意(c+9)%12 < 12
,所以如果加上d
使其大于12
,则意味着它越过12
(即0
) 介于两者之间。
向后移动时,想知道c
→c-d
是否穿过或到达3
:
c-3
→c-d-3
穿越或到达0
(c+9)%12
→(c-d+9)%12
穿越或到达0
(c+9)%12 - d <= 0
同样,对于最后一步,请注意 (c+9)%12 < 12
,因此减去 d
只有在它变为负数时才过零。
我目前正在为纸笔 RPG 游戏编写一个小型时间转换应用程序。这是一个时间旅行设置,它使用自定义日历系统。有 12 个正常月份,但它们都有 30 天,除了第 4 个(更名为 Mapril)有 60 天。我正在寻找一种算法、参考或任何其他可以帮助计算之一的东西。为了简短起见,我有:
- 当前月份[0-11]
- 几个月的旅行时间 [0-11]
- 行进方向 [-1 或 1]
所以将月份描绘成一个环 mod 12,我需要一种方法来确定当前月份 + 旅行月份是否在顺时针方向经过 3,或者在逆时针方向到达 on/passes 3顺时针。您可以将 3 视为所有其他月份的两倍。需要澄清的是,从任何一个月的 5 号开始,您将到达任何其他月份的 5 号(包括 60 天的月份)。从说马普里尔的 31 号开始,您将转到相应月份的 1 号。
感谢您提供的任何帮助。如果这还不够清楚,我可以尝试更好地解释或提供图片。
前进时,想知道c
→c+d
是否经过3
,相当于:
c-3
→c+d-3
穿过0
(c+9)%12
→(c+d+9)%12
穿过0
(c+9)%12 + d > 12
对于最后一步,注意(c+9)%12 < 12
,所以如果加上d
使其大于12
,则意味着它越过12
(即0
) 介于两者之间。
向后移动时,想知道c
→c-d
是否穿过或到达3
:
c-3
→c-d-3
穿越或到达0
(c+9)%12
→(c-d+9)%12
穿越或到达0
(c+9)%12 - d <= 0
同样,对于最后一步,请注意 (c+9)%12 < 12
,因此减去 d
只有在它变为负数时才过零。