只有赋值,调用,递增,递减,等待和新对象表达式

时间:2016-10-15 06:58:45

标签: c#

昨天我发布了一个关于此代码的问题,但我做到了......非常糟糕。我和我的一位知道编码很好并且尝试了一些事情的朋友谈过,但我真的碰到了这个问题。我试着查看同一协议的其他问题,但他们的解决方案都没有对我有用......

我要做的是覆盖"效果"。服务器的效率为4或5(我不确定哪个,但它绝对是两个中的一个 - 无论如何都不重要)。我想把它当作7岁或以上。我想出了如何从服务器调用有效性数据,但它似乎仍然无法正常工作。 4/5的有效性给了我文本"它不是非常有效...",当我尝试使用代码时,它会不断发生。

这是我的代码(还有更多内容,但我删除了无关紧要的内容):

public partial class Main {
    public static int effectiveness;
    public static void BeforeMoveHits(BattleSetup setup) {
        try {
            if (setup.Defender != null) {
                switch (setup.Move.AdditionalEffectData3) {
                    case 69: { //Freeze Dry
                            if (setup.Defender.Type1 == Enums.PokemonType.Water ||
                                setup.Defender.Type2 == Enums.PokemonType.Water) {  
                                DamageCalculator.Effectiveness[256];
                            }
                        }
                        break;
                     }
                 }
         }
    }
}

如瓷砖中所述,当我尝试编译它时,我收到错误

  

只能将赋值,调用,递增,递减,等待和新对象表达式用作语句。

public static int effectiveness

从我尝试使用"有效性= 8"时遗留下来而不是DamageCalculator.Effectiveness。删除它不会影响任何东西,所以我把它留在那里以防我以后需要它。

在DamageCalculator.cs中,这就是设定有效性的原因:

public static int[] Effectiveness = new int[9] {2, 8, 16, 64, 96, 160, 256, 416, 640};

如果您觉得有用,可以查看完整代码here

还有一些关于BattleProcessor.cs有效性的信息,虽然我怀疑它的相关性,因为我继续努力...

    public static string EffectivenessToPhrase(int effectiveness) {
        if (effectiveness < 4) {
            return "It has little effect...";
        } else if (effectiveness < 6) {
            return "It's not very effective...";
        } else if (effectiveness == 7) {
            return "It's super-effective!";

        } else if (effectiveness > 7) {
            return "It's super-effective!!!";
        } else {
            return null;
        }
    }
如果你需要,

This是BattleProcessor.cs的完整代码。

值得注意的是,我可以从void更改BeforeMoveHits,并且可以将Main更改为除partial之外的任何内容。这样做会破坏游戏的其他部分。话虽如此,如果由于这些情况而无法改变效果,请告诉我。我会......尝试找出别的东西来做我想做的事。

3 个答案:

答案 0 :(得分:1)

声明没有意义

DamageCalculator.Effectiveness[256];

此语句返回一个您根本不使用的值。 你需要至少保存你在某个变量中返回的值,以便以后使用它。或者你为什么要这样做。

以下语句将解决编译时错误。

var temp = DamageCalculator.Effectiveness[256];

BTW

DamageCalculator.Effectiveness[256];
在您编译代码后,

将抛出异常。 例外情况为IndexOutOfRangeException 并在那时通过以下声明解决这个问题

DamageCalculator.Effectiveness[6]

答案 1 :(得分:1)

你的陈述&#34; Damagecalculator.effectiveness [256]&#34;没有意义。你没有在这里定义或指定任何东西。我认为这就是编译器抱怨的原因。您正在使用错误的数组。只需使用一个简单的整数来设置效果。如果您希望在此特定数字处设置有效性,则应使用枚举器。

答案 2 :(得分:0)

如果您为BattleProcessor课程链接的代码实际上大部分都是我看到的,那么您可以

  • 利用其EffectivenessToPhrase()方法向其传递足够高的effectiveness参数

    string effectivenessToPhrase =  BattleProcessor.EffectivenessToPhrase(7);
    

    这只会影响 ToPrhase 输出

  • 更改Effectiveness[]值以模仿更高的索​​引:

    DamageCalculator.Effectiveness[4]=256;
    DamageCalculator.Effectiveness[5]=256;
    

    这会影响使用DamageCalculator.Effectiveness

    的代码

    然后,一旦完成任务,您必须将这些值恢复为原始值(分别为96和160)