2015-09-01 114 views
0

我正在制作一款足球游戏。为了获得达阵,你必须获得100码。我有public static int yardsLeft = 100;。它经历一个循环,获得每个通过的许多码。一旦yardsLeft = 0,它将退出。我试图弄清楚如何让最后获得的场地(达阵)达到100码。
c# - 计算 - RNG游戏

我有这样的:

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。

示例

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

+0

这是很多if/else if的 –

+2

把这个问题减少到可以理解的地步。 – Hristo

+0

我知道大声笑.. – Donavon

回答

1

一个简单的解决办法是只需将这个块代码后剩下:

Program.gained = Math.Min(Program.gained, Program.yardsLeft); 

这意味着,如果所获得的码比去0所需的码数大,它将被设置为左侧的码数。所以,当你以后(大概)由Program.gained递减Program.yardsLeft,它不会小于0


基础知识:Math.Min返回最小你给它的参数。此声明将Program.gained设置为基于较早代码中给出的值的新值。这会将Program.gained的值“夹”到yardsLeft以下。这里有一个简单的用法:

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

+0

谢谢。这确实奏效,但是你能否解释这是如何工作的?我尽可能地学习,并且我非常致力于学习。 – Donavon

+1

@Donavon编辑扩大,希望它有帮助。 – 31eee384

0

我觉得你是想是这样的:

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 elseif

另一种做你在这里的方法是通过使用.yardsLeft使得随机动态只允许你达到100,而不会更多。

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