C# 范围不适用于开关箱,需要良好的替代品
我正在尝试为我正在制作的基于文本的RPG创建一个升级系统。我遇到的问题是,似乎范围无法与开关盒一起工作。以下是我所拥有的: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
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已编辑。提供的所有操作方法都应该有效。如果您遇到问题,可以将代码粘贴到或类似的地方,我可以查看一下。