首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将这些if/elseif if语句替换为更干净的语句

将这些if/elseif if语句替换为更干净的语句
EN

Stack Overflow用户
提问于 2017-11-03 14:38:37
回答 3查看 97关注 0票数 2

好的,我已经写了大约一个星期的脚本了。在游戏(Runescape)中,有被称为堡垒的内容。你所做的是每周收集资源用于维护和升级(如果有的话)。维护是保持城堡的地块正常运行的每周成本,否则它们将会退化。维护成本的每一层或级别都会发生变化。升级是指您正在升级或构建的任何东西(新绘图)。在将任何资源应用于任何升级之前,您必须首先满足维护要求。每周每个玩家只能限制一定数量的资源。好了,现在我要解释一下我要实现的目标了。将有一个表单将每个图的级别传递给脚本。所以我要做的是:

代码语言:javascript
复制
if($citadel = '1'){
  $wood_upkeep = "1500";
  $stone_upkeep = "0";
  $bar_upkeep = "0";
  $pbar_upkeep = "0";
  $cloth_upkeep = "0";
  $rations_upkeep = "0";
}elseif($citadel = '2'){
  $wood_upkeep = "3600";
  $stone_upkeep = "0";
  $bar_upkeep = "0";
  $pbar_upkeep = "0";
  $cloth_upkeep = "0";
  $rations_upkeep = "0";
}elseif($citadel = '3'){
  $wood_upkeep = "2975";
  $stone_upkeep = "2550";
  $bar_upkeep = "0";
  $pbar_upkeep = "0";
  $cloth_upkeep = "0";
  $rations_upkeep = "0";
}elseif($citadel = '4'){
  $wood_upkeep = "1690";
  $stone_upkeep = "1500";
  $bar_upkeep = "1500";
  $pbar_upkeep = "0";
  $cloth_upkeep = "0";
  $rations_upkeep = "0";
}elseif($citadel = '5'){
  $wood_upkeep = "2250";
  $stone_upkeep = "2300";
  $bar_upkeep = "2200";
  $pbar_upkeep = "100";
  $cloth_upkeep = "0";
  $rations_upkeep = "0";
  $cap_limit = "2000";
}elseif($citadel = '6'){
  $wood_upkeep = "2470";
  $stone_upkeep = "1495";
  $bar_upkeep = "1690";
  $pbar_upkeep = "1365";
  $cloth_upkeep = "2210";
  $rations_upkeep = "0";
  $cap_limit = "2350";
}elseif($citadel = '7'){
  $wood_upkeep = "2800";
  $stone_upkeep = "400";
  $bar_upkeep = "1600";
  $pbar_upkeep = "2000";
  $cloth_upkeep = "3000";
  $rations_upkeep = "3000";
  $cap_limit = "2700";
}

乘以10个图,这是大量的代码(超过500行)。我计算了一下,它将会有超过2000行的代码,仅仅是为了实现x升级/维护所需的一些“上限”。这些if/elseif if语句所做的仅仅是根据层(Lvl)x图的内容分配成本值。然后我使用成本值,将它们相加,并除以每周上限限制,这将得到实现x升级+维护所需的上限数量。我非常确定有一种更简单的方法可以做到这一点,只是不知道怎么做或做什么。

EN

回答 3

Stack Overflow用户

发布于 2017-11-03 14:41:43

使用switch-case

代码语言:javascript
复制
/* zeroing the values as suggested by @paul-t */

$wood_upkeep = "0";
$stone_upkeep = "0";
$bar_upkeep = "0";
$pbar_upkeep = "0";
$cloth_upkeep = "0";
$rations_upkeep = "0";

switch($citadel) {
    case '1':
        $wood_upkeep = "1500";
        break;

    case '2':
        $wood_upkeep = "3600";
        break;

    case '3':
        $wood_upkeep = "2975";
        $stone_upkeep = "2550";
        break;

    .
    .
    .

    case 'n':
        //statements here
        break;


}
票数 8
EN

Stack Overflow用户

发布于 2017-11-03 14:44:58

现在我的脑海中有三个主要的解决方案:

  1. 使用switch (citadel) +case。
  2. 准备具有以下值的关联数组:

$citadelParams1 =数组(“wood_upkeep”=> "3600","stone_upkeep = "0",...);

您可以简单地通过以下方式访问这些值:

代码语言:javascript
复制
$citadelParams[$citadel_id]["wood_upkeep"];

  1. 这是我的最爱。只需使用xml或json文件来存储这些值,并在代码中读取它们。不需要在代码中硬编码值,而且即使您不是程序员,也可以很容易地在此特定文件中查找和更改值:)

在#3中使用一些有用的东西:

  • file_get_contents读取文件到string
  • json_decode解析之前用file_get_contents读取的字符串(我建议使用第二个参数作为TRUE,这样你就可以返回简单的关联数组并像在#2中一样使用它)
票数 3
EN

Stack Overflow用户

发布于 2017-11-03 15:23:13

就个人而言,(如果这是一个游戏或类似的东西)。我会将这些值中的每一个作为数组存储在它们自己的文件中。几乎就像一个配置。所以你会有像这样的文件

文件citadel1.php

代码语言:javascript
复制
<?php
return [
   'wood_upkeep' => "1500",
   'stone_upkeep' => "0",
   'bar_upkeep' => "0",
   'pbar_upkeep' => "0",
   'cloth_upkeep' => "0",
   'rations_upkeep' => "0",
];

然后,您只需根据$citadel的值加载文件

代码语言:javascript
复制
$values = include "{$pathtofile}/citadel{$citadel}.php";

这样你就可以更好地组织它们。对于其他东西,比如你可能有一个包含配置的citadel文件夹,然后你有一个blacksmith文件夹等等,这样比通过代码挖掘来找到它们容易得多。

代码语言:javascript
复制
home/
   buildings/
        citadel/
            citadel1.php
            citadel2.php
            citadel3.php
            citadel4.php
            citadel5.php
       blacksmith/
            ... etc.

另外,如果你想升级到$citadel = '6',你只需复制citadel5.php的文件,更改一些内容,将其另存为citadel6.php,然后将$citadel to = 6设置为不需要更改代码。

它很漂亮,如果需要的话,不需要。

注意-如果我没记错的话,像这样从文件中分配一个变量,只适用于include

你甚至可以用php保存它们。

代码语言:javascript
复制
    file_put_contents('citadel5.php', "<?php\nreturn ".var_export($values, true ).";");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47089852

复制
相关文章

相似问题

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