首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c# -计算- RNG游戏

c# -计算- RNG游戏
EN

Stack Overflow用户
提问于 2015-09-01 13:43:50
回答 2查看 205关注 0票数 0

我在做足球比赛。为了得到一个触地得分,你必须获得100码。我有public static int yardsLeft = 100;。它经过一圈,每过一圈就有那么多码。一旦yardsLeft = 0退出,它就会退出。我很难弄清楚如何在最后(触地得分)得到码数,精确到100码。

我有这个:

代码语言:javascript
复制
if (Program.yardsLeft >= 80)
{
    if (Program.chance >= 1 && Program.chance <= 5)
        Program.gained = Program.r.Next(80, (100 + 1));

    else if (Program.chance >= 6 && Program.chance <= 12)
        Program.gained = Program.r.Next(60, (79 + 1));

    else if (Program.chance >= 13 && Program.chance <= 24)
        Program.gained = Program.r.Next(20, (59 + 1));

    else if (Program.chance >= 25 && Program.chance <= 100)
        Program.gained = Program.r.Next(1, (19 + 1));
}
else if (Program.yardsLeft <= 79 && Program.yardsLeft >= 60)
{
    if (Program.chance >= 1 && Program.chance <= 10)
        Program.gained = Program.r.Next(60, 80);

    else if (Program.chance >= 11 && Program.chance <= 30)
        Program.gained = Program.r.Next(20, 60);

    else if (Program.chance >= 31 && Program.chance <= 100)
        Program.gained = Program.r.Next(1, 20);
}
else if (Program.yardsLeft <= 59 && Program.yardsLeft >= 40)
{
    if (Program.chance >= 1 && Program.chance <= 10)
        Program.gained = Program.r.Next(40, 60);

    else if (Program.chance >= 11 && Program.chance <= 30)
        Program.gained = Program.r.Next(20, 40);

    else if (Program.chance >= 31 && Program.chance <= 100)
        Program.gained = Program.r.Next(1, 20);
}
else if (Program.yardsLeft <= 39 && Program.yardsLeft >= 20)
{
    if (Program.chance >= 1 && Program.chance <= 10)
        Program.gained = Program.r.Next(30, 40);

    else if (Program.chance >= 11 && Program.chance <= 30)
        Program.gained = Program.r.Next(10, 30);

    else if (Program.chance >= 31 && Program.chance <= 100)
        Program.gained = Program.r.Next(1, 10);
}
else if (Program.yardsLeft <= 19)
{
    if (Program.chance >= 1 && Program.chance <= 10)
        Program.gained = Program.r.Next(15, 20);

    if (Program.chance >= 11 && Program.chance <= 30)
        Program.gained = Program.r.Next(10, 15);

    if (Program.chance >= 31 && Program.chance <= 100)
        Program.gained = Program.r.Next(1, 10);
}

首先,它检查yardsLeft是否超过80码,如果是,它有机会获得这么多码(最多100码),但是,如果第一次通过,它不会超过20码(继续到下一次检查else if (Program.yardsLeft <= 79 && Program.yardsLeft >= 60),它将直接返回到else if (Program.yardsLeft <= 79 && Program.yardsLeft >= 60),并再次添加导致100码的东西,这意味着最终的结果将超过100码。

示例

代码语言:javascript
复制
if (yardsLeft is 80 or more)
    {
        // generate number somewhere through 60-80 (not ever exceed 100)
        // generate number somehwere between 20-60 (not ever exceeding 100
        // generator number somewehere between 1-20 (not ever exceeding 100)
    }
    else if (yardsLeft is between 60-20)
    {
        // generate number somewhere through 40-60 (not ever exceed 100)
        // generate number somehwere between 20-40 (not ever exceeding 100
        // generator number somewehere between 1-20 (not ever exceeding 100)
    }

最终结果CAN NOT超过100。这就是我想说的。每次它循环,我想要它产生一些数字,在最后,永远不会超过100。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-01 16:49:45

一个简单的解决方案是将这个块放在代码的其余部分之后:

代码语言:javascript
复制
Program.gained = Math.Min(Program.gained, Program.yardsLeft);

这意味着,如果所获得的码数大于达到0所需的码数,则它将被设置为所剩的码数。因此,当您稍后(大概)通过Program.yardsLeft减少Program.gained时,它不会低于0。

基础知识:Math.Min返回给定参数的最小值。此语句根据先前代码中给出的值将Program.gained设置为一个新值。这“夹紧”了Program.gained的值,使其低于yardsLeft。下面是一个简单的用法:

代码语言:javascript
复制
int yardsYouCanRun = 112;
int yardsYouTraveled = Math.Min(yardsYouCanRun, 100);
// yardsYouTraveled is Math.Min(112, 100), which is 100.

int yardsICanRun = 15;
int yardsITraveled = Math.Min(yardsICanRun, 100);
// yardsITraveled is Math.Min(15, 100), which is 15.

这代表了一种情况,你可以跟踪你可以从零跑出的码数,但是要把它限制在100,因为这是你可以跑的最大距离。两者的最小距离是跑的距离。正如你所看到的,你可以跑完全程,但我只能跑15码,所以你得到了100码的触地得分,但我只跑到了15码线。这是“夹紧”yardsXCanRun值低于100码。

这与前面的代码行相同,但与您或我可以运行的100码不同,您只能运行Program.yardsLeft

票数 1
EN

Stack Overflow用户

发布于 2015-09-01 14:43:03

我想你想要的是:

代码语言:javascript
复制
    if (Program.yardsLeft >= 80)
    {
        if (Program.chance >= 1 && Program.chance <= 5)
            Program.gained = Program.r.Next(80, (100 + 1));

        else if (Program.chance >= 6 && Program.chance <= 12)
            Program.gained = Program.r.Next(60, (79 + 1));

        else if (Program.chance >= 13 && Program.chance <= 24)
            Program.gained = Program.r.Next(20, (59 + 1));

        else if (Program.chance >= 25 && Program.chance <= 100)
            Program.gained = Program.r.Next(1, (19 + 1));
    }
    else if (Program.yardsLeft <= 79 && Program.yardsLeft >= 60)
    {
        if (Program.chance >= 1 && Program.chance <= 10)
            Program.gained = Program.r.Next(60, 80);

        else if (Program.chance >= 11 && Program.chance <= 30)
            Program.gained = Program.r.Next(20, 60);

        else if (Program.chance >= 31 && Program.chance <= 100)
            Program.gained = Program.r.Next(1, 20);
    }
    else if (Program.yardsLeft <= 59 && Program.yardsLeft >= 40)
    {
        if (Program.chance >= 1 && Program.chance <= 10)
            Program.gained = Program.r.Next(40, 60);

        else if (Program.chance >= 11 && Program.chance <= 30)
            Program.gained = Program.r.Next(20, 40);

        else if (Program.chance >= 31 && Program.chance <= 100)
            Program.gained = Program.r.Next(1, 20);
    }
    else if (Program.yardsLeft <= 39 && Program.yardsLeft >= 20)
    {
        if (Program.chance >= 1 && Program.chance <= 10)
            Program.gained = Program.r.Next(30, 40);

        else if (Program.chance >= 11 && Program.chance <= 30)
            Program.gained = Program.r.Next(10, 30);

        else if (Program.chance >= 31 && Program.chance <= 100)
            Program.gained = Program.r.Next(1, 10);
    }
    else if (Program.yardsLeft <= 19 && Program.yardsLeft !>= 100)
    {
        if (Program.chance >= 1 && Program.chance <= 10)
        Program.gained = Program.r.Next(15, 20);

    if (Program.chance >= 11 && Program.chance <= 30)
        Program.gained = Program.r.Next(10, 15);

    if (Program.chance >= 31 && Program.chance <= 100)
        Program.gained = Program.r.Next(1, 10);
    }
    else
   {return;}//return the value if over 100

只是你没有提出任何理由来检查在决赛中剩下的场地是否超过了100码。

另一种方法是使用.yardsLeft来实现随机动态,这只会让你得到100,再也不会有任何东西了。

代码语言:javascript
复制
if (Program.chance >= 31 && Program.chance <= 100)
        Program.gained = Program.r.Next(1, program.yardsLeft);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32333268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档