algorithm - 求两位小数的最小公分母

标签 algorithm

我目前正在开发一个基于文本的网络游戏,我在其中自动模拟战斗序列,如 MyBrutePockie Ninja

原来是这样

我们有 2 个攻击速度不同的玩家

攻击速度(决定玩家开始攻击所需的秒数)

(简单示例)假设玩家 1 有 6s,玩家 2 有 3

这意味着玩家 2 将在玩家 1 之前攻击两次

(这是因为如果两个玩家在一个攻击回合中并列,则攻击速度更快的玩家先行)

(但如果攻击速度相同,则最近没有攻击的玩家会去)

现在我的问题在循环中。

我想确定轮到谁的循环次数最少

对于我们的Easy Example,我们可以创建一个无限循环,其中有一个递增 3 个值的计数器来确定轮到谁,然后检查每次迭代是否有赢家并退出环形。 (这是我的算法,您可以提出更好的建议)

对我来说最大的问题是当我现在有 attack speed 的十进制值时

现实示例(假设我只使用 1 位小数)

Player1 攻击速度 = 5.7

Player2 攻击速度 = 6.6

在最坏的情况下,我们可以将 0.1 作为 LCD 并用作每个循环的减数,但我想确定最佳减数 (LCD) 值。

希望它有意义。

谢谢。感谢您分享您的伟大思想。

更新 //这不是实际代码,但这是逻辑

decimal Player1Turn = Player1.attackspeed;
decimal Player2Turn = Player2.attackspeed;
decimal LCD = GetLCD(Player1.attackspeed,Player2.attackspeed)  ***//THIS IS WHAT I WANT TO DETERMINE***
while (Player1.HP >0 && Player2.HP >0)
{
    Player1Turn -= LCD;
    Player2Turn -= LCD;
    if (Player1Turn<=0)
    {
        //DO STUFF
        Player1Turn = Player1.attackspeed;
    }
    if (Player2Turn<=0)
    {
        //DO STUFF
        Player2Turn = Player2.attackspeed;
    }
}

我们可以使用类似的函数

public decimal GetLCD(decimal num1, decimal num2)
   {
        //returns the lcd  
   }

最佳答案

以下代码在不使用最小公分母的情况下处理战斗序列。它还将比所有可能的尝试快约 100 万倍,使用玩家攻击速度的最低公分母等于例如分别为 1000 和 1000.001。

decimal time = 0;
while (player1.HP > 0 && player2.HP > 0) {
    decimal player1remainingtime = player1.attackspeed - (time % player1.attackspeed);
    decimal player2remainingtime = player2.attackspeed - (time % player2.attackspeed);
    time += Math.Min(player1remainingtime, player2remainingtime);
    if(player1remainingtime < player2remainingtime) {
        //it is player 1 turn; do stuff;
    } else if(player1remainingtime > player2remainingtime) {
        //it is player 2 turn; do stuff;
    } else {
        //both player turns now
        if(player1.attackspeed < player2.attackspeed) {
            //player 1 is faster, its player 1 turn; do stuff
            //now do stuff for player 2
        } else {
            //player 2 is faster, its player 2 turn; do stuff
            //now do stuff for player 1
        }
    }
}

关于algorithm - 求两位小数的最小公分母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9390914/

相关文章:

python - 如何创建和销毁wx.App?

algorithm - LZW解压算法

c++ - 如何生成随机顶点以在 C++ 中形成凸多边形?

java - 如何降低在两个列表中搜索算法的复杂度?

java - 基于笛卡尔坐标点积的算法计算地理距离

algorithm - 寻找变密度三角剖分的非结构化网格生成算法

c# - 两个坐标的相对主方向

algorithm - 以编程方式将数字序列拆分为 4 个相对相等的 block

algorithm - 按顺序划分数组

algorithm - 在图的生成树中找到最大比率最小切割