C# 范围不适用于开关箱,需要良好的替代品

C# 范围不适用于开关箱,需要良好的替代品,c#,switch-statement,range,C#,Switch Statement,Range,我正在尝试为我正在制作的基于文本的RPG创建一个升级系统。我遇到的问题是,似乎范围无法与开关盒一起工作。以下是我所拥有的: int exp = 0, level = 1, hp = 10, hpmax = 10; if (exp >= 262144) exp = 262144; switch (exp) { case (4 - 15): level = 2; hp = 12; hpmax = 12; break; case (1

我正在尝试为我正在制作的基于文本的RPG创建一个升级系统。我遇到的问题是,似乎范围无法与开关盒一起工作。以下是我所拥有的:

int exp = 0, level = 1, hp = 10, hpmax = 10;

if (exp >= 262144) exp = 262144;

switch (exp)            
{
case (4 - 15):
    level = 2;
    hp = 12;
    hpmax = 12;
    break;

case (16 - 63):
    level = 3;
    hp = 14;
    hpmax = 14;
    break;

case (64 - 255):
    level = 4;
    hp = 16;
    hpmax = 16;
    break;

case (256 - 1023):
    level = 5;
    hp = 18;
    hpmax = 18;
    break;

case (1024 - 4095):
    level = 6;
    hp = 20;
    hpmax = 20;
    break;

case (4096 - 16383):
    level = 7;
    hp = 20;
    hpmax = 20;
    break;

case (16384 - 65535):
    level = 8;
    hp = 22;
    hpmax = 22;
    break;

case (65536 - 262143):
    level = 9;
    hp = 24;
    hpmax = 24;
    break;

case (262144 - 999999999):
    level = 10;
    hp = 26;
    hpmax = 26;
    break;

是的,我意识到这不是我想要的。我对我找到的备选方案不太满意。我在寻找最简单的解决办法。我是编程新手,希望您能提供帮助。

从概念上讲,您可以使用函数进行检查

使用c++的示例:

inline bool in_range(int min, int max, int value)
{ return min <= value && value <= max; }

// ....

        int exp = 0, level = 1, hp = 10, hpmax = 10;

        if (exp >= 262144) exp = 262144;

        if (in_range(0, 15, exp)) {
            level = 2;
            hp = 12;
            hpmax = 12;
        } else if (in_range(16, 63, exp)) {
            level = 3;
            hp = 14;
            hpmax = 14;
        } else if ...
inline bool在_范围内(int-min,int-max,int-value)

{return min从概念上讲,您可以使用函数进行检查

使用c++的示例:

inline bool in_range(int min, int max, int value)
{ return min <= value && value <= max; }

// ....

        int exp = 0, level = 1, hp = 10, hpmax = 10;

        if (exp >= 262144) exp = 262144;

        if (in_range(0, 15, exp)) {
            level = 2;
            hp = 12;
            hpmax = 12;
        } else if (in_range(16, 63, exp)) {
            level = 3;
            hp = 14;
            hpmax = 14;
        } else if ...
inline bool在_范围内(int-min,int-max,int-value)

{return min注意如果
hpmax
总是=
hp
,您可以在最后设置它,您不需要在所有
情况下都设置它

使用if-else:

if (4 <= exp && exp <= 15)
{
  level = 2;
  hp = 12;
}
else if (16 <= exp && exp <= 63)
{
  level = 3;
  hp = 14;
}
else if ...

hpmax = hp; // set hpmax afterwards
if (exp < 4) // 0-3
  ; // do nothing
else if (exp < 16) // 4-15
  ...
else if (exp < 64) // 16-63
  ...
switch((int)(Math.Log(exp)/Math.Log(2)))
{
  case 2: case 3: // 4-15
    level = 2;
    hp = 12;
    break;
  case 4: case 5: // 16-63
    ...
  default: // 262144-999999999
    ...
}
hpmax = hp;
数学(短得多)解决方案:(并非适用于所有情况,只是从中推导出解决方案)


注意:如果
hpmax
始终为=
hp
,您可以在最后设置,您不需要在所有
情况下都设置它

使用if-else:

if (4 <= exp && exp <= 15)
{
  level = 2;
  hp = 12;
}
else if (16 <= exp && exp <= 63)
{
  level = 3;
  hp = 14;
}
else if ...

hpmax = hp; // set hpmax afterwards
if (exp < 4) // 0-3
  ; // do nothing
else if (exp < 16) // 4-15
  ...
else if (exp < 64) // 16-63
  ...
switch((int)(Math.Log(exp)/Math.Log(2)))
{
  case 2: case 3: // 4-15
    level = 2;
    hp = 12;
    break;
  case 4: case 5: // 16-63
    ...
  default: // 262144-999999999
    ...
}
hpmax = hp;
数学(短得多)解决方案:(并非适用于所有情况,只是从中推导出解决方案)


您可能正在寻找if-then-else语句:

           int exp = 0, level = 1, hp = 10, hpmax = 10;


            if ((4 >= exp) && (exp <= 15)){
                level = 2;
                hp = 12;
                hpmax = 12;
            } elseif ((16 >= exp) && (exp <= 63)){
                level = 3;
                hp = 14;
                hpmax = 14;
            } elseif ((64 >= exp) && (exp <= 255)){
                level = 4;
                hp = 16;
                hpmax = 16;
            } elseif ((256 >= exp) && (exp <= 1023)){
                level = 5;
                hp = 18;
                hpmax = 18;
            } elseif ((256 >= exp) && (exp <= 1023)){

             .... etc, you know what do paste here, etc ....

            } elseif ((262144 >= exp) && (exp <= 999999999)){
                level = 10;
                hp = 26;
                hpmax = 26;
            } else {
                ... you probably don't need anything here ...
                ... you already set defaults in the init up top...
            }
int exp=0,level=1,hp=10,hpmax=10;

如果((4>=exp)&&(exp=exp)&&(exp=exp)&&(exp=exp)&&(exp=exp)&&(exp=exp)&&(exp您可能正在寻找if-then-else语句:

           int exp = 0, level = 1, hp = 10, hpmax = 10;


            if ((4 >= exp) && (exp <= 15)){
                level = 2;
                hp = 12;
                hpmax = 12;
            } elseif ((16 >= exp) && (exp <= 63)){
                level = 3;
                hp = 14;
                hpmax = 14;
            } elseif ((64 >= exp) && (exp <= 255)){
                level = 4;
                hp = 16;
                hpmax = 16;
            } elseif ((256 >= exp) && (exp <= 1023)){
                level = 5;
                hp = 18;
                hpmax = 18;
            } elseif ((256 >= exp) && (exp <= 1023)){

             .... etc, you know what do paste here, etc ....

            } elseif ((262144 >= exp) && (exp <= 999999999)){
                level = 10;
                hp = 26;
                hpmax = 26;
            } else {
                ... you probably don't need anything here ...
                ... you already set defaults in the init up top...
            }
int exp=0,level=1,hp=10,hpmax=10;

如果((4>=exp)&&&(exp=exp)&&(exp=exp)&&(exp=exp)&&&(exp=exp)&&(exp我认为您应该使用定义数组和连续if的组合来找到字符的正确级别,我将向您展示一个带有随机(和更少)值的示例

<?php
// Definition of experience needed per level, and hp given
$levelsData = array( 1 => array( "exp" => 0,
                                 "hp" => 10),
                     2 => array( "exp" => 4,
                                 "hp" => 12),
                     3 => array( "exp" => 15,
                                 "hp" => 16),
                     4 => array( "exp" => 27,
                                 "hp" => 34),
                     5 => array( "exp" => 500,
                                 "hp" => 120));

// Finding user level, giving $exp as current exp
foreach ($levelsData as $level => $data) {
    if ($exp < $data['exp']) {
        break;
    }
}

// Setting data, we already have $level as the actual level+1
$level--;
$data = $levelsData[$level];
$hp = $data['hp'];
$maxHp = $hp;
?>

我认为您应该使用定义数组和连续数组的组合,如果要找到角色的正确级别,我将向您展示一个随机(或更少)值的示例

<?php
// Definition of experience needed per level, and hp given
$levelsData = array( 1 => array( "exp" => 0,
                                 "hp" => 10),
                     2 => array( "exp" => 4,
                                 "hp" => 12),
                     3 => array( "exp" => 15,
                                 "hp" => 16),
                     4 => array( "exp" => 27,
                                 "hp" => 34),
                     5 => array( "exp" => 500,
                                 "hp" => 120));

// Finding user level, giving $exp as current exp
foreach ($levelsData as $level => $data) {
    if ($exp < $data['exp']) {
        break;
    }
}

// Setting data, we already have $level as the actual level+1
$level--;
$data = $levelsData[$level];
$hp = $data['hp'];
$maxHp = $hp;
?>

这就是我最终使用的:

静态空隙率系统()

{

如果((4这就是我最终使用的:

静态空隙率系统()

{

如果((4)不确定OP使用的是什么语言,但在我看来它不像PHP。可能不是,但由于没有指定语言,我使用了我更擅长的语言…策略在这里很重要,我希望…)不确定OP使用的是哪种语言,但在我看来它不像PHP。可能不是,但由于没有指定语言,我使用了我比较擅长的语言…我希望策略在这里很重要…)你的第一个建议似乎不起作用,除非我做错了什么。顺便说一句,我正在使用C#。我写了一个方法来增加测试的HP。当我键入“iddqd”时它增加了我的经验。我还为一个stats命令编写了一个方法来显示我的角色的统计信息。下面是我在程序中看到的:stats Frank=================================级别:1体验:0生命值:10/10 iddqd stats Frank===========================级别:1体验:4生命值:10/10 iddqd stats Frank==========================================级别:1体验:20 Hit分:10分/10@JaredPrice已编辑。提供的所有操作方法都应该有效。如果您遇到问题,您可以将代码粘贴到或类似的地方,我可以看一看。您的第一个建议似乎不起作用,除非我做错了。顺便说一下,我正在使用C。我编写了一个方法来提高测试的HP。当我做不到时类型“iddqd”它增加了我的经验。我还为一个stats命令编写了一个方法来显示我的角色的统计信息。下面是我在程序中看到的:stats Frank=================================级别:1体验:0生命值:10/10 iddqd stats Frank===========================级别:1体验:4生命值:10/10 iddqd stats Frank==========================================级别:1体验:20 Hit分:10分/10@JaredPrice已编辑。提供的所有操作方法都应该有效。如果您遇到问题,可以将代码粘贴到或类似的地方,我可以查看一下。