Как я могу использовать проценты в состоянии переключения для представления статуса игрока на основе работоспособности?

#java

#java

Вопрос:

Я должен предварить это, сказав, что я ОЧЕНЬ новичок в кодировании и Java в целом; простите мою глупость! Я пытаюсь настроить систему состояния для игрока на основе того, сколько у него здоровья, при этом их текущий статус представляет собой строку, участвующую в функции переключения, которая изменяется с «У тебя все хорошо!» на «Ты умираешь!». Однако вместо того, чтобы делать это с помощью однозначных цифр, я хочу сделать это с процентом работоспособности, чтобы сообщение не менялось при достижении 50 или 25 процентов здоровья, независимо от того, имеет ли игрок 50 или 10 здоровья максимум.

По сути, я хочу сделать так, чтобы вместо отдельных переменных, представляющих определенные значения работоспособности в функции переключения, использовались проценты PCHealth. Это то, чего я не хочу, но что я знаю, как сделать:

 int PCHealth = 10;
String Status = "";
switch (PCHealth) {
  case 5: Status = "You're fine!";
  case 2: Status = "You're dying!";
}
  

Вот что я хочу набросать в поддельном коде:

 int PCHealth = 10;
String Status = "';
switch (PCHealth) {
  case [50% of PCHealth] = "You're fine!";
  case [20 % of PCHealth] = "You're dying!";
}
  

Спасибо!

Комментарии:

1. вы можете оценить эти значения перед переключением и сохранить их в переменной, а затем поместить эту переменную внутрь switch

Ответ №1:

Просто сделайте это с помощью if-else . Это очень просто и полезно для понимания.

 public String getStatus(int PChealth, int maxValue) {
    float percent = (PChealth * 1.0f) / maxValue;

    if (percent > 75) return "great";
    else if (percent > 50) return "mid";
    else if (percent > 25) return "not good";
    else if (PChealth == 0) return "dead";
    else return "bad";
}
  

Примечания к стороне: Первое, if которое вычисляется true , вернет правильное значение.
Подкованный?

Ответ №2:

 /*

Things that you will need to know
- integer division vs double
- type casting
- Math.ceil()

# int division

10/25 --> 0

# double division

10.0/25 --> 0.4

# Math.ceil()

Math.ceil(0.4) --> 1.0



0-25 XXX
25-50 fine
50-75 good
75-100 great

*/
  

Поиграйте с этим кодом, распечатайте вещи, которые вы не понимаете, или какое значение они имеют… Я пытался упростить ситуацию.

 public class MyClass {

    private static int maxHealth = 100;
    public static String getPlayerHealthStatus(double pHealth){

        String pHStatus = "";
        int pHealth_case = (int) Math.ceil( pHealth / (maxHealth / 4));

        switch (pHealth_case) {
            case 4:
                pHStatus = "You're doing great!"; 
                break;

            case 3:
                pHStatus = "You're doing good!";
                break;

            case 2:
                pHStatus = "You're fine!";
                break;

            case 1:
                pHStatus = "You're dying!";
                break;

            case 0:
                pHStatus = "You died!";
                break;

            default:
                pHStatus = "invalid player health";
        }

        return pHStatus;
    }

    public static void main(String args[]) {
        int playerHealth = 90;
        System.out.println("player health: " playerHealth " status: " getPlayerHealthStatus(playerHealth));

        playerHealth = 70;
        System.out.println("player health: " playerHealth " status: " getPlayerHealthStatus(playerHealth));

        playerHealth = 40;
        System.out.println("player health: " playerHealth " status: " getPlayerHealthStatus(playerHealth));

        playerHealth = 20;
        System.out.println("player health: " playerHealth " status: " getPlayerHealthStatus(playerHealth));

        playerHealth = 0;
        System.out.println("player health: " playerHealth " status: " getPlayerHealthStatus(playerHealth));
    }
}
  

Вывод:

 player health: 90 status: You're doing great!
player health: 70 status: You're doing good!
player health: 40 status: You're fine!
player health: 20 status: You're dying!
player health: 0 status: You died!
  

Ответ №3:

Невозможно иметь выражения в операторах case, use if-else или, как сказал @Onkar, сохранять их в отдельной переменной.

if-else должно быть чище для вашего варианта использования.

Ответ №4:

Я бы сохранил максимальное состояние работоспособности в переменной MaxHealth , а затем попробовал следующий переключатель! 🙂

Здесь у нас есть if оператор в switch инструкции, который будет выполнять случай 1, если работоспособность составляет от 0 до 20% и так далее

 double PCHealth = __ ;

switch (((0 <= PCHealth amp;amp; PCHealth <= (0.2 * MaxHealth)) ? 0 : 
        ((0.2 * MaxHealth) > PCHealth amp;amp; (0.5 * MaxHealth) < PCHealth) ? 1 : 2)
  {

    case 0:
        Status = "You're dying!";
        break;
    case 1:
        Status = "You're fine!";
        break;
    case 2:
        Status = "You're doing excelent";
        break;
}