Member 13253172 Ответов: 2

Как я могу заставить этот код работать "как" функция?


public int Phaser3(int range)
        {
            int damage = 0;
            int dieroll = RandomLib.RandomLib.ThreadLocalRandom.Next(1, 7);
            if (range <= 0 && range >= 0)
            {

                switch (dieroll)
                {

                    case 1:
                        damage = 4;
                        return (damage);

                    case 2:
                        damage = 4;
                        return (damage);

                    case 3:
                        damage = 4;
                        return (damage);

                    case 4:
                        damage = 4;
                        return (damage);


                    case 5:
                        damage = 4;
                        return (damage);

                    case 6:
                        damage = 3;
                        return (damage);



                }
            }
            else if (range <= 1 && range > 0)
            {

                switch (dieroll)
                {

                    case 1:
                        damage = 4;
                        return (damage);

                    case 2:
                        damage = 4;
                        return (damage);

                    case 3:
                        damage = 4;
                        return (damage);

                    case 4:
                        damage = 4;
                        return (damage);


                    case 5:
                        damage = 3;
                        return (damage);

                    case 6:
                        damage = 3;
                        return (damage);
                }
            }
            else if (range <= 2 && range > 1)
            {

                switch (dieroll)
                {

                    case 1:
                        damage = 4;
                        return (damage);

                    case 2:
                        damage = 4;
                        return (damage);

                    case 3:
                        damage = 4;
                        return (damage);

                    case 4:
                        damage = 3;
                        return (damage);


                    case 5:
                        damage = 2;
                        return (damage);

                    case 6:
                        damage = 1;
                        return (damage);
                }
            }
            else if (range <= 3 && range > 2)
            {
                switch (dieroll)
                {

                    case 1:
                        damage = 3;
                        return (damage);

                    case 2:
                        damage = 2;
                        return (damage);

                    case 3:
                        damage = 1;
                        return (damage);

                    case 4:
                        damage = 0;
                        return (damage);


                    case 5:
                        damage = 0;
                        return (damage);

                    case 6:
                        damage = 0;
                        return (damage);
                }
            }
            else if (range <= 8 && range > 3)
            {
                switch (dieroll)
                {

                    case 1:
                        damage = 1;
                        return (damage);

                    case 2:
                        damage = 1;
                        return (damage);

                    case 3:
                        damage = 0;
                        return (damage);

                    case 4:
                        damage = 0;
                        return (damage);


                    case 5:
                        damage = 0;
                        return (damage);

                    case 6:
                        damage = 0;
                        return (damage);
                }
            }
            else if (range <= 15 && range > 8)
            {
                switch (dieroll)
                {

                    case 1:
                        damage = 1;
                        return (damage);

                    case 2:
                        damage = 0;
                        return (damage);

                    case 3:
                        damage = 0;
                        return (damage);

                    case 4:
                        damage = 0;
                        return (damage);


                    case 5:
                        damage = 0;
                        return (damage);

                    case 6:
                        damage = 0;
                        return (damage);
                }
            }
            else
            {
                damage = 0;
                return (damage);
            }
            damage = 0;
            return (damage);
        }


Что я уже пробовал:

"dieroll" - это работающий генератор случайных чисел, на котором я смог провести тест печати. Есть ли способ превратить это в функцию, чтобы ее можно было использовать ? Как это будет называться и настраиваться? Очень новичок в кодировании, так что любой совет будет приветствоваться, спасибо.

PIEBALDconsult

Непонятный.
RandomLib.RandomLib.ThreadLocalRandom. Next(1, 7)
Это функция. В чем проблема?

Member 13253172

то, что я устаю делать, - это добавлять вложенные if и переключатели, чтобы действовать как функция, чтобы я мог использовать ее встроенно .
Спасибо за ваше время

PIEBALDconsult

Разве не это делает ваша функция Phase3?
Я мог бы также рекомендовать использовать матрицу, а не ifs и коммутаторы.

Member 13253172

Мне очень жаль, что я не очень хорошо объясняю вещи, я хочу, чтобы phas3 была встроенной функцией.
Я попробовал несколько разных вызовов и получил ошибку .Phas3-это одно из многих видов оружия, которое будет использоваться в игре, если я смогу заставить их вызываться, когда оружие должно стрелять "в радиусе действия и уроне, нанесенном переключателем"
Спасибо Вам за вашу помощь и терпение

0x01AA

Там, кажется, тоже есть логическая ошибка, см. ваше первое "если".
if (range <= 0 && range >= 0) это будет единственный путь, который будет выполнен.

Member 13253172

да теперь я вижу это спасибо

2 Ответов

Рейтинг:
1

Richard MacCutchan

Вы могли бы начать с удаления всего этого дубликата кода и использования default: этот пункт инструкций для всех значений, которые возвращают ноль. Вы также можете использовать несколько операторов case для одного и того же возвращаемого значения, а не отдельные предложения, которые все возвращают одно и то же число. И большинство ваших if операторы содержат избыточное &&, так как вы ранее проверяли другое значение. И наверное лучше убрать все повторное return операторы и наличие только одного в конце метода.

Таким образом, вы могли бы сделать его более компактным, например:

int damage = 0;
int dieroll = RandomLib.RandomLib.ThreadLocalRandom.Next(1, 7);
if (range == 0)
{
    switch (dieroll)
    {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        damage = 4;
        break;
        
    case 6:
        damage = 3;
        break;
        }
}
else if (range <= 1)
{
    switch (dieroll)
    {
    case 1:
    case 2:
    case 3:
    case 4:
        damage = 4;
        break;
        
    case 5:
    case 6:
        damage = 3;
        break;
        }
}
else if (range <= 2)
{
    switch (dieroll)
    {
    case 1:
    case 2:
    case 3:
        damage = 4;
        break;
        
    case 4:
        damage = 3;
        break;
        
    case 5:
        damage = 2;
        break;

    case 6:
        damage = 1;
        break;
    }
}
else if (range <= 3)
{
   // etc. etc.
}

// this statement is only needed once right at the end
return (damage);


Рейтинг:
0

Patrice T

Цитата:
Как я могу заставить этот код работать "как" функция?

Как сказать, этот код уже является функцией.
Цитата:
Как это будет называться и настраиваться?

Точно так же, как и с любой функцией в C#.
int Damage+Phaser3( 1);

Ваш код не особенно умен, но в принципе он работает.
Цитата:
Очень новичок в кодировании так что любой совет будет приветствоваться спасибо

Совет: забудьте пока о своем проекте и изучите настоящее программирование и C#.
Следуйте многим учебникам, выполняйте все упражнения.